ladybird/Userland/DevTools/HackStudio/CodeDocument.h
Sam Atkins 0761926127 HackStudio: Migrate git-diff indicators to TextEditor API
As part of this, the CodeDocument now keeps track of the kind of
difference for each line. Previously, we iterated every hunk every time
the editor was painted, but now we do that once whenever the diff
changes, and then save the type of difference for each line.
2023-03-31 12:09:40 +02:00

55 lines
1.7 KiB
C++

/*
* Copyright (c) 2020, Itamar S. <itamar8910@gmail.com>
* Copyright (c) 2022, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/LexicalPath.h>
#include <LibGUI/TextDocument.h>
#include <LibSyntax/Language.h>
namespace HackStudio {
class Editor;
class CodeDocument final : public GUI::TextDocument {
public:
virtual ~CodeDocument() override = default;
static NonnullRefPtr<CodeDocument> create(DeprecatedString const& file_path, Client* client = nullptr);
static NonnullRefPtr<CodeDocument> create(Client* client = nullptr);
Vector<size_t> const& breakpoint_lines() const { return m_breakpoint_lines; }
Vector<size_t>& breakpoint_lines() { return m_breakpoint_lines; }
Optional<size_t> execution_position() const { return m_execution_position; }
void set_execution_position(size_t line) { m_execution_position = line; }
void clear_execution_position() { m_execution_position.clear(); }
DeprecatedString const& file_path() const { return m_file_path; }
Optional<Syntax::Language> const& language() const { return m_language; }
virtual bool is_code_document() const override final { return true; }
enum class DiffType {
None,
AddedLine,
ModifiedLine,
DeletedLinesBefore,
};
DiffType line_difference(size_t line) const;
void set_line_differences(Badge<Editor>, Vector<DiffType>);
private:
explicit CodeDocument(DeprecatedString const& file_path, Client* client = nullptr);
explicit CodeDocument(Client* client = nullptr);
DeprecatedString m_file_path;
Optional<Syntax::Language> m_language;
Vector<size_t> m_breakpoint_lines;
Optional<size_t> m_execution_position;
Vector<DiffType> m_line_differences;
};
}