Skip to content

LSIF support implementation#3786

Draft
Copilot wants to merge 15 commits intodevelopfrom
copilot/support-lsif-implementation
Draft

LSIF support implementation#3786
Copilot wants to merge 15 commits intodevelopfrom
copilot/support-lsif-implementation

Conversation

Copy link
Contributor

Copilot AI commented Jan 17, 2026

  • Изучить структуру репозитория и существующие провайдеры
  • Исследовать спецификацию LSIF 0.6.0
  • Изучить референсную реализацию microsoft/lsif-java
  • Адаптировать архитектуру под паттерны и именование BSL LS
  • Создать детальный документ исследования (русский)
  • Реализовать базовую поддержку LSIF
  • Добавить поставщики: definition, references, foldingRange, documentSymbol, documentLink
  • Добавить поддержку Moniker для кросс-проектной навигации
  • Заменить @value+@builder на Java records для производительности
  • Добавить JavaDoc для всех records и публичных методов
  • Добавить поддержку двух форматов вывода: NDJSON и JSON
  • Глобальный кэш resultSet для ссылок на символы из разных документов
  • Передача URI напрямую в emitter для корректного определения документа

Реализация LSIF

CLI-команда

# NDJSON формат (по умолчанию)
java -jar bsl-language-server.jar lsif --srcDir ./src/cf --output ./dump.lsif

# JSON формат (для отладки)
java -jar bsl-language-server.jar lsif --srcDir ./src/cf --output ./dump.lsif.json --format json

Архитектура LsifEmitter

emitRange() теперь принимает URI documentUri напрямую вместо определения документа по DocumentContext. Это обеспечивает:

  • Корректную привязку range к документу при кросс-файловых ссылках
  • Возможность указывать URI definition из другого документа

Глобальный кэш в LsifEmitter

  • symbolToResultSetCache — переиспользование resultSet для ссылок на один символ из разных документов
  • documentUriToIdCache — получение ID документа для кросс-файловых ссылок

Документация

  • docs/features/LSIFSupport.md — исследование и архитектура
Original prompt

Поддержка LSIF. Детальное исследование, как и что можно реализовать из протокола LSIF. https://microsoft.github.io/language-server-protocol/specifications/lsif/0.6.0/specification/


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 17, 2026

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.


Comment @coderabbitai help to get the list of available commands and usage tips.

Copilot AI changed the title [WIP] Investigate LSIF protocol implementation possibilities LSIF support research documentation Jan 17, 2026
Copilot AI requested a review from nixel2007 January 17, 2026 16:39
@nixel2007
Copy link
Member

@copilot Изучи https://github.com/microsoft/lsif-java. Обнови исследование

Copilot AI and others added 2 commits January 17, 2026 16:45
Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 17, 2026

@copilot Изучи https://github.com/microsoft/lsif-java. Обнови исследование

Изучил lsif-java и обновил исследование (719f827).

Добавлено:

  • Раздел "Референсная реализация: lsif-java" с применимыми паттернами
  • Архитектура адаптирована под стиль BSL LS:
    • LsifCommand (аналог AnalyzeCommand)
    • LsifIndexer + ServerContext
    • LsifDataSupplier (паттерн как FoldingRangeSupplier)
    • DTO-классы в lsif/dto/

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • deepwiki.com
    • Triggering command: /home/REDACTED/work/_temp/ghcca-node/node/bin/node /home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@nixel2007
Copy link
Member

@copilot Попробуй реализовать

Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 17, 2026

@copilot Попробуй реализовать

Реализовал базовую поддержку LSIF (5a728f8).

Добавлено:

  • LsifCommand — CLI-команда lsif --srcDir ./src --output ./dump.lsif
  • LsifIndexer — оркестратор индексации
  • LsifEmitter — генератор NDJSON
  • LsifDataSupplier — интерфейс поставщиков
  • HoverLsifSupplier — поставщик hover-данных
  • DTO-классы для вершин и рёбер с константами

Использование:

java -jar bsl-language-server.jar lsif --srcDir ./src/cf --output ./dump.lsif

@nixel2007
Copy link
Member

@copilot Продолжай реализацию

…mentSymbol

Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 17, 2026

@copilot Продолжай реализацию

Продолжил реализацию (1348ee3).

Добавлены поставщики:

  • DefinitionLsifSupplier — переход к определению
  • ReferenceLsifSupplier — поиск ссылок (с использованием ReferenceIndex)
  • FoldingRangeLsifSupplier — сворачиваемые области
  • DocumentSymbolLsifSupplier — символы документа

DTO-классы:

  • DefinitionResultVertex, ReferenceResultVertex
  • FoldingRangeResultVertex, DocumentSymbolResultVertex
  • DefinitionEdge, ReferencesEdge, ItemEdge
  • FoldingRangeEdge, DocumentSymbolEdge

@nixel2007
Copy link
Member

@copilot Прододдай

Copy link
Contributor Author

Copilot AI commented Jan 18, 2026

@copilot продолжай

Продолжил реализацию (a311fb5).

Добавлено:

  • JavaDoc для всех 13 vertex records с описанием параметров
  • JavaDoc для всех 12 edge records с описанием параметров
  • JavaDoc для всех 7 supplier-классов с @see ссылками
  • Документация вторичных конструкторов records

Все records теперь имеют полное описание:

  • Назначение класса
  • @param для каждого поля
  • Описание дополнительных конструкторов

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • microsoft.github.io
    • Triggering command: /home/REDACTED/work/_temp/ghcca-node/node/bin/node /home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@nixel2007
Copy link
Member

@copilot Продолжай. Нужно два формата вывода, NDJSON и json,как в изначальном исследовании. Только сделай это красиво

Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 18, 2026

@copilot Продолжай. Нужно два формата вывода, NDJSON и json,как в изначальном исследовании. Только сделай это красиво

Добавлена поддержка двух форматов вывода (ea67f1f):

  • NDJSON (--format ndjson) — каждый элемент на отдельной строке, потоковая запись
  • JSON (--format json) — массив элементов с форматированием для отладки

Архитектура:

  • LsifOutputFormat — enum форматов
  • LsifWriter — интерфейс писателя
  • NdJsonLsifWriter / JsonLsifWriter — реализации

Использование:

lsif --srcDir ./src --output ./dump.lsif            # NDJSON (по умолчанию)
lsif --srcDir ./src --output ./dump.json --format json  # JSON

…ferenceIndex

Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 18, 2026

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • microsoft.github.io
    • Triggering command: /home/REDACTED/work/_temp/ghcca-node/node/bin/node /home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 22, 2026

@copilot Изучи https://github.com/microsoft/lsif-java. Обнови исследование

Изучил lsif-java и обновил исследование — архитектура адаптирована под стиль BSL LS с использованием паттерна Supplier.

@copilot Попробуй реализовать

Реализовано в нескольких коммитах — CLI-команда lsif, LsifIndexer, LsifEmitter, все поставщики (hover, definition, references, foldingRange, documentSymbol, documentLink, moniker).

@copilot Продолжай реализацию

Продолжена реализация — добавлены все основные поставщики LSIF-данных.

@copilot Прододдай

Добавлены DocumentLinkLsifSupplier и тесты.

@copilot продолжай

Добавлена поддержка Moniker для кросс-проектной навигации.

@copilot Продолжай. Попробуй заменить @value-классы ломбока на record. Builder на record вроде должен работать. Хотя использов...

Все @value+@builder классы заменены на Java records.

@copilot посмотри мой комментарий выше

Выполнено.

@copilot продолжай

Добавлен JavaDoc для всех records и публичных методов.

@copilot Продолжай. Нужно два формата вывода, NDJSON и json,как в изначальном исследовании. Только сделай это красиво

Добавлены форматы NDJSON и JSON через интерфейс LsifWriter.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • deepwiki.com
    • Triggering command: /home/REDACTED/work/_temp/ghcca-node/node/bin/node /home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments