use of com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration in project sonar-bsl-plugin-community by 1c-syntax.
the class BSLCoreSensor method execute.
@Override
public void execute(SensorContext context) {
LOGGER.info("Parsing files...");
FileSystem fileSystem = context.fileSystem();
File baseDir = fileSystem.baseDir();
var absoluteSourceDirs = sourcesList.stream().map((String sourceDir) -> {
Path sourcePath = Path.of(sourceDir.trim());
if (sourcePath.isAbsolute()) {
return sourcePath;
} else {
return Path.of(baseDir.toString(), sourceDir);
}
}).map(Absolute::path).collect(Collectors.toList());
FilePredicates predicates = fileSystem.predicates();
Iterable<InputFile> inputFiles = fileSystem.inputFiles(predicates.hasLanguage(BSLLanguage.KEY));
Map<Path, List<InputFile>> inputFilesByPath = StreamSupport.stream(inputFiles.spliterator(), true).collect(Collectors.groupingBy((InputFile inputFile) -> {
var filePath = Absolute.path(inputFile.uri());
return absoluteSourceDirs.stream().filter(filePath::startsWith).findAny().orElse(baseDir.toPath());
}));
LanguageServerConfiguration languageServerConfiguration = getLanguageServerConfiguration();
inputFilesByPath.forEach((Path sourceDir, List<InputFile> inputFilesList) -> {
LOGGER.info("Source dir: {}", sourceDir);
Path configurationRoot = LanguageServerConfiguration.getCustomConfigurationRoot(languageServerConfiguration, sourceDir);
var bslServerContext = BSLLSBinding.getServerContext();
bslServerContext.setConfigurationRoot(configurationRoot);
bslServerContext.populateContext();
try (ProgressBar pb = new ProgressBarBuilder().setTaskName("").setInitialMax(inputFilesList.size()).setStyle(ProgressBarStyle.ASCII).build()) {
inputFilesList.parallelStream().forEach((InputFile inputFile) -> {
URI uri = inputFile.uri();
LOGGER.debug(uri.toString());
pb.step();
processFile(inputFile, bslServerContext);
});
}
bslServerContext.clear();
});
BSLLSBinding.getApplicationContext().close();
}
use of com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration in project sonar-bsl-plugin-community by 1c-syntax.
the class BSLCoreSensor method getLanguageServerConfiguration.
private LanguageServerConfiguration getLanguageServerConfiguration() {
boolean overrideConfiguration = context.config().get(BSLCommunityProperties.LANG_SERVER_OVERRIDE_CONFIGURATION_KEY).map(Boolean::parseBoolean).orElse(BSLCommunityProperties.LANG_SERVER_OVERRIDE_CONFIGURATION_DEFAULT_VALUE);
var configuration = BSLLSBinding.getLanguageServerConfiguration();
if (overrideConfiguration) {
String configurationPath = context.config().get(BSLCommunityProperties.LANG_SERVER_CONFIGURATION_PATH_KEY).orElse(BSLCommunityProperties.LANG_SERVER_CONFIGURATION_PATH_DEFAULT_VALUE);
File configurationFile = new File(configurationPath);
if (configurationFile.exists()) {
LOGGER.info("BSL LS configuration file exists. Overriding SonarQube rules' settings...");
configuration.update(configurationFile);
return configuration;
} else {
LOGGER.error("Can't find bsl configuration file {}. Using SonarQube config instead.", configurationPath);
}
}
String diagnosticLanguageCode = context.config().get(BSLCommunityProperties.LANG_SERVER_DIAGNOSTIC_LANGUAGE_KEY).orElse(BSLCommunityProperties.LANG_SERVER_DIAGNOSTIC_LANGUAGE_DEFAULT_VALUE);
configuration.setLanguage(Language.valueOf(diagnosticLanguageCode.toUpperCase(Locale.ENGLISH)));
SkipSupport skipSupport = context.config().get(BSLCommunityProperties.LANG_SERVER_COMPUTE_DIAGNOSTICS_SKIP_SUPPORT_KEY).map(value -> value.toUpperCase(Locale.ENGLISH).replace(" ", "_")).map(SkipSupport::valueOf).orElse(SkipSupport.valueOf(BSLCommunityProperties.LANG_SERVER_COMPUTE_DIAGNOSTICS_SKIP_SUPPORT_DEFAULT_VALUE.toUpperCase(Locale.ENGLISH)));
configuration.getDiagnosticsOptions().setSkipSupport(skipSupport);
ActiveRules activeRules = context.activeRules();
Map<String, Either<Boolean, Map<String, Object>>> diagnostics = new HashMap<>();
Collection<DiagnosticInfo> diagnosticInfos = BSLLSBinding.getDiagnosticInfos();
for (DiagnosticInfo diagnosticInfo : diagnosticInfos) {
String diagnosticCode = diagnosticInfo.getCode().getStringValue();
ActiveRule activeRule = activeRules.find(RuleKey.of(BSLLanguageServerRuleDefinition.REPOSITORY_KEY, diagnosticCode));
if (activeRule == null) {
diagnostics.put(diagnosticCode, Either.forLeft(false));
} else {
Map<String, String> params = activeRule.params();
List<DiagnosticParameterInfo> diagnosticParameters = diagnosticInfo.getParameters();
Map<String, Object> diagnosticConfiguration = new HashMap<>(diagnosticParameters.size());
params.forEach((String key, String value) -> diagnosticInfo.getParameter(key).ifPresent(diagnosticParameterInfo -> diagnosticConfiguration.put(key, castDiagnosticParameterValue(value, diagnosticParameterInfo.getType()))));
diagnostics.put(diagnosticCode, Either.forRight(diagnosticConfiguration));
}
}
configuration.getDiagnosticsOptions().setParameters(diagnostics);
return configuration;
}
Aggregations