@@ -9,7 +9,7 @@ use nohash_hasher::{IntMap, IntSet};
9
9
use rustc_hash:: FxHashSet ;
10
10
use triomphe:: Arc ;
11
11
12
- use crate :: lsp_ext;
12
+ use crate :: { global_state :: GlobalStateSnapshot , lsp , lsp_ext} ;
13
13
14
14
pub ( crate ) type CheckFixes = Arc < IntMap < usize , IntMap < FileId , Vec < Fix > > > > ;
15
15
@@ -122,3 +122,41 @@ fn are_diagnostics_equal(left: &lsp_types::Diagnostic, right: &lsp_types::Diagno
122
122
&& left. range == right. range
123
123
&& left. message == right. message
124
124
}
125
+
126
+ pub ( crate ) fn fetch_native_diagnostics (
127
+ snapshot : GlobalStateSnapshot ,
128
+ subscriptions : Vec < FileId > ,
129
+ ) -> Vec < ( FileId , Vec < lsp_types:: Diagnostic > ) > {
130
+ let _p = profile:: span ( "fetch_native_diagnostics" ) ;
131
+ let _ctx = stdx:: panic_context:: enter ( "fetch_native_diagnostics" . to_owned ( ) ) ;
132
+ subscriptions
133
+ . into_iter ( )
134
+ . filter_map ( |file_id| {
135
+ let line_index = snapshot. file_line_index ( file_id) . ok ( ) ?;
136
+ let diagnostics = snapshot
137
+ . analysis
138
+ . diagnostics (
139
+ & snapshot. config . diagnostics ( ) ,
140
+ ide:: AssistResolveStrategy :: None ,
141
+ file_id,
142
+ )
143
+ . ok ( ) ?
144
+ . into_iter ( )
145
+ . map ( move |d| lsp_types:: Diagnostic {
146
+ range : lsp:: to_proto:: range ( & line_index, d. range ) ,
147
+ severity : Some ( lsp:: to_proto:: diagnostic_severity ( d. severity ) ) ,
148
+ code : Some ( lsp_types:: NumberOrString :: String ( d. code . as_str ( ) . to_string ( ) ) ) ,
149
+ code_description : Some ( lsp_types:: CodeDescription {
150
+ href : lsp_types:: Url :: parse ( & d. code . url ( ) ) . unwrap ( ) ,
151
+ } ) ,
152
+ source : Some ( "rust-analyzer" . to_string ( ) ) ,
153
+ message : d. message ,
154
+ related_information : None ,
155
+ tags : d. unused . then ( || vec ! [ lsp_types:: DiagnosticTag :: UNNECESSARY ] ) ,
156
+ data : None ,
157
+ } )
158
+ . collect :: < Vec < _ > > ( ) ;
159
+ Some ( ( file_id, diagnostics) )
160
+ } )
161
+ . collect ( )
162
+ }
0 commit comments