/* * Copyright (c) 2021, Itamar S. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace LanguageServers { class FileDB final { public: RefPtr get(String const& filename) const; RefPtr get(String const& filename); RefPtr get_or_create_from_filesystem(String const& filename) const; RefPtr get_or_create_from_filesystem(String const& filename); bool add(String const& filename, int fd); bool add(String const& filename, String const& content); void set_project_root(String const& root_path) { m_project_root = root_path; } String const& project_root() const { return m_project_root; } void on_file_edit_insert_text(String const& filename, String const& inserted_text, size_t start_line, size_t start_column); void on_file_edit_remove_text(String const& filename, size_t start_line, size_t start_column, size_t end_line, size_t end_column); String to_absolute_path(String const& filename) const; bool is_open(String const& filename) const; private: RefPtr create_from_filesystem(String const& filename) const; RefPtr create_from_fd(int fd) const; RefPtr create_from_file(Core::File&) const; static RefPtr create_with_content(String const&); private: HashMap> m_open_files; String m_project_root; }; }