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);
}
Aggregations