en un clic
code-navigation
LSP-навигация BSL: definitions, refs, call graph
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Menu
LSP-навигация BSL: definitions, refs, call graph
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Basé sur la classification professionnelle SOC
When writing or reviewing BSL, apply 1C standards
При написании или ревью BSL применять стандарты 1С
Orchestrator: routing work and agent phases
Оркестратор: маршрутизация работы и фаз агентов
BSL LSP navigation: definitions, refs, call graph
Rules for using RLM tools for project search and navigation in 1C/BSL
| name | code-navigation |
| description | LSP-навигация BSL: definitions, refs, call graph |
| uses_capabilities | ["navigate_symbol","get_call_graph","get_code_actions","rename_symbol","search_ssl_functions","get_completion","get_symbol_impact"] |
Не угадывать расположение кода. Для широкого 1C/BSL-поиска сначала используй RLM (rlm-bsl-search), а LSP — когда уже есть конкретный файл, символ или позиция курсора. LSP даёт точную IDE-семантику по индексу проекта: definition/references, hover, signature, completion, diagnostics, rename и code actions.
| Потребность | Первый инструмент |
|---|---|
| Найти механизм, похожую реализацию, бизнес-цепочку, query/XML/MDO/forms/rights связи | RLM (rlm_start → rlm_execute) |
| Оценить широкий blast radius объекта метаданных, формы, роли, запроса, подписки | RLM, затем LSP по найденным символам |
| Перейти к определению уже найденного метода/переменной | BSL LS/LSP |
| Получить references/call graph по конкретной позиции | BSL LS/LSP |
| Проверить тип, hover, signature, completion в конкретном месте кода | BSL LS/LSP |
| Rename, formatting, quick fix, diagnostics | BSL LS/LSP |
| Триггер | Действие |
|---|---|
| Поиск определений процедуры/функции | navigate_symbol operation definition |
| Все вызовы функции X, когда известна конкретная функция/позиция | navigate_symbol search или get_call_graph incoming |
| Кого вызывает функция | get_call_graph outgoing |
| Переименование по проекту | rename_symbol (сначала preview: true) |
| Quick Fixes | get_code_actions |
| Диагностика файла | get_diagnostics |
| Исследование неизвестного кода после RLM-discovery | navigate_symbol → get_call_graph → hover |
| Ошибка «метод не найден» на типе платформы | getMembers / getMember / getConstructors |
| Состав объекта/ТЧ/реквизиты, значения перечисления, предопределённые | get_completion после точки (см. «Discovery метаданных») |
| Где используется объект метаданных в коде, если уже известен менеджер/символ | search_ssl_functions references на Документы.X; широкий usage — через RLM |
| Оценить, кого заденет правка процедуры/функции | get_symbol_impact (входящие + ссылки + классификация) |
| Подсказки параметров при написании вызова | signature_help — курсор ВНУТРИ скобок вызова (см. «Подсказки параметров») |
Если известна только бизнес-тема или примерное имя — сначала RLM. Этот алгоритм применяй, когда уже есть конкретный метод или позиция.
navigate_symbol(query: "ИмяФункции", operation: "search") → получить uri, line, characterget_call_graph(uri, line, character, direction: "incoming")navigate_symbol → uri, line, characterrename_symbol(..., preview: true) → проверить changesrename_symbol(..., preview: false)get_diagnostics по затронутым файламget_diagnostics(uri) → список диагностикget_code_actions(uri, range, diagnostic) → применитьТриггер: ошибка «Метод объекта не обнаружен» / «Неверное количество параметров» на типе платформы. Не угадывать повторно — верифицировать.
search_syntax_reference(query: "ТипОбъекта") → подтвердить имя, получить idgetMembers(typeId) → точный список методов/свойствgetMember(typeId, member) → сигнатура конкретного методаgetConstructors(typeId) → если ошибка про параметры НовыйВажно: Только реакция на ошибку, не превентивный поиск.
get_completionBSL LS Type System v2 отдаёт метаданные конфигурации через автодополнение. Один tool отвечает на разные вопросы — меняется только позиция курсора (после точки). В detail каждого пункта — сигнатура и возвращаемый тип.
| Вопрос | Где поставить курсор | Что вернётся |
|---|---|---|
| Реквизиты / ТЧ / колонки объекта | после Объект. (типизированная переменная) | реквизиты, табличные части, их колонки, методы — с типами |
| Значения перечисления | после Перечисления.ИмяПеречисления. | значения перечисления |
| Предопределённые элементы | после Справочники.Имя. / ПланыСчетов.Имя. | предопределённые + методы менеджера |
| Состав ОпределяемогоТипа | курсор на реквизите типа ОпределяемыйТип | get_completion + get_hover_info раскрывают составляющие типы |
Инверсный сигнал: если после перем. get_completion возвращает пусто или нет ожидаемого члена — тип переменной выведен неверно/неизвестен. Отсутствие автодополнения здесь = индикатор ошибки типа (частый баг 1С), а не «нет данных».
Для широкой карты использований объекта метаданных сначала RLM: он лучше покрывает BSL, XML/MDO/forms/rights/query, подписки и регламентные задания. Этот LSP-алгоритм применяй после RLM или когда нужен точный references по известному менеджеру.
Картина гибридная (как сам объект используется в BSL):
search_ssl_functions (режим references) на символе менеджера Документы.ИмяОбъекта → семантически точные места обращения через менеджер. references исключают совпадения в комментариях/строках/текстах запросов."ДокументСсылка.ИмяОбъекта", Тип("ДокументСсылка.…")), пути метаданных внутри текста запроса (ИЗ Документ.ИмяОбъекта), формы, права, подписки и XML/MDO.Для «где используется» не начинать с голого grep по имени: он даёт ложные срабатывания в комментариях и строках. Широкий поиск — RLM; точная позиционная семантика — LSP references.
get_symbol_impactПеред переименованием/изменением конкретной процедуры — оценить локальный LSP-радиус поражения одним вызовом:
navigate_symbol → uri, line, character символа.get_symbol_impact(uri, line, character) → входящие вызывающие (call hierarchy) + все ссылки + классификация вызывающих по типу модуля (CommonModule / FormModule / ManagerModule / ObjectModule / …) — видно, откуда тянется правка: UI, сервер или фон.Два слепых пятна (заложены в вывод, держать в голове):
&Вместо/&Перед/&После — этого здесь НЕ видно; добирать через RLM по BSL + XML/MDO.ОбработкаПроведения, ПередЗаписью, есть в сотнях модулей) привязывать call hierarchy к конкретному модулю — иначе в результат попадут ложные звенья от одноимённых методов других объектов.signature_helpВозвращает список параметров вызываемого метода и то, на каком аргументе стоит курсор. Контракт строгий — ошибка в позиции даёт пустой результат, который выглядит как «не поддерживается», а на деле это неверная позиция.
ОБЯЗАТЕЛЬНО передавать line/character 0-based, курсор ВНУТРИ скобок вызова — между ( и ), НЕ на имени метода и НЕ перед (. Провайдер находит охватывающий вызов (doCall), резолвит вызываемый метод и только тогда возвращает сигнатуры.
// Строка (1-based 8): Аккаунт = ПолучитьАккаунт(ДокументОперации, ПараметрыОперации);
signature_help(uri, line=7, character=29) // сразу после "(" → param 0
// → ПолучитьАккаунт(ДокументОперации?, ПараметрыОперации?), Active parameter: 0
signature_help(uri, line=7, character=47) // после запятой → Active parameter: 1
Пустой результат ≠ tool сломан. signature_help возвращает сигнатуры только когда вызываемый метод резолвится в метод с известным списком параметров. Надёжно работает для методов того же модуля (резолв из разобранного исходника). Возвращает пусто для:
() — самая частая ошибка;Модуль.Метод() — нужен индекс типов конфигурации, исправен только когда BSL LS нацелен на единый корень конфигурации (см. «Типичные ошибки»: межмодульный резолв);СтрШаблон(, ЗначениеЗаполнено() и методы объектов платформы (Запрос.УстановитьПараметр() — нужен загруженный контекст платформы 1С (синтакс-помощник .hbk). Контейнер mcp-lsp лёгкий — платформа НЕ зашита в образ, провижинится в рантайме. Run-скрипт bsl-ls генерирует глобальный конфиг и передаёт его через -Dapp.globalConfiguration.path: когда задан BSL_PLATFORM_BIN (compose docker-compose.platform.yml монтирует каталог .hbk read-only) — используется явный v8platform.binPath с приоритетом; когда не задан — BSL LS автоопределяет установленную платформу (включая Windows). Без того и другого в стартовом логе Failed to load platform contexts: No 1C platform installations found, и hover/completion/сигнатуры по платформе пустые. С загруженным (Loaded N platform contexts from 1C syntax helper) — резолвятся с полными доками параметров (на русском при language:ru).Для подтверждённого списка параметров независимо от места вызова — getMember(typeId, member) (типы платформы) или navigate_symbol→hover (собственное объявление метода).
| Capability | Назначение |
|---|---|
navigate_symbol | Поиск символов, определение, hover |
get_call_graph | Граф вызовов (incoming/outgoing) |
rename_symbol | Переименование по проекту |
get_diagnostics | LSP-диагностика файла |
get_code_actions | Quick Fixes |
search_syntax_reference | Поиск типа платформы |
getMembers / getMember | Методы/свойства типа платформы |
getConstructors | Конструкторы типа (Новый) |
get_completion | Discovery метаданных: члены объекта/ТЧ, значения перечисления, предопределённые, типы |
get_symbol_impact | Импакт-анализ: входящие вызовы + ссылки + классификация вызывающих по типу модуля |
signature_help | Подсказки параметров на месте вызова (курсор внутри скобок) |
| Ошибка | Обходной путь |
|---|---|
| LSP не подключён | Проверить lsp_status; запустить BSL Language Server |
| Символ не найден | Проверить имя (регистр, язык); ask_ai_assistant (шаблон SEARCH_DOCS из buddy-prompting) по имени метода/типа |
get_call_graph таймаут | Уменьшить depth |
rename_symbol не применим | Проверить позицию курсора; защищённая область → ручное редактирование |
| Файл не индексирован | Дождаться индексации LSP |
signature_help возвращает пусто | Курсор должен быть ВНУТРИ скобок вызова (0-based), не на имени метода; надёжно для методов того же модуля. Для межмодульных/глобальных вызовов см. строку ниже |
Межмодульный Модуль.Метод() не резолвится (пустой signature_help, межмодульный call hierarchy теряет звенья, ложный QueryToMissingMetadata) | BSL LS должен индексировать ЕДИНЫЙ главный корень конфигурации src/xml, а не корень проекта с 9 Configuration.xml (основная + расширения). Session-manager автоопределяет главный корень конфигурации под переданным workspace (detectConfigurationRoot), так что это должно быть исправлено. Если регрессирует — проверить стартовый лог bsl-ls на Detected 1C configuration root: …/src/xml; отсутствие = детект не сработал (например, в workspace нет главного Configuration.xml или бинарь старее фикса) → реиндексация смотрит не на то дерево |