summaryrefslogtreecommitdiff
path: root/Userland/DevTools/HackStudio/LanguageServers/CodeComprehensionEngine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/DevTools/HackStudio/LanguageServers/CodeComprehensionEngine.cpp')
-rw-r--r--Userland/DevTools/HackStudio/LanguageServers/CodeComprehensionEngine.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/Userland/DevTools/HackStudio/LanguageServers/CodeComprehensionEngine.cpp b/Userland/DevTools/HackStudio/LanguageServers/CodeComprehensionEngine.cpp
new file mode 100644
index 0000000000..20f2a7a1d6
--- /dev/null
+++ b/Userland/DevTools/HackStudio/LanguageServers/CodeComprehensionEngine.cpp
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2021, Itamar S. <itamar8910@gmail.com>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include "CodeComprehensionEngine.h"
+
+namespace LanguageServers {
+
+CodeComprehensionEngine::CodeComprehensionEngine(const FileDB& filedb, bool should_store_all_declarations)
+ : m_filedb(filedb)
+ , m_store_all_declarations(should_store_all_declarations)
+{
+}
+
+CodeComprehensionEngine::~CodeComprehensionEngine()
+{
+}
+void CodeComprehensionEngine::set_declarations_of_document(const String& filename, Vector<GUI::AutocompleteProvider::Declaration>&& declarations)
+{
+ if (!set_declarations_of_document_callback)
+ return;
+
+ // Optimization - Only notify callback if declarations have changed
+ if (auto previous_declarations = m_all_declarations.get(filename); previous_declarations.has_value()) {
+ if (previous_declarations.value() == declarations)
+ return;
+ }
+ if (m_store_all_declarations)
+ m_all_declarations.set(filename, declarations);
+ set_declarations_of_document_callback(filename, move(declarations));
+}
+}