Расширение VSCode с LSP сервером
Готова предварительная версия расширения для VSCode (также в будущем можно будет использовать LSP сервер из расширения для нового QGen или других редакторов). В данный момент функциональность несколько ограничена и возможны ошибки (поэтому выкладываю на форуме).
Расширение должно работать на Windows / Linux / MacOS.
Работает даже на больших файлах (особое внимание уделено производительности).
Что уже умеет
Подсветка синтаксиса
- Парсинг файлов .qsps учитывая грамматику QSP 5.9.5
-
Семантическая подсветка — ключевые слова, переменные, строки, метки, локации, операторы и т.д. включая подвыражения в строках
<<>>и блоки кода{} - Грамматика TextMate — резервная подсветка синтаксиса
Навигация
- Go to Definition — переход к определению локации / метки / переменной / действия / предмета
- Find All References — поиск всех использований переменной, локации, метки, действия или предмета
- Document Symbols — структура локаций, меток, действий (Ctrl+Shift+O)
- Go to Location — быстрый выбор локации через Command Palette (Ctrl+Shift+L)
- Подсветка всех вхождений символа под курсором
- Подсветка ключевых слов для выбранного многострочного оператора
- Подсветка начала / конца локации
Редактирование
- Автодополнение — встроенные ключевые слова QSP, функции, переменные, имена локаций, имена меток
- Подсказка при наведении — документация по встроенным функциям / операторам / системным переменным
- Переименование — переименование локаций / переменных / меток / действий / предметов
- Действия с кодом — быстрые исправления из диагностик
- Форматирование всего документа / выделения / текущей локации
- Сворачивание блоков — сворачивание блоков локаций, многострочных act / if / loop
Команды
- Новая локация — вставка нового блока локации
-
Вставить разделитель — вставка
---(Ctrl+Shift+-) - Сортировка локаций (A -> Z / Z -> A)
- Дублировать локацию — копирование текущей локации с новым именем
- Удалить локацию — удаление локации под курсором
- Переименовать локацию — переименование через LSP (обновляет все ссылки)
- Переместить локацию вверх/вниз — перестановка порядка локаций (Alt+Up / Alt+Down)
- Комментирование — закомментировать / раскомментировать строки
Другое
- Строка состояния показывает имя текущей локации на позиции курсора (клик открывает быстрый выбор)
- Окно “Outline” показывает список локаций, действия на локации, метки на локации
- Список ошибок / предупреждений в окне “Problems”
Типы диагностики, которые сейчас поддерживаются
-
Синтаксические ошибки (включая блоки кода
{}) -
Незакрытые локации (нет
--) - Дублирование локаций / меток / действий
- Переменные, которые используются, но присвоение / инициализация не найдена
- Ссылки на несуществующие локации / метки / действия / предметы
- Неверный префикс типа для функции
- Смешанные префиксы переменных
- Неиспользуемые переменные (присвоение / инициализация есть, но использования нет)
- Неиспользуемые метки / предметы / локации
Планируется добавить
- Поддержка импорта / экспорта QSP файлов (через специальную встраиваемую версию TXT2GAM)
- Построение графа локаций
- Новые типы рефакторинга
- Новые типы диагностики
- Улучшение текущих возможностей
Надо бы ещё рассказать, как устанавливать.))
Установка расширения
- Открываете VS Code или Cursor
- Открываете панель “Расширения” (Extensions)
-
Перетаскиваете файл
.vsixна панель.
По расширению
Отсутствие пробела после запятой ломает подсветку:

Причём для встроенных функций пробелы роли не играют, а для пользовательских - да.
Первый аргумент подсвечивается странно. Но не везде. Пока не понимаю, почему:

Проблемы со скобками, или с многострочностью. Этот код валиден для 5.7.0 (в плане многострочности):

^upd: тут наверное из-за тех же отсутствующих пробелов после запятых.
Скобки в тексте между локациями наверное сам Курсор подсвечивает.

(Может зря я сразу в Курсоре проверяю…)
Нет, разницы между Курсором и ВСкод нет. Смотрим дальше. Подсветка текста между локациями всё таки сломана.

Многострочные скобки требуют закрытия на той же строке, где стоит последний аргумент.

Больше пока не вижу ничего. Но надо взять какой-то чужой код и проверить на нём.
Информация о том, что используются одноимённые переменные для разных типов, это очень полезно! Как понимаю, надо ещё области видимости доделывать, чтобы глобальные не путались с локальными, и локальные из разных локаций не влияли друг на друга.
Ну и присоединяюсь к хотелкам, которые со времён расширения Агента витают. Хочется, чтобы расширение работало со всеми файлами проекта. ))