Skip to content

feat(lsp): дерево конфигурации (workspace/x-configurationTree)#4262

Open
nixel2007 wants to merge 3 commits into
developfrom
claude/lsp-config-tree-extension-xf9rc3
Open

feat(lsp): дерево конфигурации (workspace/x-configurationTree)#4262
nixel2007 wants to merge 3 commits into
developfrom
claude/lsp-config-tree-extension-xf9rc3

Conversation

@nixel2007

@nixel2007 nixel2007 commented Jul 11, 2026

Copy link
Copy Markdown
Member

Описание

Новый метод-расширение протокола LSP workspace/x-configurationTree возвращает дерево
конфигурации рабочей области в разрезе основной конфигурации и её расширений: объекты
метаданных верхнего уровня с именами, синонимами, реквизитами и стандартными реквизитами.

  • ServerContext отдаёт mdclasses Solution (getSolution()) с раздельным доступом к базовой
    конфигурации и списку расширений; getConfiguration() сохраняет прежний контракт (смёрженная
    Configuration).
  • DTO дерева в пакете jsonrpc/ (Java record); ConfigurationTreeProvider (пакет providers/)
    строит view над Solution, разделяя реквизиты и стандартные реквизиты по AttributeKind.
  • Метод маршрутизируется через workspace/: интерфейс-расширение WorkspaceProtocolExtension
    реализует BSLWorkspaceService (делегирует в провайдер), BSLLanguageServer делегирует в сервис.
    Идентификатор рабочей области (workspaceUri или workspaceName) обязателен; при отсутствии/неизвестном
    workspace возвращается InvalidParams (обёртку ResponseError строит сама LSP4J).
  • mdclasses поднят до develop-снапшота с Solution.

Связанные задачи

Closes

Чеклист

Общие

  • Ветка PR обновлена из develop
  • Отладочные, закомментированные и прочие, не имеющие смысла участки кода удалены
  • Изменения покрыты тестами
  • Обязательные действия перед коммитом выполнены (запускал команду gradlew precommit)

Дополнительно

Зависимость на mdclasses — develop-снапшот 0.19.0.56-SNAPSHOT (в нём Solution). До релиза
mdclasses с Solution PR завязан на снапшот; перед мержем версию имеет смысл заменить на релизную.

Локально прогнаны (Gradle 8.14.3, обходя недоступный дистрибутив 9.6): ConfigurationTreeProviderTest,
ConfigurationTreeSerializationTest, ArchitectureTest, spotlessJavaCheck, javadoc — зелёные.

🤖 Generated with Claude Code


Generated by Claude Code

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The change adds a workspace/x-configurationTree JSON-RPC request, introduces DTOs for configuration metadata, builds trees from workspace solutions and extensions, updates ServerContext to expose Solution, and adds serialization and builder tests.

Changes

Configuration tree endpoint

Layer / File(s) Summary
Solution-backed server context
build.gradle.kts, src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java
ServerContext caches Solution, derives merged configuration from it, exposes getSolution(), and clears the updated cache.
Configuration-tree data contracts
src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/*
New records model request parameters, configuration and extension nodes, metadata objects, and standard or custom attributes.
Workspace tree construction
src/main/java/com/github/_1c_syntax/bsl/languageserver/lsp/ConfigurationTreeBuilder.java, src/test/java/com/github/_1c_syntax/bsl/languageserver/lsp/ConfigurationTreeBuilderTest.java
Workspace resolution and conversion of solutions into configuration-tree nodes are implemented and tested, including extensions, synonyms, and separated attributes.
Request wiring and validation
src/main/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ProtocolExtension.java, src/main/java/com/github/_1c_syntax/bsl/languageserver/lsp/BSLLanguageServer.java, src/main/java/com/github/_1c_syntax/bsl/languageserver/lsp/BSLTextDocumentService.java, src/test/java/com/github/_1c_syntax/bsl/languageserver/jsonrpc/ConfigurationTreeSerializationTest.java
The JSON-RPC method is wired through the language server, validates workspace selectors, reports invalid parameters, and has Gson round-trip tests.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant BSLLanguageServer
  participant BSLTextDocumentService
  participant ConfigurationTreeBuilder
  participant ServerContext

  Client->>BSLLanguageServer: workspace/x-configurationTree(params)
  BSLLanguageServer->>BSLTextDocumentService: configurationTree(params)
  BSLTextDocumentService->>ConfigurationTreeBuilder: getConfigurationTree(params)
  ConfigurationTreeBuilder->>ServerContext: getSolution()
  ServerContext-->>ConfigurationTreeBuilder: Solution
  ConfigurationTreeBuilder-->>BSLTextDocumentService: ConfigurationTree
  BSLTextDocumentService-->>Client: ConfigurationTree response
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 31.03% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Title is concise and accurately reflects the main change: adding the LSP configuration tree extension workspace/x-configurationTree.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/lsp-config-tree-extension-xf9rc3

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

claude added 2 commits July 11, 2026 09:33
Новый метод-расширение протокола LSP `workspace/x-configurationTree`
возвращает дерево конфигурации рабочей области в разрезе основной
конфигурации и её расширений: объекты метаданных верхнего уровня с
именами, синонимами, реквизитами и стандартными реквизитами.

- ServerContext отдаёт mdclasses Solution (getSolution) с раздельным
  доступом к базовой конфигурации и расширениям; getConfiguration()
  сохраняет прежний контракт (смёрженная Configuration).
- Новые DTO в jsonrpc/; ConfigurationTreeBuilder (слой lsp) строит view
  над Solution, разделяя реквизиты и стандартные реквизиты по
  AttributeKind. Билдер живёт в lsp, а не в providers, т.к. jsonrpc-слой
  доступен только lsp (архитектурное правило).
- Метод реализован в BSLTextDocumentService (как diagnostics),
  BSLLanguageServer делегирует. Идентификатор рабочей области
  (workspaceUri или workspaceName) обязателен.
- mdclasses поднят до develop-снапшота с Solution.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7m3z5tjHhUjghgwojTp1Z
DTO дерева конфигурации переведены с Lombok @value на Java record
(ConfigurationTree, MdClassNode, MetadataObjectNode, AttributeNode,
ConfigurationTreeParams). LSP-провод использует стоковый Gson LSP4J
(нативная поддержка records с Gson 2.10+), имена полей на проводе не
меняются — берутся из имён компонент record.

Добавлен ConfigurationTreeSerializationTest: round-trip через Gson
LSP4J (MessageJsonHandler) подтверждает (де)сериализацию и сохранение
имён полей. Обновлены аксессоры (getX -> x) в ConfigurationTreeBuilder,
BSLTextDocumentService и тесте.

Существующие Diagnostics/DiagnosticParams не тронуты.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7m3z5tjHhUjghgwojTp1Z
@nixel2007
nixel2007 force-pushed the claude/lsp-config-tree-extension-xf9rc3 branch 5 times, most recently from f4e4169 to be903a3 Compare July 11, 2026 10:24
…rovider

Логика запроса (валидация идентификатора рабочей области, резолв контекста,
построение дерева, ошибки JSON-RPC) — в providers/ConfigurationTreeProvider,
покрыта ConfigurationTreeProviderTest.

Маршрутизация: метод workspace/x-configurationTree обрабатывается в
BSLWorkspaceService (workspace/-запрос), а textDocument/x-diagnostics — в
BSLTextDocumentService. Расширение протокола разделено по областям:
TextDocumentProtocolExtension и WorkspaceProtocolExtension; BSLLanguageServer
реализует оба и делегирует каждый метод в соответствующий сервис.

При невалидных параметрах провайдер бросает ResponseErrorException — LSP4J сам
оборачивает его в JSON-RPC ответ (RemoteEndpoint#exceptionToErrorObject).

Правило ArchitectureTest ослаблено: слой Providers может зависеть от Jsonrpc
(провайдеры отдают наружу DTO расширений протокола).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7m3z5tjHhUjghgwojTp1Z
@nixel2007
nixel2007 force-pushed the claude/lsp-config-tree-extension-xf9rc3 branch from be903a3 to d5451bd Compare July 11, 2026 10:26
@sonarqubecloud

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown
Contributor

Test Results

 3 624 files  +12   3 624 suites  +12   1h 48m 28s ⏱️ + 11m 5s
 3 589 tests + 7   3 571 ✅ + 7   18 💤 ±0  0 ❌ ±0 
21 534 runs  +42  21 422 ✅ +42  112 💤 ±0  0 ❌ ±0 

Results for commit d5451bd. ± Comparison against base commit 61640a0.

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