dsh-bsl-editor
August 25, 2026 · View on GitHub
Редактор кода 1С (BSL) внутри DeepSeek Harness.
Выгрузка конфигурации 1С открывается во вкладке чата DSH: дерево метаданных, редактор Monaco с раскраской BSL, вкладки файлов, фильтр изменённых файлов, переход к определениям и отправка кода в чат.
Возможности
🌲 Дерево метаданных 1С
Левая панель переключается между деревом файлов и деревом метаданных 1С:Предприятия с иконками типов — Подсистемы, Справочники, Документы, Регистры, Общие модули, … → объекты → Реквизиты / Табличные части / Формы / Команды / Макеты / Модули. Клик по модулю открывает его в редакторе. Есть поиск по имени объекта.
Поддерживаются три формата выгрузки: EDT (.mdo), XML-выгрузка из Конфигуратора (ConfigDumpInfo.xml) и пообъектная XML-выгрузка. Формат определяется автоматически. Дерево ленивое: узел парсится при раскрытии.
🗂 Вкладки файлов
Каждый открытый файл — вкладка в верхней полосе редактора: имя файла, индикатор несохранённых правок, закрытие крестиком или средней кнопкой мыши. При переключении вкладок сохраняются текст правок, позиция курсора и скролл; состояние вкладок восстанавливается при повторном открытии редактора. Справа — кнопки «перечитать с диска» и «сохранить»; Ctrl+S сохраняет файл.
🔎 Изменённые файлы
Переключатель «Все файлы» / «Изменённые» над деревом: в режиме «Изменённые» показывается плоский список файлов с git-статусом (M / A / D). Наведение показывает полный путь; клик открывает файл во вкладке. Untracked-файлы показываются по умолчанию (отключается настройкой).
Режим «Изменённые» работает и в дереве метаданных: остаются только группы и объекты, в которых есть изменённые файлы. Поиск в этом режиме ограничен изменёнными файлами.
Статусы также отображаются у файлов в дереве; изменённые строки помечаются маркерами в редакторе.
🌆 Тема Monokai
Редактор использует палитру Monokai: фон #272822, ключевые слова — розовые, функции и классы — зелёные, строки — жёлтые, числа — фиолетовые.
🎨 Раскраска BSL
Раскраска построена на официальной TextMate-грамматике 1С (1c-syntax) через monaco-textmate + onigasm. Грамматики включены в плагин. Подсветка охватывает ключевые слова, строки, комментарии, &Аннотации, #Область. Monaco загружается с CDN (jsdelivr → unpkg → cdnjs).
⚡ Переход к определению
Definition-провайдер работает на модели метаданных: F12, Ctrl+Click и «Go to Definition» в контекстном меню.
ОбщийМодуль.Метод()/Справочники.Товары.Метод()→ модуль и позиция;- имя метода без точки → поиск в текущем модуле;
- повторный F12 переключает между кандидатами.
«Peek Definition» из контекстного меню доступен только при включённом LSP.
💬 Отправка кода в чат
Выделите фрагмент в редакторе → правый клик → «Добавить к обсуждению» → код попадает в композер DSH.
🔵 Диффы изменений в редакторе
Изменения рабочей копии видны прямо в открытом файле: добавленные строки — зелёным фоном, удалённые — красными блоками между строк с их текстом. Панель в правом верхнем углу (↑ / ↓ / счётчик) и хоткеи Alt+↑ / Alt+↓ перемещают по изменениям. Счётчик считает блоки изменений и следует за позицией при скролле. Открытие файла с изменениями позиционирует на первый из них.
💬 Открытие файлов из чата
Клик по ссылке на файл в сообщении чата открывает его в редакторе плагина: дерево раскрывается до файла и подсвечивает его, активной становится вкладка Editor. Пути вне workspace открываются системным приложением. Отключается настройкой «Перехватывать открытие файлов из чата».
🔄 Автообновление открытых файлов
Если открытый файл изменили вне редактора (агент, внешний редактор), вкладка обновляется при переключении на неё или возврате в окно DSH — со сохранением скролла и курсора. При наличии несохранённых правок появляется плашка «Файл изменён на диске» с кнопкой «Перезагрузить с диска»: автозамены правок нет.
🔌 LSP
Поддержка bsl-language-server (диагностика, автодополнение, hover, форматирование) через WebSocket. По умолчанию выключена; включается в Settings DSH → «1С-редактор». Плагин не скачивает bsl-language-server — ожидается установленный бинарник. На больших конфигурациях сервер может зависать при построении модели конфигурации.
⚙️ Настройки
Раздел «1С-редактор» в настройках DSH:
| Настройка | По умолчанию | Значение |
|---|---|---|
| LSP | выключен | bsl-language-server |
| Показывать в изменениях untracked-файлы | включено | файлы вне git в списке «Изменённые» |
| Перехватывать открытие файлов из чата | включено | клики по ссылкам на файлы открываются в редакторе плагина |
| Порт сервера | 8025 | порт WebSocket bsl-language-server |
| Путь к bsl-language-server.exe | (пусто) | явный путь к бинарнику |
Установка
Скачайте dsh-bsl-editor-0.2.0.tgz со страницы релизов (или соберите сами: cd dsh-bsl-editor && npm pack) и установите:
dsh plugin --profile web add dsh-bsl-editor-0.2.0.tgz
Либо по прямой ссылке на архив релиза:
dsh plugin --profile web add https://github.com/Mempemp/DSH-CodeEditor_BSL/releases/download/v0.2.0/dsh-bsl-editor-0.2.0.tgz
Затем перезапустите dsh web и обновите вкладку браузера.
Если pnpm сообщает об ошибке стора (
ERR_PNPM_UNEXPECTED_STORE) — добавьте--store-dir="<путь к вашему pnpm store>"к команде установки.
По умолчанию путь к бинарнику:
%LOCALAPPDATA%\Programs\bsl-language-server\bsl-language-server\bsl-language-server.exe. Другой путь задаётся в настройках.
Требования
- DeepSeek Harness (
dsh web) - Node.js ≥ 20
Поддерживаемые форматы выгрузки
| Формат | Признак | Примечания |
|---|---|---|
| EDT | Configuration/Configuration.mdo | объекты из файлов .mdo (реквизиты, табличные части, формы, команды, макеты) |
| XML-выгрузка (Конфигуратор) | ConfigDumpInfo.xml + Configuration.xml | дерево из списка метаданных |
| Пообъектная XML-выгрузка | корневой Configuration.xml + папки типов (Catalogs/, Documents/, …) | разделы восстанавливаются из файловой системы: Формы / Команды / Макеты / Модули / Предопределённые |
Сопоставление модулей: CommonModules/<Имя>/Ext/Module.bsl, Catalogs/<Имя>/Ext/ObjectModule.bsl, Forms/<Форма>/Ext/Form/Module.bsl, корневой Ext/ManagedApplicationModule.bsl и т.д.
Структура репозитория
lib/index.js— host-часть (ESM): маршруты/bsl/*(tree, read, search, git, meta, find-symbol), запуск bsl-language-server.lib/metadata.js— модель метаданных 1С: определение формата, парсеры трёх форматов, статическое разрешение символов.lib/client.js— клиентская часть: вкладка «Редактор» в conversation-view (вкладки файлов, дерево, Monaco, фильтр изменений).resources/— иконки узлов метаданных, TextMate-грамматики 1С.tests/— HTTP и LSP smoke-тесты.
Благодарности
Структура дерева метаданных и иконки узлов адаптированы из zerobig/vscode-1c-metadata-viewer (MIT License, © Ilya Bushin).