Serenity Operating System
at master 57 lines 2.2 kB view raw
1/* 2 * Copyright (c) 2021, Itamar S. <itamar8910@gmail.com> 3 * Copyright (c) 2022, the SerenityOS developers. 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8#pragma once 9 10#include "FileDB.h" 11#include "Types.h" 12#include <AK/Function.h> 13#include <AK/HashMap.h> 14#include <AK/Vector.h> 15#include <LibGUI/TextPosition.h> 16 17namespace CodeComprehension { 18 19class CodeComprehensionEngine { 20 AK_MAKE_NONCOPYABLE(CodeComprehensionEngine); 21 AK_MAKE_NONMOVABLE(CodeComprehensionEngine); 22 23public: 24 CodeComprehensionEngine(FileDB const& filedb, bool store_all_declarations = false); 25 virtual ~CodeComprehensionEngine() = default; 26 27 virtual Vector<AutocompleteResultEntry> get_suggestions(DeprecatedString const& file, GUI::TextPosition const& autocomplete_position) = 0; 28 29 // TODO: In the future we can pass the range that was edited and only re-parse what we have to. 30 virtual void on_edit([[maybe_unused]] DeprecatedString const& file) {}; 31 virtual void file_opened([[maybe_unused]] DeprecatedString const& file) {}; 32 33 virtual Optional<ProjectLocation> find_declaration_of(DeprecatedString const&, GUI::TextPosition const&) { return {}; } 34 35 struct FunctionParamsHint { 36 Vector<DeprecatedString> params; 37 size_t current_index { 0 }; 38 }; 39 virtual Optional<FunctionParamsHint> get_function_params_hint(DeprecatedString const&, GUI::TextPosition const&) { return {}; } 40 41 virtual Vector<TokenInfo> get_tokens_info(DeprecatedString const&) { return {}; } 42 43 Function<void(DeprecatedString const&, Vector<Declaration>&&)> set_declarations_of_document_callback; 44 Function<void(DeprecatedString const&, Vector<TodoEntry>&&)> set_todo_entries_of_document_callback; 45 46protected: 47 FileDB const& filedb() const { return m_filedb; } 48 void set_declarations_of_document(DeprecatedString const&, Vector<Declaration>&&); 49 void set_todo_entries_of_document(DeprecatedString const&, Vector<TodoEntry>&&); 50 HashMap<DeprecatedString, Vector<Declaration>> const& all_declarations() const { return m_all_declarations; } 51 52private: 53 HashMap<DeprecatedString, Vector<Declaration>> m_all_declarations; 54 FileDB const& m_filedb; 55 bool m_store_all_declarations { false }; 56}; 57}