Search in sources :

Example 6 with Regions

use of com.github._1c_syntax.bsl.languageserver.utils.Regions in project bsl-language-server by 1c-syntax.

the class GenerateStandardRegionsSupplier method getCodeActions.

/**
 * При необходимости создает {@code CodeAction} для генерации отсутствующих
 * стандартных областей 1С
 *
 * @param params          параметры вызова генерации {@code codeAction}
 * @param documentContext представление программного модуля
 * @return {@code List<CodeAction>} если модуль не содержит всех стандартных областей,
 * пустой {@code List} если генерация областей не требуется
 */
@Override
public List<CodeAction> getCodeActions(CodeActionParams params, DocumentContext documentContext) {
    ModuleType moduleType = documentContext.getModuleType();
    FileType fileType = documentContext.getFileType();
    ScriptVariant regionsLanguage = getRegionsLanguage(documentContext, fileType);
    Set<String> neededStandardRegions;
    if (fileType == FileType.BSL) {
        neededStandardRegions = Regions.getStandardRegionsNamesByModuleType(moduleType, regionsLanguage);
    } else {
        neededStandardRegions = Regions.getOneScriptStandardRegions(regionsLanguage);
    }
    Set<String> documentRegionsNames = documentContext.getSymbolTree().getModuleLevelRegions().stream().map(RegionSymbol::getName).collect(Collectors.toSet());
    neededStandardRegions.removeAll(documentRegionsNames);
    if (neededStandardRegions.isEmpty()) {
        return Collections.emptyList();
    }
    String regionFormat = regionsLanguage == ScriptVariant.ENGLISH ? "#Region %s%n%n#EndRegion%n" : "#Область %s%n%n#КонецОбласти%n";
    String result = neededStandardRegions.stream().map(s -> String.format(regionFormat, s)).collect(Collectors.joining("\n"));
    TextEdit textEdit = new TextEdit(calculateFixRange(params.getRange()), result);
    WorkspaceEdit edit = new WorkspaceEdit();
    Map<String, List<TextEdit>> changes = Map.of(documentContext.getUri().toString(), Collections.singletonList(textEdit));
    edit.setChanges(changes);
    CodeAction codeAction = new CodeAction("Generate missing regions");
    codeAction.setDiagnostics(new ArrayList<>());
    codeAction.setKind(CodeActionKind.Refactor);
    codeAction.setEdit(edit);
    return List.of(codeAction);
}
Also used : ScriptVariant(com.github._1c_syntax.mdclasses.mdo.support.ScriptVariant) Language(com.github._1c_syntax.bsl.languageserver.configuration.Language) Range(org.eclipse.lsp4j.Range) DocumentContext(com.github._1c_syntax.bsl.languageserver.context.DocumentContext) Regions(com.github._1c_syntax.bsl.languageserver.utils.Regions) FileType(com.github._1c_syntax.bsl.languageserver.context.FileType) ArrayList(java.util.ArrayList) RegionSymbol(com.github._1c_syntax.bsl.languageserver.context.symbol.RegionSymbol) Configuration(com.github._1c_syntax.mdclasses.Configuration) CodeActionParams(org.eclipse.lsp4j.CodeActionParams) TextEdit(org.eclipse.lsp4j.TextEdit) LanguageServerConfiguration(com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration) ConfigurationSource(com.github._1c_syntax.mdclasses.common.ConfigurationSource) Map(java.util.Map) Position(org.eclipse.lsp4j.Position) CodeAction(org.eclipse.lsp4j.CodeAction) Set(java.util.Set) ModuleType(com.github._1c_syntax.mdclasses.mdo.support.ModuleType) Collectors(java.util.stream.Collectors) Component(org.springframework.stereotype.Component) List(java.util.List) WorkspaceEdit(org.eclipse.lsp4j.WorkspaceEdit) CodeActionKind(org.eclipse.lsp4j.CodeActionKind) NotNull(org.jetbrains.annotations.NotNull) Collections(java.util.Collections) ModuleType(com.github._1c_syntax.mdclasses.mdo.support.ModuleType) FileType(com.github._1c_syntax.bsl.languageserver.context.FileType) TextEdit(org.eclipse.lsp4j.TextEdit) CodeAction(org.eclipse.lsp4j.CodeAction) ScriptVariant(com.github._1c_syntax.mdclasses.mdo.support.ScriptVariant) WorkspaceEdit(org.eclipse.lsp4j.WorkspaceEdit) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

DocumentContext (com.github._1c_syntax.bsl.languageserver.context.DocumentContext)5 List (java.util.List)5 ArrayList (java.util.ArrayList)4 RegionSymbol (com.github._1c_syntax.bsl.languageserver.context.symbol.RegionSymbol)3 Range (org.eclipse.lsp4j.Range)3 Test (org.junit.jupiter.api.Test)3 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)3 TestUtils (com.github._1c_syntax.bsl.languageserver.util.TestUtils)2 Ranges (com.github._1c_syntax.bsl.languageserver.utils.Ranges)2 Map (java.util.Map)2 Collectors (java.util.stream.Collectors)2 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)2 CodeAction (org.eclipse.lsp4j.CodeAction)2 CodeActionParams (org.eclipse.lsp4j.CodeActionParams)2 Autowired (org.springframework.beans.factory.annotation.Autowired)2 Language (com.github._1c_syntax.bsl.languageserver.configuration.Language)1 LanguageServerConfiguration (com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration)1 FileType (com.github._1c_syntax.bsl.languageserver.context.FileType)1 MethodSymbol (com.github._1c_syntax.bsl.languageserver.context.symbol.MethodSymbol)1 ModuleSymbol (com.github._1c_syntax.bsl.languageserver.context.symbol.ModuleSymbol)1