11use crate :: trap:: TrapId ;
22use anyhow:: Context ;
33use ra_ap_hir:: db:: DefDatabase ;
4- use ra_ap_hir:: { Crate } ;
5- use ra_ap_load_cargo:: { load_workspace_at , LoadCargoConfig , ProcMacroServerChoice } ;
4+ use ra_ap_hir:: Crate ;
5+ use ra_ap_load_cargo:: { load_workspace , LoadCargoConfig , ProcMacroServerChoice } ;
66use ra_ap_project_model:: CargoConfig ;
7+ use ra_ap_project_model:: ProjectWorkspace ;
78use ra_ap_project_model:: RustLibSource ;
8- use std:: path:: { PathBuf } ;
9+ use ra_ap_vfs:: AbsPathBuf ;
10+ use std:: path:: PathBuf ;
911
1012mod archive;
1113mod config;
@@ -14,6 +16,19 @@ pub mod path;
1416mod translate;
1517pub mod trap;
1618
19+ pub fn find_project_manifests (
20+ files : & Vec < PathBuf > ,
21+ ) -> anyhow:: Result < Vec < ra_ap_project_model:: ProjectManifest > > {
22+ let current = std:: env:: current_dir ( ) ?;
23+ let abs_files: Vec < _ > = files
24+ . iter ( )
25+ . map ( |path| AbsPathBuf :: assert_utf8 ( current. join ( path) ) )
26+ . collect ( ) ;
27+ Ok ( ra_ap_project_model:: ProjectManifest :: discover_all (
28+ & abs_files,
29+ ) )
30+ }
31+
1732fn main ( ) -> anyhow:: Result < ( ) > {
1833 let cfg = config:: Config :: extract ( ) . context ( "failed to load configuration" ) ?;
1934 stderrlog:: new ( )
@@ -36,10 +51,16 @@ fn main() -> anyhow::Result<()> {
3651 with_proc_macro_server : ProcMacroServerChoice :: Sysroot ,
3752 prefill_caches : false ,
3853 } ;
39- for input in cfg. inputs {
40- let ( db, vfs, _macro_server) = load_workspace_at ( & input, & config, & load_config, & progress)
41- . context ( "loading inputs" ) ?;
42- _macro_server. expect ( "no macro server" ) ;
54+ let projects = find_project_manifests ( & cfg. inputs ) . context ( "loading inputs" ) ?;
55+ for project in projects {
56+ let mut workspace = ProjectWorkspace :: load ( project, & config, & progress) ?;
57+
58+ if load_config. load_out_dirs_from_check {
59+ let build_scripts = workspace. run_build_scripts ( & config, & progress) ?;
60+ workspace. set_build_scripts ( build_scripts)
61+ }
62+
63+ let ( db, vfs, _macro_server) = load_workspace ( workspace, & config. extra_env , & load_config) ?;
4364 let crates = <dyn DefDatabase >:: crate_graph ( & db) ;
4465 for crate_id in crates. iter ( ) {
4566 let krate = Crate :: from ( crate_id) ;
0 commit comments