@@ -42,11 +42,38 @@ async def namespace_invalidated(self, sender: Any, document: TextDocument) -> No
42
42
async def collect_namespace_diagnostics (
43
43
self , sender : Any , document : TextDocument , cancelation_token : CancelationToken
44
44
) -> DiagnosticsResult :
45
- namespace = await self .parent .documents_cache .get_namespace (document )
46
- if namespace is None :
47
- return DiagnosticsResult (self .collect_namespace_diagnostics , None )
45
+ try :
46
+ namespace = await self .parent .documents_cache .get_namespace (document )
47
+ if namespace is None :
48
+ return DiagnosticsResult (self .collect_namespace_diagnostics , None )
48
49
49
- return DiagnosticsResult (self .collect_namespace_diagnostics , await namespace .get_diagnostisc (cancelation_token ))
50
+ return DiagnosticsResult (
51
+ self .collect_namespace_diagnostics , await namespace .get_diagnostisc (cancelation_token )
52
+ )
53
+ except (asyncio .CancelledError , SystemExit , KeyboardInterrupt ):
54
+ raise
55
+ except BaseException as e :
56
+ return DiagnosticsResult (
57
+ self .collect_namespace_diagnostics ,
58
+ [
59
+ Diagnostic (
60
+ range = Range (
61
+ start = Position (
62
+ line = 0 ,
63
+ character = 0 ,
64
+ ),
65
+ end = Position (
66
+ line = len (await document .get_lines ()),
67
+ character = len ((await document .get_lines ())[- 1 ] or "" ),
68
+ ),
69
+ ),
70
+ message = f"Fatal: can't get namespace diagnostics '{ e } ' ({ type (e ).__qualname__ } )" ,
71
+ severity = DiagnosticSeverity .ERROR ,
72
+ source = self .source_name ,
73
+ code = type (e ).__qualname__ ,
74
+ )
75
+ ],
76
+ )
50
77
51
78
def _create_error_from_node (self , node : ast .AST , msg : str , source : Optional [str ] = None ) -> Diagnostic :
52
79
return Diagnostic (
@@ -121,7 +148,7 @@ async def collect_token_errors(
121
148
character = len ((await document .get_lines ())[- 1 ] or "" ),
122
149
),
123
150
),
124
- message = f"Fatal { type (e ).__qualname__ } : { e } " ,
151
+ message = f"Fatal: can't get token diagnostics ' { e } ' ( { type (e ).__qualname__ } ) " ,
125
152
severity = DiagnosticSeverity .ERROR ,
126
153
source = self .source_name ,
127
154
code = type (e ).__qualname__ ,
@@ -141,16 +168,42 @@ async def collect_walk_model_errors(
141
168
from ..utils .ast import HasError , HasErrors
142
169
from ..utils .async_ast import iter_nodes
143
170
144
- model = await self .parent .documents_cache .get_model (document )
171
+ try :
172
+ model = await self .parent .documents_cache .get_model (document )
145
173
146
- result : List [Diagnostic ] = []
147
- async for node in iter_nodes (model ):
148
- error = node .error if isinstance (node , HasError ) else None
149
- if error is not None :
150
- result .append (self ._create_error_from_node (node , error ))
151
- errors = node .errors if isinstance (node , HasErrors ) else None
152
- if errors is not None :
153
- for e in errors :
154
- result .append (self ._create_error_from_node (node , e ))
155
-
156
- return DiagnosticsResult (self .collect_walk_model_errors , result )
174
+ result : List [Diagnostic ] = []
175
+ async for node in iter_nodes (model ):
176
+ error = node .error if isinstance (node , HasError ) else None
177
+ if error is not None :
178
+ result .append (self ._create_error_from_node (node , error ))
179
+ errors = node .errors if isinstance (node , HasErrors ) else None
180
+ if errors is not None :
181
+ for e in errors :
182
+ result .append (self ._create_error_from_node (node , e ))
183
+
184
+ return DiagnosticsResult (self .collect_walk_model_errors , result )
185
+
186
+ except (asyncio .CancelledError , SystemExit , KeyboardInterrupt ):
187
+ raise
188
+ except BaseException as e :
189
+ return DiagnosticsResult (
190
+ self .collect_walk_model_errors ,
191
+ [
192
+ Diagnostic (
193
+ range = Range (
194
+ start = Position (
195
+ line = 0 ,
196
+ character = 0 ,
197
+ ),
198
+ end = Position (
199
+ line = len (await document .get_lines ()),
200
+ character = len ((await document .get_lines ())[- 1 ] or "" ),
201
+ ),
202
+ ),
203
+ message = f"Fatal: can't get model diagnostics '{ e } ' ({ type (e ).__qualname__ } )" ,
204
+ severity = DiagnosticSeverity .ERROR ,
205
+ source = self .source_name ,
206
+ code = type (e ).__qualname__ ,
207
+ )
208
+ ],
209
+ )
0 commit comments