CodeComprehensionEngine.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. #pragma once
  8. #include "FileDB.h"
  9. #include "Types.h"
  10. #include <AK/Function.h>
  11. #include <AK/HashMap.h>
  12. #include <AK/Vector.h>
  13. #include <LibGUI/TextPosition.h>
  14. namespace CodeComprehension {
  15. class CodeComprehensionEngine {
  16. AK_MAKE_NONCOPYABLE(CodeComprehensionEngine);
  17. AK_MAKE_NONMOVABLE(CodeComprehensionEngine);
  18. public:
  19. CodeComprehensionEngine(FileDB const& filedb, bool store_all_declarations = false);
  20. virtual ~CodeComprehensionEngine() = default;
  21. virtual Vector<AutocompleteResultEntry> get_suggestions(String const& file, GUI::TextPosition const& autocomplete_position) = 0;
  22. // TODO: In the future we can pass the range that was edited and only re-parse what we have to.
  23. virtual void on_edit([[maybe_unused]] String const& file) {};
  24. virtual void file_opened([[maybe_unused]] String const& file) {};
  25. virtual Optional<ProjectLocation> find_declaration_of(String const&, GUI::TextPosition const&) { return {}; }
  26. struct FunctionParamsHint {
  27. Vector<String> params;
  28. size_t current_index { 0 };
  29. };
  30. virtual Optional<FunctionParamsHint> get_function_params_hint(String const&, GUI::TextPosition const&) { return {}; }
  31. virtual Vector<TokenInfo> get_tokens_info(String const&) { return {}; }
  32. Function<void(String const&, Vector<Declaration>&&)> set_declarations_of_document_callback;
  33. Function<void(String const&, Vector<TodoEntry>&&)> set_todo_entries_of_document_callback;
  34. protected:
  35. FileDB const& filedb() const { return m_filedb; }
  36. void set_declarations_of_document(String const&, Vector<Declaration>&&);
  37. void set_todo_entries_of_document(String const&, Vector<TodoEntry>&&);
  38. HashMap<String, Vector<Declaration>> const& all_declarations() const { return m_all_declarations; }
  39. private:
  40. HashMap<String, Vector<Declaration>> m_all_declarations;
  41. FileDB const& m_filedb;
  42. bool m_store_all_declarations { false };
  43. };
  44. }