24
24
25
25
26
26
class LineRange (Range ):
27
+
27
28
def __init__ (self , line : int , last_line : int = 0 ):
29
+ conf = Config .instance ()
30
+ is_multiline = conf .get ("merge" , str , "multiline" ) != "multiplier"
31
+ end = last_line if last_line and is_multiline else (line - 1 )
32
+
28
33
super ().__init__ (
29
34
start = Position (line - 1 , 1 ),
30
- end = Position (last_line or ( line - 1 ) , 80 )
35
+ end = Position (end , 80 )
31
36
)
32
37
33
38
@@ -37,23 +42,24 @@ def __init__(self, line: int, last_line: int = 0):
37
42
ReportType .INFO : DiagnosticSeverity .Hint
38
43
}
39
44
40
- def _merge_cf4s (reports : List [Report ]) -> List [Report ]:
45
+ def _merge_reports (reports : List [Report ]) -> List [Report ]:
41
46
out_reports = []
42
- cf4s : Dict [int , Report ] = {}
43
-
44
- for report in sorted (reports , key = lambda r : r .line ):
45
- if report .rule != 'C-F4' :
46
- out_reports .append (report )
47
- continue
48
-
49
- for k in cf4s .values ():
50
- if k .is_mergeable (report .line ):
51
- k .merge (report )
52
- break
53
- else :
54
- cf4s [report .line ] = report
55
-
56
- out_reports .extend (cf4s .values ())
47
+
48
+ for rule in set (report .rule for report in reports ):
49
+ m = {}
50
+
51
+ for report in sorted (reports , key = lambda r : r .line ):
52
+ if report .rule != rule :
53
+ continue
54
+
55
+ for k in m .values ():
56
+ if k .is_mergeable (report .line ):
57
+ k .merge (report )
58
+ break
59
+ else :
60
+ m [report .line ] = report
61
+
62
+ out_reports .extend (m .values ())
57
63
return out_reports
58
64
59
65
@@ -72,13 +78,19 @@ def get_diagnostics(text_doc: Document):
72
78
73
79
return [
74
80
Diagnostic (
75
- range = LineRange (report .line , report .last_line ),
81
+ range = LineRange (
82
+ report .line ,
83
+ report .last_line
84
+ ),
76
85
message = report .message ,
77
86
source = "Json Server" ,
78
- severity = SEVERITIES [report .type ],
79
- )
80
- for report in _merge_cf4s (reports )
81
- if report .rule not in conf .get ("ignore" , [])
87
+ severity = (
88
+ SEVERITIES [report .type ]
89
+ if conf .get ("severity_levels" , bool , True )
90
+ else DiagnosticSeverity .Hint
91
+ )
92
+ ) for report in _merge_reports (reports )
93
+ if report .rule not in conf .get ("ignore" , list , [])
82
94
]
83
95
84
96
@server .feature (INITIALIZE )
0 commit comments