diff --git a/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.cpp b/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.cpp index 1cfb7bf10b..228c2f07da 100644 --- a/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.cpp +++ b/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.cpp @@ -131,7 +131,7 @@ NonnullRefPtrVector ParserAutoComplete::get_available_declarations( current = current->parent(); } - available_declarations.append(get_declarations_in_outer_scope_including_headers(document)); + available_declarations.append(get_global_declarations_including_headers(document)); return available_declarations; } @@ -257,7 +257,7 @@ String ParserAutoComplete::type_of(const DocumentData& document, const Expressio Vector ParserAutoComplete::properties_of_type(const DocumentData& document, const String& type) const { - auto declarations = get_declarations_in_outer_scope_including_headers(document); + auto declarations = get_global_declarations_including_headers(document); Vector properties; for (auto& decl : declarations) { if (!decl.is_struct_or_class()) @@ -272,7 +272,7 @@ Vector ParserAutoComplete::properties_of_type( return properties; } -NonnullRefPtrVector ParserAutoComplete::get_declarations_in_outer_scope_including_headers(const DocumentData& document) const +NonnullRefPtrVector ParserAutoComplete::get_global_declarations_including_headers(const DocumentData& document) const { NonnullRefPtrVector declarations; for (auto& include : document.preprocessor().included_paths()) { @@ -280,11 +280,24 @@ NonnullRefPtrVector ParserAutoComplete::get_declarations_in_outer_s auto included_document = get_document_data(document_path_from_include_path(include)); if (!included_document) continue; - declarations.append(get_declarations_in_outer_scope_including_headers(*included_document)); + declarations.append(get_global_declarations_including_headers(*included_document)); } - for (auto& decl : document.parser().root_node()->declarations()) { + declarations.append(get_global_declarations(*document.parser().root_node())); + + return declarations; +} + +NonnullRefPtrVector ParserAutoComplete::get_global_declarations(const ASTNode& node) const +{ + NonnullRefPtrVector declarations; + + for (auto& decl : node.declarations()) { declarations.append(decl); + if(decl.is_namespace()) + { + declarations.append(get_global_declarations(decl)); + } } return declarations; @@ -396,7 +409,9 @@ RefPtr ParserAutoComplete::find_declaration_of(const DocumentData& void ParserAutoComplete::update_declared_symbols(const DocumentData& document) { Vector declarations; - for (auto& decl : document.parser().root_node()->declarations()) { + + for(auto& decl : get_global_declarations(*document.parser().root_node())) + { declarations.append({ decl.name(), { document.filename(), decl.start().line, decl.start().column }, type_of_declaration(decl) }); } diff --git a/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.h b/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.h index 620afdf1c2..c5dcef52c6 100644 --- a/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.h +++ b/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.h @@ -96,7 +96,8 @@ private: RefPtr type; }; Vector properties_of_type(const DocumentData& document, const String& type) const; - NonnullRefPtrVector get_declarations_in_outer_scope_including_headers(const DocumentData& document) const; + NonnullRefPtrVector get_global_declarations_including_headers(const DocumentData& document) const; + NonnullRefPtrVector get_global_declarations(const ASTNode& node) const; const DocumentData* get_document_data(const String& file) const; const DocumentData* get_or_create_document_data(const String& file);