Skip to content

Commit f1ce000

Browse files
committed
refactor(parser): move Diagnostic AST node
1 parent 61f73ae commit f1ce000

File tree

2 files changed

+49
-44
lines changed

2 files changed

+49
-44
lines changed

fortls/objects.py

+2-44
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@
3636
get_placeholders,
3737
get_var_stack,
3838
)
39-
from fortls.json_templates import diagnostic_json, location_json, range_json
39+
from fortls.json_templates import diagnostic_json, range_json
4040
from fortls.jsonrpc import path_to_uri
4141
from fortls.parsers.internal.base import FortranObj
42+
from fortls.parsers.internal.diagnostics import Diagnostic
4243
from fortls.parsers.internal.use import Use
4344

4445

@@ -365,49 +366,6 @@ class AssociateMap:
365366
link_name: str
366367

367368

368-
class Diagnostic:
369-
def __init__(
370-
self, sline: int, message: str, severity: int = 1, find_word: str = None
371-
):
372-
self.sline: int = sline
373-
self.message: str = message
374-
self.severity: int = severity
375-
self.find_word: str = find_word
376-
self.has_related: bool = False
377-
self.related_path = None
378-
self.related_line = None
379-
self.related_message = None
380-
381-
def add_related(self, path: str, line: int, message: str):
382-
self.has_related = True
383-
self.related_path = path
384-
self.related_line = line
385-
self.related_message = message
386-
387-
def build(self, file_obj):
388-
schar = echar = 0
389-
if self.find_word is not None:
390-
self.sline, obj_range = file_obj.find_word_in_code_line(
391-
self.sline, self.find_word
392-
)
393-
if obj_range.start >= 0:
394-
schar = obj_range.start
395-
echar = obj_range.end
396-
diag = diagnostic_json(
397-
self.sline, schar, self.sline, echar, self.message, self.severity
398-
)
399-
if self.has_related:
400-
diag["relatedInformation"] = [
401-
{
402-
**location_json(
403-
path_to_uri(self.related_path), self.related_line, 0
404-
),
405-
"message": self.related_message,
406-
}
407-
]
408-
return diag
409-
410-
411369
class Scope(FortranObj):
412370
def __init__(self, file_ast, line_number: int, name: str, keywords: list = None):
413371
super().__init__()
+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from __future__ import annotations
2+
3+
from fortls.json_templates import diagnostic_json, location_json
4+
from fortls.jsonrpc import path_to_uri
5+
6+
7+
class Diagnostic:
8+
def __init__(
9+
self, sline: int, message: str, severity: int = 1, find_word: str = None
10+
):
11+
self.sline: int = sline
12+
self.message: str = message
13+
self.severity: int = severity
14+
self.find_word: str = find_word
15+
self.has_related: bool = False
16+
self.related_path = None
17+
self.related_line = None
18+
self.related_message = None
19+
20+
def add_related(self, path: str, line: int, message: str):
21+
self.has_related = True
22+
self.related_path = path
23+
self.related_line = line
24+
self.related_message = message
25+
26+
def build(self, file_obj):
27+
schar = echar = 0
28+
if self.find_word is not None:
29+
self.sline, obj_range = file_obj.find_word_in_code_line(
30+
self.sline, self.find_word
31+
)
32+
if obj_range.start >= 0:
33+
schar = obj_range.start
34+
echar = obj_range.end
35+
diag = diagnostic_json(
36+
self.sline, schar, self.sline, echar, self.message, self.severity
37+
)
38+
if self.has_related:
39+
diag["relatedInformation"] = [
40+
{
41+
**location_json(
42+
path_to_uri(self.related_path), self.related_line, 0
43+
),
44+
"message": self.related_message,
45+
}
46+
]
47+
return diag

0 commit comments

Comments
 (0)