use of com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.SkipSupport 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