@ecss/language-service
v0.2.0
Published
ECSS language service — diagnostics, completions, hover, definition, references and symbols for .ecss files.
Readme
import { createLanguageService } from '@ecss/language-service';
import { parseEcss } from '@ecss/parser';
const service = createLanguageService({ parse: parseEcss });
const diagnostics = service.getDiagnostics(uri, source);📦 Установка
npm i @ecss/language-servicepnpm add @ecss/language-serviceyarn add @ecss/language-service🧩 Что это
@ecss/language-service — это бэкенд языковой поддержки для ECSS, не зависящий от конкретного редактора и фреймворка. Он реализует логику диагностики, автодополнения, hover, переходов и поиска ссылок, но ничего не знает о транспорте, протоколе или UI редактора.
На нём построено расширение для VS Code (ecss-language-support), и поверх него можно собрать любую интеграцию с LSP или другим редактором: вы подключаете сервис к своему слою документов и сообщений, а он отвечает готовыми результатами в терминах типов LSP (Diagnostic, CompletionItem, Hover, Location, DocumentSymbol).
Сервис принимает функцию parse (например, parseEcss из @ecss/parser), поэтому не привязан к конкретной реализации парсера.
🛠 Использование
Создайте экземпляр сервиса через createLanguageService, передав функцию парсинга, и вызывайте нужные методы:
import { createLanguageService } from '@ecss/language-service';
import { parseEcss } from '@ecss/parser';
const service = createLanguageService({ parse: parseEcss });
// Диагностика для открытого документа
const diagnostics = service.getDiagnostics(uri, source);
// Автодополнение в позиции курсора
const completions = service.getCompletions(uri, source, position);
// При изменении документа — пере-парсинг и свежая диагностика
service.updateDocument(uri, source, version);
// При закрытии документа — очистка кэша
service.removeDocument(uri);createLanguageService принимает опции:
| Опция | Тип | Описание |
| ------------- | ----------------- | ----------------------------------------------------------------------- |
| parse | ParseFn | Функция парсинга ECSS-исходника в AST (parseEcss из @ecss/parser). |
| config | EcssConfigCache | Разрешённый конфиг проекта (алиасы, глобальные импорты). Необязательно. |
| projectRoot | string | Корень проекта для разрешения путей импортов. Необязательно. |
Конфиг можно обновить в любой момент через service.updateConfig(config).
✨ Возможности
Экземпляр LanguageService предоставляет:
- Диагностика —
getDiagnostics(uri, source)возвращает ошибки и предупреждения для.ecss-файла. - Автодополнение —
getCompletions(uri, source, position)предлагает подсказки в позиции курсора. - Hover —
getHover(uri, source, position)отдаёт всплывающую информацию о символе под курсором. - Переход к определению —
getDefinition(uri, source, position)находит определение символа. - Поиск ссылок —
getReferences(uri, source, position)находит все использования символа. - Символы документа —
getDocumentSymbols(uri)возвращает структуру блоков, enum-ов и констант файла.
Управление состоянием:
updateDocument(uri, source, version?)— пере-парсит документ, обновляет кэш и возвращает свежую диагностику.removeDocument(uri)— удаляет документ из кэша.updateConfig(config)— обновляет разрешённый конфиг проекта.
👨💻 Автор
Разработка и поддержка: Руслан Мартынов
Если нашёл баг или есть предложение — открывай issue или отправляй pull request.
📄 Лицензия
Распространяется под лицензией MIT.
