@@ -20,7 +20,7 @@ use itertools::Itertools;
20
20
use rustc_hash:: FxHashSet ;
21
21
use syntax:: {
22
22
ast:: { self , AstNode } ,
23
- SyntaxNode , SyntaxNodePtr , TextRange ,
23
+ SyntaxNode , SyntaxNodePtr , TextRange , TextSize ,
24
24
} ;
25
25
use text_edit:: TextEdit ;
26
26
use unlinked_file:: UnlinkedFile ;
@@ -159,14 +159,16 @@ pub(crate) fn diagnostics(
159
159
) ;
160
160
} )
161
161
. on :: < UnlinkedFile , _ > ( |d| {
162
+ // Limit diagnostic to the first few characters in the file. This matches how VS Code
163
+ // renders it with the full span, but on other editors, and is less invasive.
164
+ let range = sema. diagnostics_display_range ( d. display_source ( ) ) . range ;
165
+ let range = range. intersect ( TextRange :: up_to ( TextSize :: of ( "..." ) ) ) . unwrap_or ( range) ;
166
+
162
167
// Override severity and mark as unused.
163
168
res. borrow_mut ( ) . push (
164
- Diagnostic :: hint (
165
- sema. diagnostics_display_range ( d. display_source ( ) ) . range ,
166
- d. message ( ) ,
167
- )
168
- . with_fix ( d. fix ( & sema) )
169
- . with_code ( Some ( d. code ( ) ) ) ,
169
+ Diagnostic :: hint ( range, d. message ( ) )
170
+ . with_fix ( d. fix ( & sema) )
171
+ . with_code ( Some ( d. code ( ) ) ) ,
170
172
) ;
171
173
} )
172
174
. on :: < hir:: diagnostics:: UnresolvedProcMacro , _ > ( |d| {
0 commit comments