summaryrefslogtreecommitdiff
path: root/Userland/DevTools
diff options
context:
space:
mode:
authorItamar <itamar8910@gmail.com>2021-03-13 09:50:33 +0200
committerAndreas Kling <kling@serenityos.org>2021-03-13 10:17:02 +0100
commit7bf6eca9d81ca5ac4176a4533c8bf3cce03252dc (patch)
tree20857932fa5006afc977d1060722edb0ff49313e /Userland/DevTools
parent5b22f6f45a832d7b56fd1a9a566aeb35072c6972 (diff)
downloadserenity-7bf6eca9d81ca5ac4176a4533c8bf3cce03252dc.zip
LanguageServers/Cpp: Complete Preprocessor definitions
Preprocessor definitions now appear in the AutoComplete suggestions box as well as in the Locator.
Diffstat (limited to 'Userland/DevTools')
-rw-r--r--Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.cpp15
-rw-r--r--Userland/DevTools/HackStudio/Locator.cpp3
2 files changed, 17 insertions, 1 deletions
diff --git a/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.cpp b/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.cpp
index 27d936b028..9f6ac5aa49 100644
--- a/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.cpp
+++ b/Userland/DevTools/HackStudio/LanguageServers/Cpp/ParserAutoComplete.cpp
@@ -163,6 +163,13 @@ Vector<GUI::AutocompleteProvider::Entry> ParserAutoComplete::autocomplete_name(c
suggestions.append({ name.to_string(), partial_text.length(), GUI::AutocompleteProvider::CompletionKind::Identifier });
}
}
+
+ for (auto& preprocessor_name : document.parser().definitions().keys()) {
+ if (preprocessor_name.starts_with(partial_text)) {
+ suggestions.append({ preprocessor_name.to_string(), partial_text.length(), GUI::AutocompleteProvider::CompletionKind::PreprocessorDefinition });
+ }
+ }
+
return suggestions;
}
@@ -275,9 +282,11 @@ NonnullRefPtrVector<Declaration> ParserAutoComplete::get_declarations_in_outer_s
continue;
declarations.append(get_declarations_in_outer_scope_including_headers(*included_document));
}
+
for (auto& decl : document.parser().root_node()->declarations()) {
declarations.append(decl);
}
+
return declarations;
}
@@ -374,6 +383,11 @@ void ParserAutoComplete::update_declared_symbols(const DocumentData& document)
for (auto& decl : document.parser().root_node()->declarations()) {
declarations.append({ decl.name(), { document.filename(), decl.start().line, decl.start().column }, type_of_declaration(decl) });
}
+
+ for (auto& definition : document.preprocessor().definitions()) {
+ declarations.append({ definition.key, { document.filename(), definition.value.line, definition.value.column }, GUI::AutocompleteProvider::DeclarationType::PreprocessorDefinition });
+ }
+
set_declarations_of_document(document.filename(), move(declarations));
}
@@ -403,7 +417,6 @@ OwnPtr<ParserAutoComplete::DocumentData> ParserAutoComplete::create_document_dat
all_definitions.set(move(item.key), move(item.value));
for (auto include : document_data->preprocessor().included_paths()) {
-
auto included_document = get_or_create_document_data(document_path_from_include_path(include));
if (!included_document)
continue;
diff --git a/Userland/DevTools/HackStudio/Locator.cpp b/Userland/DevTools/HackStudio/Locator.cpp
index 994600eab2..b796b2ddd4 100644
--- a/Userland/DevTools/HackStudio/Locator.cpp
+++ b/Userland/DevTools/HackStudio/Locator.cpp
@@ -86,6 +86,7 @@ public:
static GUI::Icon class_icon(Gfx::Bitmap::load_from_file("/res/icons/hackstudio/Class.png"));
static GUI::Icon function_icon(Gfx::Bitmap::load_from_file("/res/icons/hackstudio/Function.png"));
static GUI::Icon variable_icon(Gfx::Bitmap::load_from_file("/res/icons/hackstudio/Variable.png"));
+ static GUI::Icon preprocessor_icon(Gfx::Bitmap::load_from_file("/res/icons/hackstudio/Preprocessor.png"));
switch (suggestion.as_symbol_declaration.value().type) {
case GUI::AutocompleteProvider::DeclarationType::Struct:
return struct_icon;
@@ -95,6 +96,8 @@ public:
return function_icon;
case GUI::AutocompleteProvider::DeclarationType::Variable:
return variable_icon;
+ case GUI::AutocompleteProvider::DeclarationType::PreprocessorDefinition:
+ return preprocessor_icon;
}
return {};
}