use of com.github._1c_syntax.bsl.languageserver.jsonrpc.Diagnostics in project bsl-language-server by 1c-syntax.
the class DiagnosticsConfiguration method diagnostics.
@Bean
@Scope("prototype")
public List<BSLDiagnostic> diagnostics(DocumentContext documentContext) {
Collection<DiagnosticInfo> diagnosticInfos = diagnosticInfos();
DiagnosticsOptions diagnosticsOptions = configuration.getDiagnosticsOptions();
if (needToComputeDiagnostics(documentContext, diagnosticsOptions)) {
FileType fileType = documentContext.getFileType();
CompatibilityMode compatibilityMode = documentContext.getServerContext().getConfiguration().getCompatibilityMode();
ModuleType moduleType = documentContext.getModuleType();
return diagnosticInfos.stream().filter(diagnosticInfo -> isEnabled(diagnosticInfo, diagnosticsOptions)).filter(info -> inScope(info, fileType)).filter(info -> correctModuleType(info, moduleType, fileType)).filter(info -> passedCompatibilityMode(info, compatibilityMode)).map(DiagnosticInfo::getDiagnosticClass).map(diagnosticObjectProvider::get).collect(Collectors.toList());
} else {
return Collections.emptyList();
}
}
use of com.github._1c_syntax.bsl.languageserver.jsonrpc.Diagnostics in project bsl-language-server by 1c-syntax.
the class CodeActionProviderTest method testGetCodeActions.
@Test
void testGetCodeActions() {
// given
DiagnosticInfo diagnosticInfo = new DiagnosticInfo(CanonicalSpellingKeywordsDiagnostic.class, configuration);
DiagnosticCode diagnosticCode = diagnosticInfo.getCode();
List<Diagnostic> diagnostics = documentContext.getDiagnostics().stream().filter(diagnostic -> diagnostic.getCode().equals(diagnosticCode)).peek(diagnostic -> diagnostic.setTags(null)).collect(Collectors.toList());
CodeActionParams params = new CodeActionParams();
TextDocumentIdentifier textDocumentIdentifier = new TextDocumentIdentifier(documentContext.getUri().toString());
CodeActionContext codeActionContext = new CodeActionContext();
codeActionContext.setDiagnostics(diagnostics);
params.setRange(new Range());
params.setTextDocument(textDocumentIdentifier);
params.setContext(codeActionContext);
// when
List<Either<Command, CodeAction>> codeActions = codeActionProvider.getCodeActions(params, documentContext);
// then
assertThat(codeActions).extracting(Either::getRight).hasSizeGreaterThanOrEqualTo(3).anyMatch(codeAction -> codeAction.getDiagnostics().contains(diagnostics.get(0))).anyMatch(codeAction -> codeAction.getDiagnostics().contains(diagnostics.get(1))).anyMatch(codeAction -> codeAction.getKind().equals(CodeActionKind.QuickFix)).allMatch(codeAction -> (codeAction.getDiagnostics().size() == 1) == toBoolean(codeAction.getIsPreferred()));
}
use of com.github._1c_syntax.bsl.languageserver.jsonrpc.Diagnostics in project bsl-language-server by 1c-syntax.
the class DiagnosticProviderTest method testComputeDiagnostics.
@Test
void testComputeDiagnostics() {
// given
// TODO: это тест на новый getDiagnostics, а не на DiagnosticProvider
final DocumentContext documentContext = TestUtils.getDocumentContextFromFile("./src/test/resources/providers/diagnosticProvider.bsl");
// when
final List<Diagnostic> diagnostics = documentContext.getDiagnostics();
// then
assertThat(diagnostics.size()).isPositive();
}
use of com.github._1c_syntax.bsl.languageserver.jsonrpc.Diagnostics in project bsl-language-server by 1c-syntax.
the class GenericReporterTest method report.
@Test
void report() throws IOException {
// given
List<Diagnostic> diagnostics = new ArrayList<>();
var iterator = diagnosticInfos.entrySet().iterator();
var firstInfo = iterator.next().getValue();
var secondInfo = iterator.next().getValue();
diagnostics.add(new Diagnostic(Ranges.create(0, 1, 2, 3), "message", DiagnosticSeverity.Error, "test-source", firstInfo.getCode().getStringValue()));
diagnostics.add(new Diagnostic(Ranges.create(0, 1, 2, 4), "message4", DiagnosticSeverity.Error, "test-source2", firstInfo.getCode().getStringValue()));
diagnostics.add(new Diagnostic(Ranges.create(3, 1, 4, 4), "message4", DiagnosticSeverity.Error, "test-source2", secondInfo.getCode().getStringValue()));
DocumentContext documentContext = TestUtils.getDocumentContext("");
Location location = new Location("file:///fake-uri2.bsl", Ranges.create(0, 2, 2, 3));
diagnostics.get(0).setRelatedInformation(Collections.singletonList(new DiagnosticRelatedInformation(location, "message")));
String sourceDir = ".";
FileInfo fileInfo = new FileInfo(sourceDir, documentContext, diagnostics);
AnalysisInfo analysisInfo = new AnalysisInfo(LocalDateTime.now(), Collections.singletonList(fileInfo), sourceDir);
// when
reporter.report(analysisInfo, Path.of(sourceDir));
// then
ObjectMapper mapper = new ObjectMapper();
GenericIssueReport report = mapper.readValue(file, GenericIssueReport.class);
assertThat(report).isNotNull();
assertThat(report.getIssues()).isNotNull();
assertThat(report.getIssues().size()).isEqualTo(3);
assertThat(report.getIssues().get(0).getPrimaryLocation()).isNotNull();
assertThat(report.getIssues().get(0).getSecondaryLocations()).isNotNull();
assertThat(report.getIssues().get(0).getSecondaryLocations().size()).isEqualTo(1);
assertThat(report.getIssues().get(2).getRuleId()).isEqualTo(secondInfo.getCode().getStringValue());
assertThat(report.getIssues().get(1).getSeverity()).isEqualTo(firstInfo.getSeverity().name());
}
use of com.github._1c_syntax.bsl.languageserver.jsonrpc.Diagnostics in project bsl-language-server by 1c-syntax.
the class SmokyTest method testIAllDiagnostics.
@SneakyThrows
@Test
void testIAllDiagnostics() {
// прочитаем все файлы ресурсов
var srcDir = "./src/test/resources/";
var fixtures = FileUtils.listFiles(new File(srcDir), new String[] { "bsl", "os" }, true);
// получим все возможные коды диагностик и положим в мапу "включенным"
Map<String, Either<Boolean, Map<String, Object>>> diagnostics = diagnosticInfos.stream().map(DiagnosticInfo::getCode).collect(Collectors.toMap(diagnosticCode -> diagnosticCode.getStringValue(), diagnosticCode -> Either.forLeft(true), (a, b) -> b));
// создадим новый конфиг, в котором включим все диагностики
configuration.getDiagnosticsOptions().setParameters(diagnostics);
// для каждой фикстуры расчитаем диагностики
// если упадет, запомним файл и текст ошибки
Map<File, Exception> diagnosticErrors = new HashMap<>();
fixtures.forEach(filePath -> {
try {
var documentContext = TestUtils.getDocumentContextFromFile(filePath.toString());
documentContext.getDiagnostics();
} catch (Exception e) {
diagnosticErrors.put(filePath, e);
}
});
assertThat(diagnosticErrors).isEmpty();
}
Aggregations