/* * Copyright (c) 2021, Itamar S. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace LanguageServers { class FileDB final : public CodeComprehension::FileDB { public: FileDB() = default; virtual Optional get_or_read_from_filesystem(StringView filename) const override; RefPtr get_document(DeprecatedString const& filename) const; RefPtr get_document(DeprecatedString const& filename); bool add(DeprecatedString const& filename, int fd); bool add(DeprecatedString const& filename, DeprecatedString const& content); void on_file_edit_insert_text(DeprecatedString const& filename, DeprecatedString const& inserted_text, size_t start_line, size_t start_column); void on_file_edit_remove_text(DeprecatedString const& filename, size_t start_line, size_t start_column, size_t end_line, size_t end_column); DeprecatedString to_absolute_path(DeprecatedString const& filename) const; bool is_open(DeprecatedString const& filename) const; private: ErrorOr> create_from_filesystem(DeprecatedString const& filename) const; ErrorOr> create_from_fd(int fd) const; ErrorOr> create_from_file(NonnullOwnPtr) const; static RefPtr create_with_content(DeprecatedString const&); private: HashMap> m_open_files; Optional m_project_root; }; }