Search in sources :

Example 11 with Diagnostics

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

the class AbstractDiagnosticTest method getQuickFixes.

protected List<CodeAction> getQuickFixes(Range range) {
    DocumentContext documentContext = getDocumentContext();
    List<Diagnostic> diagnostics = this.diagnosticInstance.getDiagnostics(documentContext);
    return getQuickFixes(documentContext, diagnostics, range);
}
Also used : Diagnostic(org.eclipse.lsp4j.Diagnostic) DocumentContext(com.github._1c_syntax.bsl.languageserver.context.DocumentContext)

Example 12 with Diagnostics

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

the class ConsecutiveEmptyLinesDiagnosticTest method checkQuickFixes.

private void checkQuickFixes(String module, boolean haveFix) {
    final DocumentContext documentContext = TestUtils.getDocumentContext(module);
    List<Diagnostic> diagnostics = getDiagnostics(documentContext);
    diagnostics.forEach(diagnostic -> checkFix(documentContext, diagnostic, haveFix));
}
Also used : Diagnostic(org.eclipse.lsp4j.Diagnostic) DocumentContext(com.github._1c_syntax.bsl.languageserver.context.DocumentContext)

Example 13 with Diagnostics

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

the class DeprecatedTypeManagedFormDiagnosticTest method testQuickFix.

@Test
void testQuickFix() {
    final DocumentContext documentContext = getDocumentContext();
    List<Diagnostic> diagnostics = getDiagnostics();
    final Diagnostic ruDiagnostic = diagnostics.get(0);
    List<CodeAction> quickFixes = getQuickFixes(ruDiagnostic);
    assertThat(quickFixes).hasSize(1);
    final CodeAction quickFix = quickFixes.get(0);
    assertThat(quickFix).of(diagnosticInstance).in(documentContext).fixes(ruDiagnostic);
    assertThat(quickFix).in(documentContext).hasChanges(1).hasNewText("\"ФормаКлиентскогоПриложения\"");
}
Also used : CodeAction(org.eclipse.lsp4j.CodeAction) Diagnostic(org.eclipse.lsp4j.Diagnostic) DocumentContext(com.github._1c_syntax.bsl.languageserver.context.DocumentContext) Test(org.junit.jupiter.api.Test)

Example 14 with Diagnostics

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

the class AnalyzeCommand method getFileInfoFromFile.

private FileInfo getFileInfoFromFile(Path srcDir, File file) {
    String textDocumentContent;
    try {
        textDocumentContent = FileUtils.readFileToString(file, StandardCharsets.UTF_8);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    DocumentContext documentContext = context.addDocument(file.toURI(), textDocumentContent, 1);
    Path filePath = srcDir.relativize(Absolute.path(file));
    List<Diagnostic> diagnostics = documentContext.getDiagnostics();
    MetricStorage metrics = documentContext.getMetrics();
    String mdoRef = "";
    Optional<AbstractMDObjectBase> mdObjectBase = documentContext.getMdObject();
    if (mdObjectBase.isPresent()) {
        mdoRef = mdObjectBase.get().getMdoReference().getMdoRef();
    }
    FileInfo fileInfo = new FileInfo(filePath, mdoRef, diagnostics, metrics);
    // clean up AST after diagnostic computing to free up RAM.
    documentContext.clearSecondaryData();
    return fileInfo;
}
Also used : Path(java.nio.file.Path) FileInfo(com.github._1c_syntax.bsl.languageserver.reporters.data.FileInfo) AbstractMDObjectBase(com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase) MetricStorage(com.github._1c_syntax.bsl.languageserver.context.MetricStorage) Diagnostic(org.eclipse.lsp4j.Diagnostic) IOException(java.io.IOException) DocumentContext(com.github._1c_syntax.bsl.languageserver.context.DocumentContext)

Example 15 with Diagnostics

use of com.github._1c_syntax.bsl.languageserver.jsonrpc.Diagnostics 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;
}
Also used : ActiveRule(org.sonar.api.batch.rule.ActiveRule) Arrays(java.util.Arrays) Language(com.github._1c_syntax.bsl.languageserver.configuration.Language) Token(org.antlr.v4.runtime.Token) ActiveRules(org.sonar.api.batch.rule.ActiveRules) StringUtils(org.apache.commons.lang3.StringUtils) FilePredicates(org.sonar.api.batch.fs.FilePredicates) Absolute(com.github._1c_syntax.utils.Absolute) FileLinesContext(org.sonar.api.measures.FileLinesContext) FileLinesContextFactory(org.sonar.api.measures.FileLinesContextFactory) Loggers(org.sonar.api.utils.log.Loggers) LanguageServerConfiguration(com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration) Locale(java.util.Locale) Map(java.util.Map) Either(org.eclipse.lsp4j.jsonrpc.messages.Either) URI(java.net.URI) MetricStorage(com.github._1c_syntax.bsl.languageserver.context.MetricStorage) Path(java.nio.file.Path) ServerContext(com.github._1c_syntax.bsl.languageserver.context.ServerContext) DiagnosticInfo(com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo) Collection(java.util.Collection) FileSystem(org.sonar.api.batch.fs.FileSystem) SensorContext(org.sonar.api.batch.sensor.SensorContext) Collectors(java.util.stream.Collectors) CoreMetrics(org.sonar.api.measures.CoreMetrics) StandardCharsets(java.nio.charset.StandardCharsets) SensorDescriptor(org.sonar.api.batch.sensor.SensorDescriptor) IOUtils(org.apache.commons.io.IOUtils) List(java.util.List) RuleKey(org.sonar.api.rule.RuleKey) SkipSupport(com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.SkipSupport) ProgressBarBuilder(me.tongfei.progressbar.ProgressBarBuilder) InputFile(org.sonar.api.batch.fs.InputFile) Sensor(org.sonar.api.batch.sensor.Sensor) HashMap(java.util.HashMap) DocumentContext(com.github._1c_syntax.bsl.languageserver.context.DocumentContext) BSLLSBinding(com.github._1c_syntax.bsl.languageserver.BSLLSBinding) BSLLanguage(com.github._1c_syntax.bsl.sonar.language.BSLLanguage) ArrayList(java.util.ArrayList) StreamSupport(java.util.stream.StreamSupport) Logger(org.sonar.api.utils.log.Logger) ProgressBar(me.tongfei.progressbar.ProgressBar) BSLLexer(com.github._1c_syntax.bsl.parser.BSLLexer) IOException(java.io.IOException) File(java.io.File) ProgressBarStyle(me.tongfei.progressbar.ProgressBarStyle) DiagnosticParameterInfo(com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameterInfo) BSLLanguageServerRuleDefinition(com.github._1c_syntax.bsl.sonar.language.BSLLanguageServerRuleDefinition) Collections(java.util.Collections) HashMap(java.util.HashMap) DiagnosticInfo(com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo) ActiveRule(org.sonar.api.batch.rule.ActiveRule) DiagnosticParameterInfo(com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameterInfo) SkipSupport(com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.SkipSupport) ActiveRules(org.sonar.api.batch.rule.ActiveRules) Either(org.eclipse.lsp4j.jsonrpc.messages.Either) InputFile(org.sonar.api.batch.fs.InputFile) File(java.io.File)

Aggregations

DocumentContext (com.github._1c_syntax.bsl.languageserver.context.DocumentContext)25 Diagnostic (org.eclipse.lsp4j.Diagnostic)24 Test (org.junit.jupiter.api.Test)19 CodeAction (org.eclipse.lsp4j.CodeAction)8 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)7 Path (java.nio.file.Path)6 ArrayList (java.util.ArrayList)6 List (java.util.List)6 LanguageServerConfiguration (com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration)5 DiagnosticInfo (com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo)5 Collectors (java.util.stream.Collectors)5 SneakyThrows (lombok.SneakyThrows)5 Collections (java.util.Collections)4 Range (org.eclipse.lsp4j.Range)4 Either (org.eclipse.lsp4j.jsonrpc.messages.Either)4 TestUtils (com.github._1c_syntax.bsl.languageserver.util.TestUtils)3 Collection (java.util.Collection)3 Map (java.util.Map)3 CodeActionParams (org.eclipse.lsp4j.CodeActionParams)3 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)2