|
2 | 2 | import java.util.ArrayList; |
3 | 3 | import java.util.Collections; |
4 | 4 | import java.util.List; |
| 5 | +import java.util.Map; |
| 6 | +import java.util.stream.Collectors; |
5 | 7 | import org.eclipse.lsp4j.Diagnostic; |
6 | 8 | import org.eclipse.lsp4j.DiagnosticSeverity; |
7 | 9 | import org.eclipse.lsp4j.Position; |
@@ -54,13 +56,21 @@ public static List<PublishDiagnosticsParams> generateDiagnostics(String uri) { |
54 | 56 | */ |
55 | 57 | public static List<PublishDiagnosticsParams> getDiagnostics(List<LJDiagnostic> diagnostics, |
56 | 58 | DiagnosticSeverity severity) { |
57 | | - return diagnostics.stream().map(d -> { |
58 | | - String filePath = FILE_PREFIX + d.getFile(); |
59 | | - Range range = getRangeFromErrorPosition(d.getPosition()); |
60 | | - String message = String.format("%s: %s", d.getTitle(), d.getMessage()); |
61 | | - Diagnostic diagnostic = new Diagnostic(range, message, severity, SOURCE); |
62 | | - return new PublishDiagnosticsParams(filePath, List.of(diagnostic)); |
63 | | - }).toList(); |
| 59 | + // group diagnostics by file |
| 60 | + Map<String, List<Diagnostic>> diagnosticsByFile = diagnostics.stream() |
| 61 | + .collect(Collectors.groupingBy( |
| 62 | + d -> FILE_PREFIX + d.getFile(), |
| 63 | + Collectors.mapping(d -> { |
| 64 | + Range range = getRangeFromErrorPosition(d.getPosition()); |
| 65 | + String message = String.format("%s: %s", d.getTitle(), d.getMessage()); |
| 66 | + return new Diagnostic(range, message, severity, SOURCE); |
| 67 | + }, Collectors.toList()) |
| 68 | + )); |
| 69 | + |
| 70 | + // create a PublishDiagnosticsParams per file with all its diagnostics |
| 71 | + return diagnosticsByFile.entrySet().stream() |
| 72 | + .map(entry -> new PublishDiagnosticsParams(entry.getKey(), entry.getValue())) |
| 73 | + .toList(); |
64 | 74 | } |
65 | 75 |
|
66 | 76 | /** |
|
0 commit comments