From 7d209fef53b1cef4001d499ff105928dfe854748 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 22:04:40 +0300 Subject: [PATCH 01/11] inlayHints api --- .../bsl/languageserver/BSLLanguageServer.java | 9 ++ .../BSLTextDocumentService.java | 14 +++ .../commands/CommandSupplier.java | 9 ++ .../inlayhints/InlayHintSupplier.java | 33 ++++++ .../providers/CommandProvider.java | 5 + .../providers/InlayHintProvider.java | 68 +++++++++++ .../providers/InlayHintProviderTest.java | 66 +++++++++++ src/test/resources/providers/inlayHints.bsl | 106 ++++++++++++++++++ 8 files changed, 310 insertions(+) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java create mode 100644 src/test/resources/providers/inlayHints.bsl diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java index d6567b1ad3a..b265faba0b5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java @@ -46,6 +46,7 @@ import org.eclipse.lsp4j.HoverOptions; import org.eclipse.lsp4j.InitializeParams; import org.eclipse.lsp4j.InitializeResult; +import org.eclipse.lsp4j.InlayHintRegistrationOptions; import org.eclipse.lsp4j.ReferenceOptions; import org.eclipse.lsp4j.RenameCapabilities; import org.eclipse.lsp4j.RenameOptions; @@ -111,6 +112,7 @@ public CompletableFuture initialize(InitializeParams params) { capabilities.setSelectionRangeProvider(getSelectionRangeProvider()); capabilities.setColorProvider(getColorProvider()); capabilities.setRenameProvider(getRenameProvider(params)); + capabilities.setInlayHintProvider(getInlayHintProvider()); capabilities.setExecuteCommandProvider(getExecuteCommandProvider()); var result = new InitializeResult(capabilities, serverInfo); @@ -312,6 +314,13 @@ private static Boolean getRenamePrepareSupport(InitializeParams params) { .orElse(false); } + private static InlayHintRegistrationOptions getInlayHintProvider() { + var inlayHintOptions = new InlayHintRegistrationOptions(); + inlayHintOptions.setResolveProvider(Boolean.FALSE); + inlayHintOptions.setWorkDoneProgress(Boolean.FALSE); + return inlayHintOptions; + } + private ExecuteCommandOptions getExecuteCommandProvider() { var executeCommandOptions = new ExecuteCommandOptions(); executeCommandOptions.setCommands(commandProvider.getCommandIds()); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java index 458930f9435..dad9ec9b4ff 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java @@ -39,6 +39,7 @@ import com.github._1c_syntax.bsl.languageserver.providers.FoldingRangeProvider; import com.github._1c_syntax.bsl.languageserver.providers.FormatProvider; import com.github._1c_syntax.bsl.languageserver.providers.HoverProvider; +import com.github._1c_syntax.bsl.languageserver.providers.InlayHintProvider; import com.github._1c_syntax.bsl.languageserver.providers.ReferencesProvider; import com.github._1c_syntax.bsl.languageserver.providers.RenameProvider; import com.github._1c_syntax.bsl.languageserver.providers.SelectionRangeProvider; @@ -74,6 +75,8 @@ import org.eclipse.lsp4j.FoldingRangeRequestParams; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.HoverParams; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.LocationLink; import org.eclipse.lsp4j.PrepareRenameDefaultBehavior; @@ -118,6 +121,7 @@ public class BSLTextDocumentService implements TextDocumentService, ProtocolExte private final SelectionRangeProvider selectionRangeProvider; private final ColorProvider colorProvider; private final RenameProvider renameProvider; + private final InlayHintProvider inlayHintProvider; @Override public CompletableFuture hover(HoverParams params) { @@ -304,6 +308,16 @@ public CompletableFuture> colorPresentation(ColorPresent return CompletableFuture.supplyAsync(() -> colorProvider.getColorPresentation(documentContext, params)); } + @Override + public CompletableFuture> inlayHint(InlayHintParams params) { + var documentContext = context.getDocument(params.getTextDocument().getUri()); + if (documentContext == null) { + return CompletableFuture.completedFuture(Collections.emptyList()); + } + + return CompletableFuture.supplyAsync(() -> inlayHintProvider.getInlayHint(documentContext, params)); + } + @Override public void didOpen(DidOpenTextDocumentParams params) { var textDocumentItem = params.getTextDocument(); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java index 97c0091149c..ec1632afeb4 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/commands/CommandSupplier.java @@ -83,6 +83,15 @@ default Command createCommand(String title) { */ Optional execute(T arguments); + /** + * Флаг, показывающий необходимость обновить inlay hints после выполнения команды. + * + * @return Флаг, показывающий необходимость обновить inlay hints после выполнения команды. + */ + default boolean needRefreshInlayHintsAfterExecuteCommand() { + return false; + } + /** * Флаг, показывающий необходимость обновить линзы после выполнения команды. * diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java new file mode 100644 index 00000000000..ced342f21eb --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java @@ -0,0 +1,33 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; + +import java.util.List; + +public interface InlayHintSupplier { + + List getInlayHints(DocumentContext documentContext, InlayHintParams params); +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java index a864ec9d4ee..c2e3efc1991 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CommandProvider.java @@ -44,7 +44,9 @@ public class CommandProvider { private final Map> commandSuppliersById; private final ObjectMapper objectMapper; + private final CodeLensProvider codeLensProvider; + private final InlayHintProvider inlayHintProvider; /** * Выполнить серверную команду. @@ -66,6 +68,9 @@ public Object executeCommand(CommandArguments arguments) { .orElse(null); CompletableFuture.runAsync(() -> { + if (commandSupplier.needRefreshInlayHintsAfterExecuteCommand()) { + inlayHintProvider.refreshInlayHints(); + } if (commandSupplier.needRefreshCodeLensesAfterExecuteCommand()) { codeLensProvider.refreshCodeLenses(); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java new file mode 100644 index 00000000000..d30283dc91d --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -0,0 +1,68 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.providers; + +import com.github._1c_syntax.bsl.languageserver.ClientCapabilitiesHolder; +import com.github._1c_syntax.bsl.languageserver.LanguageClientHolder; +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; +import lombok.RequiredArgsConstructor; +import org.eclipse.lsp4j.ClientCapabilities; +import org.eclipse.lsp4j.InlayHint; +import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.InlayHintWorkspaceCapabilities; +import org.eclipse.lsp4j.WorkspaceClientCapabilities; +import org.eclipse.lsp4j.services.LanguageClient; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class InlayHintProvider { + + private final Collection suppliers; + + private final ClientCapabilitiesHolder clientCapabilitiesHolder; + private final LanguageClientHolder clientHolder; + + public List getInlayHint(DocumentContext documentContext, InlayHintParams params) { + return suppliers.stream() + .map(supplier -> supplier.getInlayHints(documentContext, params)) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + + public void refreshInlayHints() { + boolean refreshSupport = clientCapabilitiesHolder.getCapabilities() + .map(ClientCapabilities::getWorkspace) + .map(WorkspaceClientCapabilities::getInlayHint) + .map(InlayHintWorkspaceCapabilities::getRefreshSupport) + .orElse(Boolean.FALSE); + + if (refreshSupport) { + clientHolder.execIfConnected(LanguageClient::refreshInlayHints); + } + } +} diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java new file mode 100644 index 00000000000..98a9862a8be --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -0,0 +1,66 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2022 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.providers; + +import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; +import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.util.TestUtils; +import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.TextDocumentIdentifier; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +@CleanupContextBeforeClassAndAfterEachTestMethod +class InlayHintProviderTest { + + @Autowired + private InlayHintProvider provider; + + private DocumentContext documentContext; + + @BeforeEach + void init() { + String filePath = "./src/test/resources/providers/inlayHints.bsl"; + documentContext = TestUtils.getDocumentContextFromFile(filePath); + } + + @Test + void getInlayHint() { + + // given + var params = new InlayHintParams(); + params.setTextDocument(new TextDocumentIdentifier(documentContext.getUri().toString())); + params.setRange(Ranges.create(documentContext.getAst())); + + // when + var inlayHints = provider.getInlayHint(documentContext, params); + + // then + assertThat(inlayHints).hasSizeGreaterThan(0); + } +} \ No newline at end of file diff --git a/src/test/resources/providers/inlayHints.bsl b/src/test/resources/providers/inlayHints.bsl new file mode 100644 index 00000000000..c72278111a2 --- /dev/null +++ b/src/test/resources/providers/inlayHints.bsl @@ -0,0 +1,106 @@ + +&AtClient +Procedure Player1HealthPlus1(Command) + ChangeHealth(Player1, Health1, 1); +EndProcedure + +&AtClient +Procedure Player1HealthPlus5(Command) + ChangeHealth(Player1, Health1, 5); +EndProcedure + +&AtClient +Procedure Player1HealthMinus1(Command) + ChangeHealth(Player1, Health1, -1); +EndProcedure + +&AtClient +Procedure Player1HealthMinus5(Command) + ChangeHealth(Player1, Health1, -5); +EndProcedure + +&AtClient +Procedure Player2HealthPlus1(Command) + ChangeHealth(Player2, Health2, 1); +EndProcedure + +&AtClient +Procedure Player2HealthPlus5(Command) + ChangeHealth(Player2, Health2, 5); +EndProcedure + +&AtClient +Procedure Player2HealthMinus1(Command) + ChangeHealth(Player2, Health2, -1); +EndProcedure + +&AtClient +Procedure Player2HealthMinus5(Command) + ChangeHealth(Player2, Health2, -5); +EndProcedure + +&AtServer +Procedure OnCreateAtServer(Cancel, StandardProcessing) + NewGameAtServer(True); +EndProcedure + +&AtClient +Procedure NewGame(Command) + NewGameAtServer(); +EndProcedure + +&AtServer +Procedure NewGameAtServer(FirstTime = False) + + Health1 = 20; + Health2 = 20; + + If FirstTime Then + Player1 = Catalogs.Players.Player1; + Player2 = Catalogs.Players.Player2; + + Deck1 = Catalogs.Decks.DefaultDeck; + Deck2 = Catalogs.Decks.DefaultDeck; + EndIf; + + // TODO: Move GUI from logic + ThisObject.ChildItems.PlayerWon.Visible = False; + ThisObject.ChildItems.Buttons.Enabled = True; + +EndProcedure + +&AtClient +Procedure ChangeHealth(Player, PlayersHealth, Amount) + + PlayersHealth = PlayersHealth + Amount; + + If PlayersHealth <= 0 Then + + // TODO: rewrite + PlayerWon = ?(Player = Player1, Player2, Player1); + + // TODO: Move GUI from logic + ThisObject.ChildItems.PlayerWon.Visible = True; + ThisObject.ChildItems.PlayerWon.Title = String(PlayerWon) + " won!"; + ThisObject.ChildItems.Buttons.Enabled = False; + + SaveGameStat(PlayerWon); + + EndIf; + +EndProcedure + +&AtServer +Procedure SaveGameStat(PlayerWon) + + NewRecord = InformationRegisters.GameStats.CreateRecordManager(); + NewRecord.Date = CurrentDate(); + NewRecord.Player1 = Player1; + NewRecord.Player2 = Player2; + NewRecord.Deck1 = Deck1; + NewRecord.Deck2 = Deck2; + NewRecord.Won = PlayerWon; + + NewRecord.Write(); + +EndProcedure From 6372e30f07b72a8ac0cdbfab938ba5f56e40fd0d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 22:16:27 +0300 Subject: [PATCH 02/11] javadoc --- .../inlayhints/InlayHintSupplier.java | 11 +++++++++++ .../providers/CodeLensProvider.java | 3 +++ .../providers/InlayHintProvider.java | 16 ++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java index ced342f21eb..8196a8fd650 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java @@ -27,7 +27,18 @@ import java.util.List; +/** + * Базовый интерфейс для наполнения {@link com.github._1c_syntax.bsl.languageserver.providers.InlayHintProvider} + * данными о доступных в документе inlay hints. + */ public interface InlayHintSupplier { + /** + * Получить inlay hints, доступные в документе. + * + * @param documentContext Контекст документа, для которого надо рассчитать inlay hints. + * @param params Параметры запроса. + * @return Список inlay hints в документе. + */ List getInlayHints(DocumentContext documentContext, InlayHintParams params); } diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java index d34cceb5cb4..96ef5789d49 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/CodeLensProvider.java @@ -141,6 +141,9 @@ public CodeLensData extractData(CodeLens codeLens) { return objectMapper.readValue(rawCodeLensData.toString(), CodeLensData.class); } + /** + * Отправить запрос на обновление линз кода. + */ public void refreshCodeLenses() { boolean clientSupportsRefreshCodeLenses = clientCapabilitiesHolder.getCapabilities() .map(ClientCapabilities::getWorkspace) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java index d30283dc91d..6ed93f09fca 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -38,6 +38,12 @@ import java.util.List; import java.util.stream.Collectors; +/** + * Провайдер, обрабатывающий запросы {@code textDocument/inlayHint} и {@code inlayHint/resolve}. + * + * @see Inlay hint request. + * @see Inlay hint resolve request + */ @Component @RequiredArgsConstructor public class InlayHintProvider { @@ -47,6 +53,13 @@ public class InlayHintProvider { private final ClientCapabilitiesHolder clientCapabilitiesHolder; private final LanguageClientHolder clientHolder; + /** + * Получить список inlay hints в документе. + * + * @param documentContext Документ, для которого запрашиваются inlay hints. + * @param params Параметры запроса. + * @return Список inlay hints в документе + */ public List getInlayHint(DocumentContext documentContext, InlayHintParams params) { return suppliers.stream() .map(supplier -> supplier.getInlayHints(documentContext, params)) @@ -54,6 +67,9 @@ public List getInlayHint(DocumentContext documentContext, InlayHintPa .collect(Collectors.toList()); } + /** + * Отправить запрос на обновление inlay hints. + */ public void refreshInlayHints() { boolean refreshSupport = clientCapabilitiesHolder.getCapabilities() .map(ClientCapabilities::getWorkspace) From 3fcefc1892a081765162a7dbba6bcb19e618f4d6 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 22:30:37 +0300 Subject: [PATCH 03/11] =?UTF-8?q?=D0=9F=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=D1=8B=20inlay=20hints,=20=D0=BF=D0=BE=D0=B4=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20inlayhint/refresh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LanguageServerConfiguration.java | 7 +- .../inlayhints/InlayHintsOptions.java | 50 +++++++++++ .../inlayhints/package-info.java | 29 +++++++ .../inlayhints/InlayHintSupplier.java | 18 ++++ .../InlayHintsConfiguration.java | 87 +++++++++++++++++++ .../infrastructure/package-info.java | 30 +++++++ .../inlayhints/package-info.java | 30 +++++++ .../providers/InlayHintProvider.java | 30 ++++++- 8 files changed, 277 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index 9c363681db5..57acef98816 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -30,6 +30,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.DiagnosticsOptions; import com.github._1c_syntax.bsl.languageserver.configuration.documentlink.DocumentLinkOptions; import com.github._1c_syntax.bsl.languageserver.configuration.formating.FormattingOptions; +import com.github._1c_syntax.bsl.languageserver.configuration.inlayhints.InlayHintsOptions; import com.github._1c_syntax.utils.Absolute; import edu.umd.cs.findbugs.annotations.Nullable; import lombok.AccessLevel; @@ -90,6 +91,10 @@ public class LanguageServerConfiguration { @Setter(value = AccessLevel.NONE) private DocumentLinkOptions documentLinkOptions = new DocumentLinkOptions(); + @JsonProperty("inlayHint") + @Setter(value = AccessLevel.NONE) + private InlayHintsOptions inlayHintsOptions = new InlayHintsOptions(); + @JsonProperty("formatting") @Setter(value = AccessLevel.NONE) private FormattingOptions formattingOptions = new FormattingOptions(); @@ -217,7 +222,7 @@ private void loadConfigurationFile(File configurationFile) { private void copyPropertiesFrom(LanguageServerConfiguration configuration) { // todo: refactor PropertyUtils.copyProperties(this, configuration); - PropertyUtils.copyProperties(this.codeLensOptions, configuration.codeLensOptions); + PropertyUtils.copyProperties(this.inlayHintsOptions, configuration.inlayHintsOptions); PropertyUtils.copyProperties(this.diagnosticsOptions, configuration.diagnosticsOptions); PropertyUtils.copyProperties(this.documentLinkOptions, configuration.documentLinkOptions); PropertyUtils.copyProperties(this.formattingOptions, configuration.formattingOptions); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java new file mode 100644 index 00000000000..8cdfc26b965 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java @@ -0,0 +1,50 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.configuration.inlayhints; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.github._1c_syntax.bsl.languageserver.configuration.databind.ParametersDeserializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.lsp4j.jsonrpc.messages.Either; + +import java.util.HashMap; +import java.util.Map; + +/** + * Корневой класс для настройки {@link com.github._1c_syntax.bsl.languageserver.providers.InlayHintProvider} + */ +@Data +@AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)})) +@NoArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +public class InlayHintsOptions { + + /** + * Параметры сапплаеров inlay hints. + */ + @JsonDeserialize(using = ParametersDeserializer.class) + private Map>> parameters = new HashMap<>(); +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java new file mode 100644 index 00000000000..038ac7ca0cb --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java @@ -0,0 +1,29 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +/** + * Пакет содержит настройки {@link com.github._1c_syntax.bsl.languageserver.providers.InlayHintProvider} + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.configuration.inlayhints; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java index 8196a8fd650..7433be30fcd 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java @@ -25,6 +25,7 @@ import org.eclipse.lsp4j.InlayHint; import org.eclipse.lsp4j.InlayHintParams; +import java.beans.Introspector; import java.util.List; /** @@ -33,6 +34,23 @@ */ public interface InlayHintSupplier { + String INLAY_HINT_SUPPLIER = "InlayHintSupplier"; + + /** + * Идентификатор сапплаера. + * + * @return Идентификатор сапплаера. + */ + default String getId() { + String simpleName = getClass().getSimpleName(); + if (simpleName.endsWith(INLAY_HINT_SUPPLIER)) { + simpleName = simpleName.substring(0, simpleName.length() - INLAY_HINT_SUPPLIER.length()); + simpleName = Introspector.decapitalize(simpleName); + } + + return simpleName; + } + /** * Получить inlay hints, доступные в документе. * diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java new file mode 100644 index 00000000000..0169461807e --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java @@ -0,0 +1,87 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.inlayhints.infrastructure; + +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; +import org.eclipse.lsp4j.jsonrpc.messages.Either; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; + +/** + * Spring-конфигурация для определения бинов + * пакета {@link com.github._1c_syntax.bsl.languageserver.inlayhints}. + */ +@Configuration +public class InlayHintsConfiguration { + + /** + * Получить список сапплаеров inlay hints в разрезе их идентификаторов. + * + * @param inlayHintSuppliers Плоский список сапплаеров. + * @return Список сапплаеров inlay hints в разрезе их идентификаторов. + */ + @Bean + public Map inlayHintSuppliersById( + Collection inlayHintSuppliers + ) { + return inlayHintSuppliers.stream() + .collect(Collectors.toMap(InlayHintSupplier::getId, Function.identity())); + } + + /** + * Получить список активированных в данный момент сапплаеров inlay hints. + * + * @param configuration Конфигурация сервера. + * @param inlayHintSuppliersById Список сапплаеров inlay hints в разрезе из идентификаторов. + * @return Список активированных в данный момент сапплаеров inlay hints. + */ + @Bean + @Scope(SCOPE_PROTOTYPE) + public List enabledInlayHintSuppliers( + LanguageServerConfiguration configuration, + @Qualifier("inlayHintSuppliersById") Map inlayHintSuppliersById + ) { + var parameters = configuration.getInlayHintsOptions().getParameters(); + return inlayHintSuppliersById.values().stream() + .filter(supplier -> supplierIsEnabled(supplier.getId(), parameters)) + .collect(Collectors.toList()); + } + + private static boolean supplierIsEnabled( + String supplierId, + Map>> parameters + ) { + var supplierConfig = parameters.getOrDefault(supplierId, Either.forLeft(true)); + return supplierConfig.isRight() || supplierConfig.getLeft(); + } +} diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java new file mode 100644 index 00000000000..cc7b3a31dd7 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/package-info.java @@ -0,0 +1,30 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +/** + * Spring-специфичные классы для настройки внутренней инфраструктуры + * пакета {@link com.github._1c_syntax.bsl.languageserver.inlayhints}. + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.inlayhints.infrastructure; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java new file mode 100644 index 00000000000..1ad5dcd5c05 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/package-info.java @@ -0,0 +1,30 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +/** + * Пакет предназначен для реализации inlay hints, + * предоставляемых {@link com.github._1c_syntax.bsl.languageserver.providers.InlayHintProvider}. + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.inlayhints; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java index 6ed93f09fca..a53533b80f5 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -23,6 +23,7 @@ import com.github._1c_syntax.bsl.languageserver.ClientCapabilitiesHolder; import com.github._1c_syntax.bsl.languageserver.LanguageClientHolder; +import com.github._1c_syntax.bsl.languageserver.configuration.events.LanguageServerConfigurationChangedEvent; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; import lombok.RequiredArgsConstructor; @@ -32,8 +33,11 @@ import org.eclipse.lsp4j.InlayHintWorkspaceCapabilities; import org.eclipse.lsp4j.WorkspaceClientCapabilities; import org.eclipse.lsp4j.services.LanguageClient; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -48,11 +52,17 @@ @RequiredArgsConstructor public class InlayHintProvider { - private final Collection suppliers; - + private final ObjectProvider> enabledInlayHintSuppliersProvider; private final ClientCapabilitiesHolder clientCapabilitiesHolder; private final LanguageClientHolder clientHolder; + private List enabledInlayHintSuppliers; + + @PostConstruct + protected void init() { + enabledInlayHintSuppliers = enabledInlayHintSuppliersProvider.getObject(); + } + /** * Получить список inlay hints в документе. * @@ -61,12 +71,26 @@ public class InlayHintProvider { * @return Список inlay hints в документе */ public List getInlayHint(DocumentContext documentContext, InlayHintParams params) { - return suppliers.stream() + return enabledInlayHintSuppliers.stream() .map(supplier -> supplier.getInlayHints(documentContext, params)) .flatMap(Collection::stream) .collect(Collectors.toList()); } + /** + * Обработчик события {@link LanguageServerConfigurationChangedEvent}. + *

+ * В случае поддержки запроса подключенным клиентом инициирует запрос {@code workspace/inlayHint/refresh}. + * + * @param event Событие + */ + @EventListener + public void handleEvent(LanguageServerConfigurationChangedEvent event) { + enabledInlayHintSuppliers = enabledInlayHintSuppliersProvider.getObject(); + + refreshInlayHints(); + } + /** * Отправить запрос на обновление inlay hints. */ From 6a02106dc4423aa74f5b4bdefe0f9f5718536ee0 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 22:41:33 +0300 Subject: [PATCH 04/11] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=BE=D0=B9=20=D1=82=D0=B5=D1=81=D1=82=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D1=83=D1=8E=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=83=20=D0=BC=D0=B5=D1=85=D0=B0=D0=BD=D0=B8=D0=B7=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../providers/InlayHintProviderTest.java | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java index 98a9862a8be..e50d1b9717f 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -22,20 +22,26 @@ package com.github._1c_syntax.bsl.languageserver.providers; import com.github._1c_syntax.bsl.languageserver.context.DocumentContext; -import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterEachTestMethod; +import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; import com.github._1c_syntax.bsl.languageserver.util.TestUtils; import com.github._1c_syntax.bsl.languageserver.utils.Ranges; +import org.eclipse.lsp4j.InlayHint; import org.eclipse.lsp4j.InlayHintParams; +import org.eclipse.lsp4j.Position; import org.eclipse.lsp4j.TextDocumentIdentifier; +import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; + +import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest -@CleanupContextBeforeClassAndAfterEachTestMethod class InlayHintProviderTest { @Autowired @@ -61,6 +67,31 @@ void getInlayHint() { var inlayHints = provider.getInlayHint(documentContext, params); // then - assertThat(inlayHints).hasSizeGreaterThan(0); + assertThat(inlayHints) + .contains(getTestHint()); + } + + private static InlayHint getTestHint() { + return new InlayHint(new Position(0, 0), Either.forLeft("test hint")); } + + @TestConfiguration + static class Configuration { + @Bean + InlayHintSupplier inlayHintSupplier() { + return new InlayHintSupplier() { + @Override + public String getId() { + return "test"; + } + + @Override + public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { + var inlayHint = getTestHint(); + return List.of(inlayHint); + } + }; + } + } + } \ No newline at end of file From c2a7df44efdcfff6d2997bb866cbea6adc4e4338 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 22:51:08 +0300 Subject: [PATCH 05/11] =?UTF-8?q?=D0=9B=D0=B8=D1=86=D0=B5=D0=BD=D0=B7?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsl/languageserver/inlayhints/InlayHintSupplier.java | 2 +- .../bsl/languageserver/providers/InlayHintProvider.java | 2 +- .../bsl/languageserver/providers/InlayHintProviderTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java index 7433be30fcd..8895dbea30c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/InlayHintSupplier.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java index a53533b80f5..f929ab8431c 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProvider.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java index e50d1b9717f..d41ba95142b 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -1,7 +1,7 @@ /* * This file is a part of BSL Language Server. * - * Copyright (c) 2018-2022 + * Copyright (c) 2018-2023 * Alexey Sosnoviy , Nikita Fedkin and contributors * * SPDX-License-Identifier: LGPL-3.0-or-later From 193634e703daac33a7cfd3a7e2e88a65bd687611 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 2 Apr 2023 12:04:18 +0300 Subject: [PATCH 06/11] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=86=D0=B8=D0=BA=D0=BB=D0=B8?= =?UTF-8?q?=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B9=20=D0=B7=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20=D0=B1=D0=B8=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InlayHintsConfiguration.java | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java index 0169461807e..3f3ff1ec429 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java @@ -24,7 +24,6 @@ import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; import com.github._1c_syntax.bsl.languageserver.inlayhints.InlayHintSupplier; import org.eclipse.lsp4j.jsonrpc.messages.Either; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; @@ -32,7 +31,6 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.function.Function; import java.util.stream.Collectors; import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; @@ -44,35 +42,21 @@ @Configuration public class InlayHintsConfiguration { - /** - * Получить список сапплаеров inlay hints в разрезе их идентификаторов. - * - * @param inlayHintSuppliers Плоский список сапплаеров. - * @return Список сапплаеров inlay hints в разрезе их идентификаторов. - */ - @Bean - public Map inlayHintSuppliersById( - Collection inlayHintSuppliers - ) { - return inlayHintSuppliers.stream() - .collect(Collectors.toMap(InlayHintSupplier::getId, Function.identity())); - } - /** * Получить список активированных в данный момент сапплаеров inlay hints. * - * @param configuration Конфигурация сервера. - * @param inlayHintSuppliersById Список сапплаеров inlay hints в разрезе из идентификаторов. + * @param configuration Конфигурация сервера. + * @param inlayHintSuppliers Список сапплаеров inlay hints в разрезе из идентификаторов. * @return Список активированных в данный момент сапплаеров inlay hints. */ @Bean @Scope(SCOPE_PROTOTYPE) public List enabledInlayHintSuppliers( LanguageServerConfiguration configuration, - @Qualifier("inlayHintSuppliersById") Map inlayHintSuppliersById + Collection inlayHintSuppliers ) { var parameters = configuration.getInlayHintsOptions().getParameters(); - return inlayHintSuppliersById.values().stream() + return inlayHintSuppliers.stream() .filter(supplier -> supplierIsEnabled(supplier.getId(), parameters)) .collect(Collectors.toList()); } From 8ca179cd63d1140b39b96b94920451682cdea2d9 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sun, 2 Apr 2023 15:34:37 +0300 Subject: [PATCH 07/11] Update LanguageServerConfiguration.java --- .../configuration/LanguageServerConfiguration.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index 57acef98816..d460dc5d3ef 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -223,6 +223,7 @@ private void copyPropertiesFrom(LanguageServerConfiguration configuration) { // todo: refactor PropertyUtils.copyProperties(this, configuration); PropertyUtils.copyProperties(this.inlayHintsOptions, configuration.inlayHintsOptions); + PropertyUtils.copyProperties(this.codeLensOptions, configuration.codeLensOptions); PropertyUtils.copyProperties(this.diagnosticsOptions, configuration.diagnosticsOptions); PropertyUtils.copyProperties(this.documentLinkOptions, configuration.documentLinkOptions); PropertyUtils.copyProperties(this.formattingOptions, configuration.formattingOptions); From 66532e0c508f4775400baf70439cff2ec26c0175 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 6 Apr 2023 22:38:25 +0300 Subject: [PATCH 08/11] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D0=B9=20=D1=81=D0=B0=D0=BF=D0=BF=D0=BB=D0=B0=D0=B5=D1=80?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=20=D0=B2=20=D0=BE?= =?UTF-8?q?=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D1=81=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=BD=D1=8F=D1=82=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4-=D0=BA?= =?UTF-8?q?=D0=B0=D0=B2=D0=B5=D1=80=D0=B5=D0=B4=D0=B6=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../providers/InlayHintProviderTest.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java index d41ba95142b..72d06dd4d50 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/providers/InlayHintProviderTest.java @@ -79,18 +79,15 @@ private static InlayHint getTestHint() { static class Configuration { @Bean InlayHintSupplier inlayHintSupplier() { - return new InlayHintSupplier() { - @Override - public String getId() { - return "test"; - } + return new TestInlayHintSupplier(); + } + } - @Override - public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { - var inlayHint = getTestHint(); - return List.of(inlayHint); - } - }; + static class TestInlayHintSupplier implements InlayHintSupplier { + @Override + public List getInlayHints(DocumentContext documentContext, InlayHintParams params) { + var inlayHint = getTestHint(); + return List.of(inlayHint); } } From 37a7c6ce5b5803507011ddd9d143c893a6023df2 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 13 Apr 2023 16:15:18 +0200 Subject: [PATCH 09/11] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D1=81=D0=B0=20=D1=81=20=D0=BE=D0=BF=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=D0=BC=D0=B8=20=D0=B8=20=D1=81=D1=85=D0=B5=D0=BC=D0=B0=20?= =?UTF-8?q?json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LanguageServerConfiguration.java | 6 +++--- ...intsOptions.java => InlayHintOptions.java} | 2 +- .../InlayHintsConfiguration.java | 2 +- .../languageserver/configuration/schema.json | 19 +++++++++++++++++++ 4 files changed, 24 insertions(+), 5 deletions(-) rename src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/{InlayHintsOptions.java => InlayHintOptions.java} (98%) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java index d460dc5d3ef..b72618f2600 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfiguration.java @@ -30,7 +30,7 @@ import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.DiagnosticsOptions; import com.github._1c_syntax.bsl.languageserver.configuration.documentlink.DocumentLinkOptions; import com.github._1c_syntax.bsl.languageserver.configuration.formating.FormattingOptions; -import com.github._1c_syntax.bsl.languageserver.configuration.inlayhints.InlayHintsOptions; +import com.github._1c_syntax.bsl.languageserver.configuration.inlayhints.InlayHintOptions; import com.github._1c_syntax.utils.Absolute; import edu.umd.cs.findbugs.annotations.Nullable; import lombok.AccessLevel; @@ -93,7 +93,7 @@ public class LanguageServerConfiguration { @JsonProperty("inlayHint") @Setter(value = AccessLevel.NONE) - private InlayHintsOptions inlayHintsOptions = new InlayHintsOptions(); + private InlayHintOptions inlayHintOptions = new InlayHintOptions(); @JsonProperty("formatting") @Setter(value = AccessLevel.NONE) @@ -222,7 +222,7 @@ private void loadConfigurationFile(File configurationFile) { private void copyPropertiesFrom(LanguageServerConfiguration configuration) { // todo: refactor PropertyUtils.copyProperties(this, configuration); - PropertyUtils.copyProperties(this.inlayHintsOptions, configuration.inlayHintsOptions); + PropertyUtils.copyProperties(this.inlayHintOptions, configuration.inlayHintOptions); PropertyUtils.copyProperties(this.codeLensOptions, configuration.codeLensOptions); PropertyUtils.copyProperties(this.diagnosticsOptions, configuration.diagnosticsOptions); PropertyUtils.copyProperties(this.documentLinkOptions, configuration.documentLinkOptions); diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java similarity index 98% rename from src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java rename to src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java index 8cdfc26b965..d102a695947 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintOptions.java @@ -40,7 +40,7 @@ @AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)})) @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) -public class InlayHintsOptions { +public class InlayHintOptions { /** * Параметры сапплаеров inlay hints. diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java index 3f3ff1ec429..181d6b04aea 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java @@ -55,7 +55,7 @@ public List enabledInlayHintSuppliers( LanguageServerConfiguration configuration, Collection inlayHintSuppliers ) { - var parameters = configuration.getInlayHintsOptions().getParameters(); + var parameters = configuration.getInlayHintOptions().getParameters(); return inlayHintSuppliers.stream() .filter(supplier -> supplierIsEnabled(supplier.getId(), parameters)) .collect(Collectors.toList()); diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json index 662d4024cad..52650badf1f 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json @@ -516,6 +516,15 @@ "$id": "#/definitions/codeLensParameters/cyclomaticComplexity" } } + }, + "inlayHintParameters": { + "$id": "#/definitions/inlayHintParameters", + "type": "object", + "title": "Inlay hints parameters configuration.\nKey-value object, where key is a inlay hint ID, and value is boolean or object with concrete inlay hint configuration.", + "default": null, + "additionalProperties": { + "$ref": "#/definitions/parameter" + } } }, "properties": { @@ -726,6 +735,16 @@ } } }, + "inlayHint": { + "$id": "#/properties/inlayHint", + "type": "object", + "title": "Inlay hint configuration.", + "properties": { + "parameters": { + "$ref": "#/definitions/inlayHintParameters" + } + } + }, "useDevSite": { "$id": "#/properties/useDevSite", "type": "boolean", From 13340e161290f6fd836dccbbd6b3945193908475 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 13 Apr 2023 16:18:42 +0200 Subject: [PATCH 10/11] =?UTF-8?q?=D0=94=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=88=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/features/ConfigurationFile.md | 50 ++++++++++++++++-------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/docs/features/ConfigurationFile.md b/docs/features/ConfigurationFile.md index f7cb3ba6d6c..819117e2235 100644 --- a/docs/features/ConfigurationFile.md +++ b/docs/features/ConfigurationFile.md @@ -7,30 +7,32 @@ BSL Language Server предоставляет возможность измен ## Описание настроек -|Наименование|Тип|Описание| -|:--|:-:|:--| -|`language`|`Строка`|Этот параметр устанавливает язык отображения диагностированных замечаний. На данный момент поддерживаются два языка:
* `ru` - для русского языка (*используется по умолчанию*)
* `en` - для английского языка| -|`codeLens`|`JSON-Объект`|Содержит настройки отображения `линз` в продвинутых кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация над блоком кода. Свойства объекта| -|⤷   `parameters`|`JSON-Объект`|Коллекция настроек линз. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором линзы
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение линзы (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек линзы.| -|   ⤷   `cognitiveComplexity`|`Булево` или `JSON-Объект`|Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода над его определением. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`.| -|   ⤷   `cyclomaticComplexity`|`Булево` или `JSON-Объект`|Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`.| -|`diagnostics`|`JSON-Объект`|Содержит настройки диагностик| -|⤷   `computeTrigger`|`Строка`|С помощью этого параметра можно указать событие, при котором будет вызвана процедура анализа кода для диагностирования замечаний. Возможные значения:
* `onType` - при редактировании файла (онлайн) ***на больших файлах может ЗНАЧИТЕЛЬНО замедлять редактирование***
* `onSave` - при сохранении файла (*используется по умолчанию*)
* `never` - анализ выполняться не будет| -|⤷   `ordinaryAppSupport`|`Булево`|Поддержка обычного клиента. Диагностики будут требовать учитывать особенности обычного приложения. Возможные значения:
* `true` - конфигурация разрабатывается с поддержкой обычного клиента *(установлен по умолчанию)*
* `false` - игнорировать предупреждения связанные с особенностями обычного клиента| -|⤷   `skipSupport`|`Строка`|Этим параметром настраивается режим пропуска файлов *(т.е. файлы не анализируются на предмет наличия замечаний)* **конфигурации 1С**, находящихся "на поддержке" конфигурации поставщика. Возможные значения:
* `withSupport` - пропускаются все модули, находящиеся "на поддержке" *(все виды "замков")*
* `withSupportLocked` - пропускаются только модули, находящиеся "на поддержке" с запретом изменений *("желтый закрытый замок")*
* `never` - режим поддержки не анализируется и модули не пропускаются *(установлен по умолчанию)*| -|⤷   `mode`|`Строка`|Настройка для управления режимом учета настроек диагностик. Возможные варианты:
* `OFF` - Все диагностики считаются выключенными, вне зависимости от их настроек
* `ON` - Все диагностики включенные по умолчанию считаются включенными, остальные - в зависимости от личных настроек
* `EXCEPT` - Все диагностистики, кроме указанных, считаются включенными
* `ONLY` - Только указанные диагностики считаются включенными
* `ALL` - Все диагностики считаются включенными| -|⤷   `parameters`|`JSON-Объект`|Параметр представляет собой коллекцию настроек диагностик. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся ключом диагностики
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение диагностики (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек диагностики.

Ключ, включена ли по умолчанию, а также описание возможных параметров и примеры для конфигурационного файла представлены на странице с описанием каждой диагностики.| -|⤷   `subsystemsFilter`|`JSON-Объект`|Фильтр по подсистемам конфигурации| -|⤷   `analyzeOnStart`|`Булево`|Запустить анализ всего проекта при запуске сервера. Если включено, после построения контекста на клиента будет отправлена информация о диагностиках во всех файлах проекта.| -|   ⤷   `include`|`Массив` `Строка`|Список имен подсистем по объектам которых выполняется анализ, включая подчиненные подсистемы| -|   ⤷   `exclude`|`Массив` `Строка`|Список имен подсистем исключенных из анализа, включая подчиненные подсистемы| -|`documentLink`|`JSON-Объект`|Содержит настройки ссылок на документацию| -|⤷   `showDiagnosticDescription`|`Булево`|Показывать дополнительные ссылки на документацию по диагностикам. По умолчанию параметр выключен (*установлен в `false`*)| -|`useDevSite`|`Булево`|При включении настройки формирующиеся ссылки на документацию будут вести на develop-версию сайта. По умолчанию параметр выключен (*установлен в `false`*)| -|`siteRoot`|`Строка`|Путь к корню сайта с документацией. По умолчанию параметр имеет значение `"https://1c-syntax.github.io/bsl-language-server"` | -|`traceLog`|`Строка`|Для логирования всех запросов *(входящих и исходящих)* между **BSL Language Server** и **Language Client** из используемого редактора/IDE, в этом параметре можно указать путь к файлу лога. Путь можно указывать как абсолютный, так и относительный *(от корня анализируемого проекта)*, по умолчанию значение не заполнено.

**ВНИМАНИЕ**

* При запуске **BSL Language Server** перезаписывает указанный файл
* Скорость взаимодействия между клиентом и сервером **ЗНАЧИТЕЛЬНО ЗАМЕДЛЯЕТСЯ**| -|`configurationRoot`|`Строка`|Данный параметр предназначен для указания корневого каталога, в котором находятся файлы конфигурации 1С в каталоге проекта. Может быть полезен в случае нахождения нескольких каталогов конфигураций в одном каталоге проекта либо при сложной структуре каталога проекта. По умолчанию параметр не заполнен и `BSL Language Server` самостоятельно определяет расположение корневого каталога конфигурации| -|`sendErrors`|`Строка`|Режим отправки сообщений об ошибках разработчикам BSL Language Server. Подробнее - на странице [Мониторинг и отправка ошибок](Monitoring.md). Возможные значения:
* `ask` - спрашивать разрешение при каждой ошибке *(установлен по умолчанию)*.
* `send` - всегда отправлять сообщения об ошибках.
* `never` - никогда не отправлять сообщения об ошибках.| +| Наименование |Тип| Описание | +|:------------------------------------------------------------|:-:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `language` |`Строка`| Этот параметр устанавливает язык отображения диагностированных замечаний. На данный момент поддерживаются два языка:
* `ru` - для русского языка (*используется по умолчанию*)
* `en` - для английского языка | +| `codeLens` |`JSON-Объект`| Содержит настройки отображения `линз` в продвинутых кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация над блоком кода. | +| ⤷   `parameters` |`JSON-Объект`| Коллекция настроек линз. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором линзы
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение линзы (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек линзы. | +|    ⤷   `cognitiveComplexity` |`Булево` или `JSON-Объект`| Включает отображение значения [когнитивной сложности](../diagnostics/CognitiveComplexity.md) метода над его определением. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | +|    ⤷   `cyclomaticComplexity` |`Булево` или `JSON-Объект`| Включает отображение значения [цикломатической сложности](../diagnostics/CyclomaticComplexity.md) метода. По умолчанию настройка установлена в `true`. Доступные параметры линзы: `complexityThreshold` - порог, после которого линза начинает срабатывать. Значение параметра по умолчанию - `-1`. | +| `diagnostics` |`JSON-Объект`| Содержит настройки диагностик | +| ⤷   `computeTrigger` |`Строка`| С помощью этого параметра можно указать событие, при котором будет вызвана процедура анализа кода для диагностирования замечаний. Возможные значения:
* `onType` - при редактировании файла (онлайн) ***на больших файлах может ЗНАЧИТЕЛЬНО замедлять редактирование***
* `onSave` - при сохранении файла (*используется по умолчанию*)
* `never` - анализ выполняться не будет | +| ⤷   `ordinaryAppSupport` |`Булево`| Поддержка обычного клиента. Диагностики будут требовать учитывать особенности обычного приложения. Возможные значения:
* `true` - конфигурация разрабатывается с поддержкой обычного клиента *(установлен по умолчанию)*
* `false` - игнорировать предупреждения связанные с особенностями обычного клиента | +| ⤷   `skipSupport` |`Строка`| Этим параметром настраивается режим пропуска файлов *(т.е. файлы не анализируются на предмет наличия замечаний)* **конфигурации 1С**, находящихся "на поддержке" конфигурации поставщика. Возможные значения:
* `withSupport` - пропускаются все модули, находящиеся "на поддержке" *(все виды "замков")*
* `withSupportLocked` - пропускаются только модули, находящиеся "на поддержке" с запретом изменений *("желтый закрытый замок")*
* `never` - режим поддержки не анализируется и модули не пропускаются *(установлен по умолчанию)* | +| ⤷   `mode` |`Строка`| Настройка для управления режимом учета настроек диагностик. Возможные варианты:
* `OFF` - Все диагностики считаются выключенными, вне зависимости от их настроек
* `ON` - Все диагностики включенные по умолчанию считаются включенными, остальные - в зависимости от личных настроек
* `EXCEPT` - Все диагностистики, кроме указанных, считаются включенными
* `ONLY` - Только указанные диагностики считаются включенными
* `ALL` - Все диагностики считаются включенными | +| ⤷   `parameters` |`JSON-Объект`| Параметр представляет собой коллекцию настроек диагностик. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся ключом диагностики
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение диагностики (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек диагностики.

Ключ, включена ли по умолчанию, а также описание возможных параметров и примеры для конфигурационного файла представлены на странице с описанием каждой диагностики. | +| ⤷   `subsystemsFilter` |`JSON-Объект`| Фильтр по подсистемам конфигурации | +| ⤷   `analyzeOnStart` |`Булево`| Запустить анализ всего проекта при запуске сервера. Если включено, после построения контекста на клиента будет отправлена информация о диагностиках во всех файлах проекта. | +|    ⤷   `include` |`Массив` `Строка`| Список имен подсистем по объектам которых выполняется анализ, включая подчиненные подсистемы | +|    ⤷   `exclude` |`Массив` `Строка`| Список имен подсистем исключенных из анализа, включая подчиненные подсистемы | +| `documentLink` |`JSON-Объект`| Содержит настройки ссылок на документацию | +| ⤷   `showDiagnosticDescription` |`Булево`| Показывать дополнительные ссылки на документацию по диагностикам. По умолчанию параметр выключен (*установлен в `false`*) | +| `inlayHint` |`JSON-Объект`| Содержит настройки отображения `inlay hints` в продвинутых редакторах кода/IDE *(например [Visual Studio Code](https://code.visualstudio.com/))*, в которых выводится различная информация прямо в строке с кодом. | +| ⤷   `parameters` |`JSON-Объект`| Коллекция настроек inlay hints. Элементами коллекции являются json-объекты следующей структуры:
* *ключ объекта* - строка, являющаяся идентификатором inlay hint
* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение inlay hint (`false`) или их включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек inlay hint. | +| `useDevSite` |`Булево`| При включении настройки формирующиеся ссылки на документацию будут вести на develop-версию сайта. По умолчанию параметр выключен (*установлен в `false`*) | +| `siteRoot` |`Строка`| Путь к корню сайта с документацией. По умолчанию параметр имеет значение `"https://1c-syntax.github.io/bsl-language-server"` | +| `traceLog` |`Строка`| Для логирования всех запросов *(входящих и исходящих)* между **BSL Language Server** и **Language Client** из используемого редактора/IDE, в этом параметре можно указать путь к файлу лога. Путь можно указывать как абсолютный, так и относительный *(от корня анализируемого проекта)*, по умолчанию значение не заполнено.

**ВНИМАНИЕ**

* При запуске **BSL Language Server** перезаписывает указанный файл
* Скорость взаимодействия между клиентом и сервером **ЗНАЧИТЕЛЬНО ЗАМЕДЛЯЕТСЯ** | +| `configurationRoot` |`Строка`| Данный параметр предназначен для указания корневого каталога, в котором находятся файлы конфигурации 1С в каталоге проекта. Может быть полезен в случае нахождения нескольких каталогов конфигураций в одном каталоге проекта либо при сложной структуре каталога проекта. По умолчанию параметр не заполнен и `BSL Language Server` самостоятельно определяет расположение корневого каталога конфигурации | +| `sendErrors` |`Строка`| Режим отправки сообщений об ошибках разработчикам BSL Language Server. Подробнее - на странице [Мониторинг и отправка ошибок](Monitoring.md). Возможные значения:
* `ask` - спрашивать разрешение при каждой ошибке *(установлен по умолчанию)*.
* `send` - всегда отправлять сообщения об ошибках.
* `never` - никогда не отправлять сообщения об ошибках. | Для облегчения составления и редактирования конфигурационного файла можно использовать следующую JSON-схему: From af8e0b10accdd3b3f6aab0e63dfe550b3b3d3c3f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 13 Apr 2023 16:22:52 +0200 Subject: [PATCH 11/11] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86?= =?UTF-8?q?=D1=8B=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/index.md b/docs/index.md index a6e0216b65b..c476360630e 100644 --- a/docs/index.md +++ b/docs/index.md @@ -112,6 +112,9 @@ | [semanticTokens](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens) | no | | | | [linkedEditingRange](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_linkedEditingRange) | no | | | | [moniker](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_moniker) | no | | | + | [inlayHint](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_inlayHint) | yes | resolveProvider = false | да | + | [inlayHint/resolve](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#inlayHint_resolve) | no | | | + | [inlayHint/refresh](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_inlayHint_refresh) | yes | | |