8
8
from ...common .parts .diagnostics import DiagnosticsResult
9
9
from ...common .text_document import TextDocument
10
10
from ...common .types import Diagnostic , DiagnosticSeverity , Position , Range
11
- from ..utils .ast import range_from_token
11
+ from ..utils .ast import Token , range_from_token
12
12
13
13
if TYPE_CHECKING :
14
14
from ..protocol import RobotLanguageServerProtocol
@@ -22,7 +22,7 @@ class RobotDiagnosticsProtocolPart(RobotLanguageServerProtocolPart):
22
22
def __init__ (self , parent : RobotLanguageServerProtocol ) -> None :
23
23
super ().__init__ (parent )
24
24
25
- self .source_name = "robotcode"
25
+ self .source_name = "robotcode.diagnostics "
26
26
27
27
parent .diagnostics .collect .add (self .collect_token_errors )
28
28
# parent.diagnostics.collect.add(self.collect_model_errors)
@@ -35,7 +35,7 @@ def __init__(self, parent: RobotLanguageServerProtocol) -> None:
35
35
async def namespace_invalidated (self , sender : Any , document : TextDocument ) -> None :
36
36
await self .parent .diagnostics .start_publish_diagnostics_task (document )
37
37
38
- def _create_error (self , node : ast .AST , msg : str , source : Optional [str ] = None ) -> Diagnostic :
38
+ def _create_error_from_node (self , node : ast .AST , msg : str , source : Optional [str ] = None ) -> Diagnostic :
39
39
return Diagnostic (
40
40
range = Range (
41
41
start = Position (line = node .lineno - 1 , character = node .col_offset ),
@@ -47,6 +47,15 @@ def _create_error(self, node: ast.AST, msg: str, source: Optional[str] = None) -
47
47
code = "ModelError" ,
48
48
)
49
49
50
+ def _create_error_from_token (self , token : Token , source : Optional [str ] = None ) -> Diagnostic :
51
+ return Diagnostic (
52
+ range = range_from_token (token ),
53
+ message = token .error if token .error is not None else "Unknown Error." ,
54
+ severity = DiagnosticSeverity .ERROR ,
55
+ source = source if source is not None else self .source_name ,
56
+ code = "TokenError" ,
57
+ )
58
+
50
59
@language_id ("robotframework" )
51
60
@_logger .call
52
61
async def collect_token_errors (self , sender : Any , document : TextDocument ) -> DiagnosticsResult :
@@ -57,38 +66,23 @@ async def collect_token_errors(self, sender: Any, document: TextDocument) -> Dia
57
66
58
67
for token in await self .parent .documents_cache .get_tokens (document ):
59
68
if token .type in [Token .ERROR , Token .FATAL_ERROR ]:
60
- result .append (
61
- Diagnostic (
62
- range = range_from_token (token ),
63
- message = token .error if token .error is not None else "Unknown Error." ,
64
- severity = DiagnosticSeverity .ERROR ,
65
- source = "robot" ,
66
- code = "TokenError" ,
67
- )
68
- )
69
+ result .append (self ._create_error_from_token (token ))
69
70
70
71
try :
71
72
for variable_token in token .tokenize_variables ():
72
73
if variable_token == token :
73
74
break
74
75
75
76
if variable_token .type in [Token .ERROR , Token .FATAL_ERROR ]:
76
- result .append (
77
- Diagnostic (
78
- range = range_from_token (variable_token ),
79
- message = token .error if token .error is not None else "Unknown Error." ,
80
- severity = DiagnosticSeverity .ERROR ,
81
- source = "robot" ,
82
- code = "TokenError" ,
83
- )
84
- )
77
+ result .append (self ._create_error_from_token (variable_token ))
78
+
85
79
except VariableError as e :
86
80
result .append (
87
81
Diagnostic (
88
82
range = range_from_token (token ),
89
83
message = str (e ),
90
84
severity = DiagnosticSeverity .ERROR ,
91
- source = "robot" ,
85
+ source = self . source_name ,
92
86
code = type (e ).__qualname__ ,
93
87
)
94
88
)
@@ -115,11 +109,11 @@ async def find_from(cls, model: ast.AST, parent: RobotDiagnosticsProtocolPart) -
115
109
async def generic_visit (self , node : ast .AST ) -> None :
116
110
error = getattr (node , "error" , None )
117
111
if error is not None :
118
- self .errors .append (self .parent ._create_error (node , error , "robot.visitor" ))
112
+ self .errors .append (self .parent ._create_error_from_node (node , error ))
119
113
errors = getattr (node , "errors" , None )
120
114
if errors is not None :
121
115
for e in errors :
122
- self .errors .append (self .parent ._create_error (node , e , "robot.visitor" ))
116
+ self .errors .append (self .parent ._create_error_from_node (node , e ))
123
117
await super ().generic_visit (node )
124
118
125
119
return DiagnosticsResult (
@@ -137,11 +131,11 @@ async def collect_walk_model_errors(self, sender: Any, document: TextDocument) -
137
131
async for node in walk (await self .parent .documents_cache .get_model (document )):
138
132
error = getattr (node , "error" , None )
139
133
if error is not None :
140
- result .append (self ._create_error (node , error ))
134
+ result .append (self ._create_error_from_node (node , error ))
141
135
errors = getattr (node , "errors" , None )
142
136
if errors is not None :
143
137
for e in errors :
144
- result .append (self ._create_error (node , e ))
138
+ result .append (self ._create_error_from_node (node , e ))
145
139
146
140
return DiagnosticsResult (self .collect_walk_model_errors , result )
147
141
0 commit comments