88from ...common .parts .diagnostics import DiagnosticsResult
99from ...common .text_document import TextDocument
1010from ...common .types import Diagnostic , DiagnosticSeverity , Position , Range
11- from ..utils .ast import range_from_token
11+ from ..utils .ast import Token , range_from_token
1212
1313if TYPE_CHECKING :
1414 from ..protocol import RobotLanguageServerProtocol
@@ -22,7 +22,7 @@ class RobotDiagnosticsProtocolPart(RobotLanguageServerProtocolPart):
2222 def __init__ (self , parent : RobotLanguageServerProtocol ) -> None :
2323 super ().__init__ (parent )
2424
25- self .source_name = "robotcode"
25+ self .source_name = "robotcode.diagnostics "
2626
2727 parent .diagnostics .collect .add (self .collect_token_errors )
2828 # parent.diagnostics.collect.add(self.collect_model_errors)
@@ -35,7 +35,7 @@ def __init__(self, parent: RobotLanguageServerProtocol) -> None:
3535 async def namespace_invalidated (self , sender : Any , document : TextDocument ) -> None :
3636 await self .parent .diagnostics .start_publish_diagnostics_task (document )
3737
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 :
3939 return Diagnostic (
4040 range = Range (
4141 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) -
4747 code = "ModelError" ,
4848 )
4949
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+
5059 @language_id ("robotframework" )
5160 @_logger .call
5261 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
5766
5867 for token in await self .parent .documents_cache .get_tokens (document ):
5968 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 ))
6970
7071 try :
7172 for variable_token in token .tokenize_variables ():
7273 if variable_token == token :
7374 break
7475
7576 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+
8579 except VariableError as e :
8680 result .append (
8781 Diagnostic (
8882 range = range_from_token (token ),
8983 message = str (e ),
9084 severity = DiagnosticSeverity .ERROR ,
91- source = "robot" ,
85+ source = self . source_name ,
9286 code = type (e ).__qualname__ ,
9387 )
9488 )
@@ -115,11 +109,11 @@ async def find_from(cls, model: ast.AST, parent: RobotDiagnosticsProtocolPart) -
115109 async def generic_visit (self , node : ast .AST ) -> None :
116110 error = getattr (node , "error" , None )
117111 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 ))
119113 errors = getattr (node , "errors" , None )
120114 if errors is not None :
121115 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 ))
123117 await super ().generic_visit (node )
124118
125119 return DiagnosticsResult (
@@ -137,11 +131,11 @@ async def collect_walk_model_errors(self, sender: Any, document: TextDocument) -
137131 async for node in walk (await self .parent .documents_cache .get_model (document )):
138132 error = getattr (node , "error" , None )
139133 if error is not None :
140- result .append (self ._create_error (node , error ))
134+ result .append (self ._create_error_from_node (node , error ))
141135 errors = getattr (node , "errors" , None )
142136 if errors is not None :
143137 for e in errors :
144- result .append (self ._create_error (node , e ))
138+ result .append (self ._create_error_from_node (node , e ))
145139
146140 return DiagnosticsResult (self .collect_walk_model_errors , result )
147141
0 commit comments