Расширение VSCode с LSP сервером
Byte
Admin
•
12.04.2026 23:15
•
16 comments
•
564 views
Готова предварительная версия расширения для VSCode (также в будущем можно будет использовать LSP сервер из расширения для нового QGen или других редакторов). В данный момент функциональность несколько ограничена и возможны ошибки (поэтому выкладываю на форуме).
Общие сведения:
- Расширение должно работать на Windows / Linux / MacOS.
- Работает даже на больших файлах (особое внимание уделено производительности).
- Поддерживается “режим проекта”, когда несколько .qsps файлов рассматриваются как связанные.
Что уже умеет
Подсветка синтаксиса
- Парсинг файлов .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)
- Комментирование — закомментировать / раскомментировать строки
- Получить списки локаций / переменных / предметов
- Переместить группу локаций из выбранных файлов в отдельный файл
- Разбить группу локаций из выбранных файлов на отдельные файлы (1 файл на локацию)
Другое
- Строка состояния показывает имя текущей локации на позиции курсора (клик открывает быстрый выбор)
- Окно “Outline” показывает список локаций, действия на локации, метки на локации
- Список ошибок / предупреждений в окне “Problems”
Типы диагностики, которые сейчас поддерживаются
-
Синтаксические ошибки (включая блоки кода
{}) -
Незакрытые локации (нет
--) - Слишком длинные локации (настраивается, 500 строк по умолчанию)
- Дублирование локаций / меток / действий
- Переменные, которые используются, но присвоение / инициализация не найдена
- Ссылки на несуществующие локации / метки / действия / предметы
- Неверный префикс типа для функции
- Неверное число аргументов встроенной функции / оператора
- Смешанные префиксы переменных
- Несоответствие типов при присваивании (строка / число / кортеж)
- Неиспользуемые переменные (присвоение / инициализация есть, но использования нет)
- Неиспользуемые метки / предметы / локации
-
Смешанные типы вызова одной локации (
gs/gt/func/desc) - Непоследовательная передача локальных переменных из вызывающих локаций
-
Нераспознанные динамические вызовы (
dynamic/dyneval) -
Локация / код вызывается как функция, но
resultне присваивается -
Лишние аргументы при вызове локации / кода, не читающей
args -
Переопределение
args/resultкак локальных переменных - Переопределение локальной переменной, проброшенной из вызывающей локации
Планируется добавить
- Поддержка импорта / экспорта QSP файлов (через специальную встраиваемую версию TXT2GAM)
- Построение графа локаций
- Новые типы рефакторинга
- Новые типы диагностики
- Улучшение текущих возможностей
Обновил до версии 0.1.7:
- Улучшено отслеживание значений элементов массивов.
- Показаны номера строк для вызовов локации.
-
Разделены “Called from” (
gosub/func/desc) и “Navigated from” (goto) для локаций. - Показываются “Passed locals”, “Consumed locals” и “Used globals” для локаций.