com um clique
code-navigation
LSP-навигация BSL: definitions, refs, call graph
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
LSP-навигация BSL: definitions, refs, call graph
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional 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 или бинарь старее фикса) → реиндексация смотрит не на то дерево |