1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-helix

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
architecture.md 7.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 01:25 921b055
Crate Описание
helix-core Основные функциональные примитивы редактирования.
helix-lsp Клиент языкового сервера.
helix-dap Клиент протокола отладки (DAP).
helix-loader Функции для создания, получения и загрузки внешних ресурсов.
helix-view Абстракции пользовательского интерфейса для серверной части, императивная оболочка.
helix-term Терминальный пользовательский интерфейс.
helix-tui Примитивы TUI, ответвление от tui-rs, вдохновлённое Cursive.

Этот документ содержит общий обзор внутренней структуры Helix.

ПРИМЕЧАНИЕ: Используйте cargo doc --open для документации API, а также документации зависимостей.

Core

Core содержит основные строительные блоки, используемые для создания редактора. Он в значительной степени основан на CodeMirror 6. Примитивы функциональны: большинство операций не изменяют данные на месте, а возвращают новую копию.

Основная структура данных, используемая для представления буферов, — это Rope. Мы повторно экспортируем отличную библиотеку ropey. Канаты легко клонировать, и они позволяют нам легко создавать моментальные снимки текстового состояния.

Множественные выделения являются основным примитивом редактирования. Выделения документов представлены объектом Selection. Каждый диапазон в выделении состоит из движущейся головы и неподвижного якоря. Один курсор в редакторе — это просто выделение с одним диапазоном, где голова и якорь находятся в одном и том же положении.

Канаты изменяются путём создания транзакции OT-типа. Она представляет собой одно согласованное изменение документа и может быть применена к канату. Транзакцию можно инвертировать для отмены изменений. Выделения и метки могут быть сопоставлены с транзакцией для перевода в позицию в новом текстовом состоянии после применения транзакции.

ПРИМЕЧАНИЕ: Transaction::change/Transaction::change_by_selection — основной интерфейс, используемый для генерации текстовых правок.

Syntax — это интерфейс, который используется для взаимодействия с древовидными AST-деревьями для подсветки синтаксиса и других функций.

View

Уровень view должен был стать независимой от внешнего интерфейса императивной библиотекой, которая будет построена поверх core для обеспечения общей логики редактора. В настоящее время он привязан к пользовательскому интерфейсу терминала.

Объект Document связывает вместе Rope, Selection(s), Syntax, историю документов и т. д. в полное представление открытого файла.

View представляет собой открытый раздел в пользовательском интерфейсе. Он содержит текущий идентификатор открытого документа и другое связанное состояние. Представления инкапсулируют желоб, строку состояния, диагностику и внутреннюю область, в которой отображается код.

ПРИМЕЧАНИЕ: Несколько представлений могут отображать один и тот же документ, поэтому документ содержит выделения для каждого представления. Чтобы получить их, document.selection() принимает ViewId.

Info — это окно автоинформации, которое показывает подсказки при ожидании другой клавиши с привязками, такими как g и m. Оно прикреплено к области просмотра в целом.

Surface подобен буферу, на который рисуют себя виджеты, и поверхность затем отображается на экране в каждом цикле.

Области Rect (просто координата x и y с началом координат в верхнем левом углу экрана, а затем высота и ширина) являются частью Surface. Они могут использоваться для ограничения области, в которую компонент может отображаться. Например, если мы обернём компонент Markdown в Popup (подумайте о всплывающем окне документации с пробелом + k), метод рендеринга Markdown получит Rect, который является точным размером всплывающего окна.

Виджеты называются Component внутренне, и вы можете увидеть большинство из них в helix-term/src/ui. Некоторые компоненты, такие как Popup и Overlay, могут принимать другие компоненты в качестве дочерних.

Слои — это способ отображения нескольких компонентов, и это просто Vec<Component>. Слои управляются Compositor. При каждом вызове рендеринга верхнего уровня компоновщик отображает каждый компонент в порядке их появления.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-helix.git
git@api.gitlife.ru:oschina-mirror/mirrors-helix.git
oschina-mirror
mirrors-helix
mirrors-helix
master