@@ -15,7 +15,7 @@ use ra_flycheck::{Flycheck, FlycheckConfig};
15
15
use ra_ide:: {
16
16
Analysis , AnalysisChange , AnalysisHost , CrateGraph , FileId , LibraryData , SourceRootId ,
17
17
} ;
18
- use ra_project_model:: { ProcMacroClient , ProjectWorkspace } ;
18
+ use ra_project_model:: { CargoWorkspace , ProcMacroClient , ProjectWorkspace , Target } ;
19
19
use ra_vfs:: { LineEndings , RootEntry , Vfs , VfsChange , VfsFile , VfsTask , Watch } ;
20
20
use relative_path:: RelativePathBuf ;
21
21
use stdx:: format_to;
@@ -28,7 +28,7 @@ use crate::{
28
28
vfs_glob:: { Glob , RustPackageFilterBuilder } ,
29
29
LspError , Result ,
30
30
} ;
31
- use ra_db:: ExternSourceId ;
31
+ use ra_db:: { CrateId , ExternSourceId } ;
32
32
use rustc_hash:: { FxHashMap , FxHashSet } ;
33
33
34
34
fn create_flycheck ( workspaces : & [ ProjectWorkspace ] , config : & FlycheckConfig ) -> Option < Flycheck > {
@@ -290,10 +290,6 @@ impl GlobalStateSnapshot {
290
290
file_id_to_url ( & self . vfs . read ( ) , id)
291
291
}
292
292
293
- pub fn file_id_to_path ( & self , id : FileId ) -> PathBuf {
294
- self . vfs . read ( ) . file2path ( VfsFile ( id. 0 ) )
295
- }
296
-
297
293
pub fn file_line_endings ( & self , id : FileId ) -> LineEndings {
298
294
self . vfs . read ( ) . file_line_endings ( VfsFile ( id. 0 ) )
299
295
}
@@ -305,6 +301,20 @@ impl GlobalStateSnapshot {
305
301
url_from_abs_path ( & path)
306
302
}
307
303
304
+ pub ( crate ) fn cargo_target_for_crate_root (
305
+ & self ,
306
+ crate_id : CrateId ,
307
+ ) -> Option < ( & CargoWorkspace , Target ) > {
308
+ let file_id = self . analysis ( ) . crate_root ( crate_id) . ok ( ) ?;
309
+ let path = self . vfs . read ( ) . file2path ( VfsFile ( file_id. 0 ) ) ;
310
+ self . workspaces . iter ( ) . find_map ( |ws| match ws {
311
+ ProjectWorkspace :: Cargo { cargo, .. } => {
312
+ cargo. target_by_root ( & path) . map ( |it| ( cargo, it) )
313
+ }
314
+ ProjectWorkspace :: Json { .. } => None ,
315
+ } )
316
+ }
317
+
308
318
pub fn status ( & self ) -> String {
309
319
let mut buf = String :: new ( ) ;
310
320
if self . workspaces . is_empty ( ) {
0 commit comments