Skip to content

Commit

Permalink
Параметры inlay hints, поддержка inlayhint/refresh
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Apr 1, 2023
1 parent 6372e30 commit 6b93c56
Show file tree
Hide file tree
Showing 5 changed files with 225 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* This file is a part of BSL Language Server.
*
* Copyright (c) 2018-2023
* Alexey Sosnoviy <labotamy@gmail.com>, Nikita Fedkin <nixel2007@gmail.com> 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<String, Either<Boolean, Map<String, Object>>> parameters = new HashMap<>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* This file is a part of BSL Language Server.
*
* Copyright (c) 2018-2023
* Alexey Sosnoviy <labotamy@gmail.com>, Nikita Fedkin <nixel2007@gmail.com> 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;
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/*
* This file is a part of BSL Language Server.
*
* Copyright (c) 2018-2023
* Alexey Sosnoviy <labotamy@gmail.com>, Nikita Fedkin <nixel2007@gmail.com> 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<String, CodeLensSupplier<CodeLensData>> codeLensSuppliersById(
Collection<CodeLensSupplier<? extends CodeLensData>> codeLensSuppliers
) {
return codeLensSuppliers.stream()
.map(codeLensSupplier -> (CodeLensSupplier<CodeLensData>) codeLensSupplier)
.collect(Collectors.toMap(CodeLensSupplier::getId, Function.identity()));
}

/**
* Получить список активированных в данный момент сапплаеров линз.
*
* @param configuration Конфигурация сервера.
* @param codeLensSuppliersById Список сапплаеров линз в разрезе из идентификаторов.
* @return Список активированных в данный момент сапплаеров линз.
*/
@Bean
@Scope(SCOPE_PROTOTYPE)
public List<CodeLensSupplier<CodeLensData>> enabledCodeLensSuppliers(
LanguageServerConfiguration configuration,
@Qualifier("codeLensSuppliersById") Map<String, CodeLensSupplier<CodeLensData>> 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<String, Either<Boolean, Map<String, Object>>> parameters
) {
var supplierConfig = parameters.getOrDefault(supplierId, Either.forLeft(true));
return supplierConfig.isRight() || supplierConfig.getLeft();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* This file is a part of BSL Language Server.
*
* Copyright (c) 2018-2023
* Alexey Sosnoviy <labotamy@gmail.com>, Nikita Fedkin <nixel2007@gmail.com> 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;
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* This file is a part of BSL Language Server.
*
* Copyright (c) 2018-2023
* Alexey Sosnoviy <labotamy@gmail.com>, Nikita Fedkin <nixel2007@gmail.com> 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;

0 comments on commit 6b93c56

Please sign in to comment.