From 6b93c56a713812d5687cd6f213d4720b09ef1289 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Sat, 1 Apr 2023 22:30:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D1=80=D1=8B=20inlay=20hints,=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5?= =?UTF-8?q?=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 --- .../inlayhints/InlayHintsOptions.java | 50 +++++++++++ .../inlayhints/package-info.java | 25 ++++++ .../InlayHintsConfiguration.java | 90 +++++++++++++++++++ .../infrastructure/package-info.java | 30 +++++++ .../inlayhints/package-info.java | 30 +++++++ 5 files changed, 225 insertions(+) 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/inlayhints/InlayHintsOptions.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/InlayHintsOptions.java new file mode 100644 index 00000000000..6eea758ab01 --- /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.CodeLensProvider} + */ +@Data +@AllArgsConstructor(onConstructor = @__({@JsonCreator(mode = JsonCreator.Mode.DISABLED)})) +@NoArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +public class CodeLensOptions { + + /** + * Параметры сапплаеров линз. + */ + @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..83d6eafb0c6 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/inlayhints/package-info.java @@ -0,0 +1,25 @@ +/* + * 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.CodeLensProvider} + */ +package com.github._1c_syntax.bsl.languageserver.configuration.codelens; 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..cbcfc32480d --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/inlayhints/infrastructure/InlayHintsConfiguration.java @@ -0,0 +1,90 @@ +/* + * 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.codelenses.infrastructure; + +import com.github._1c_syntax.bsl.languageserver.codelenses.CodeLensData; +import com.github._1c_syntax.bsl.languageserver.codelenses.CodeLensSupplier; +import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration; +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.codelenses}. + */ +@Configuration +public class CodeLensesConfiguration { + + /** + * Получить список сапплаеров линз в разрезе их идентификаторов. + * + * @param codeLensSuppliers Плоский список сапплаеров. + * @return Список сапплаеров линз в разрезе их идентификаторов. + */ + @Bean + @SuppressWarnings("unchecked") + public Map> codeLensSuppliersById( + Collection> codeLensSuppliers + ) { + return codeLensSuppliers.stream() + .map(codeLensSupplier -> (CodeLensSupplier) codeLensSupplier) + .collect(Collectors.toMap(CodeLensSupplier::getId, Function.identity())); + } + + /** + * Получить список активированных в данный момент сапплаеров линз. + * + * @param configuration Конфигурация сервера. + * @param codeLensSuppliersById Список сапплаеров линз в разрезе из идентификаторов. + * @return Список активированных в данный момент сапплаеров линз. + */ + @Bean + @Scope(SCOPE_PROTOTYPE) + public List> enabledCodeLensSuppliers( + LanguageServerConfiguration configuration, + @Qualifier("codeLensSuppliersById") Map> codeLensSuppliersById + ) { + var parameters = configuration.getCodeLensOptions().getParameters(); + return codeLensSuppliersById.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..d9346663ff3 --- /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.codelenses}. + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.codelenses.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..748bdbca505 --- /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. + */ +/** + * Пакет предназначен для реализации команд, + * используемых {@link com.github._1c_syntax.bsl.languageserver.providers.CommandProvider}. + */ +@DefaultAnnotation(NonNull.class) +package com.github._1c_syntax.bsl.languageserver.commands; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull;