mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 13:03:31 +00:00
Move project discovery
This commit is contained in:
parent
992e1256d0
commit
0a88de809f
2 changed files with 16 additions and 8 deletions
|
@ -14,7 +14,7 @@ use std::{
|
|||
use anyhow::{bail, Context, Result};
|
||||
use ra_cfg::CfgOptions;
|
||||
use ra_db::{CrateGraph, CrateName, Edition, Env, ExternSource, ExternSourceId, FileId};
|
||||
use rustc_hash::FxHashMap;
|
||||
use rustc_hash::{FxHashMap, FxHashSet};
|
||||
use serde_json::from_reader;
|
||||
|
||||
pub use crate::{
|
||||
|
@ -57,7 +57,7 @@ impl PackageRoot {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash, Ord, PartialOrd)]
|
||||
pub enum ProjectRoot {
|
||||
ProjectJson(PathBuf),
|
||||
CargoToml(PathBuf),
|
||||
|
@ -128,6 +128,18 @@ impl ProjectRoot {
|
|||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn discover_all(paths: &[impl AsRef<Path>]) -> Vec<ProjectRoot> {
|
||||
let mut res = paths
|
||||
.iter()
|
||||
.filter_map(|it| ProjectRoot::discover(it.as_ref()).ok())
|
||||
.flatten()
|
||||
.collect::<FxHashSet<_>>()
|
||||
.into_iter()
|
||||
.collect::<Vec<_>>();
|
||||
res.sort();
|
||||
res
|
||||
}
|
||||
}
|
||||
|
||||
impl ProjectWorkspace {
|
||||
|
|
|
@ -28,7 +28,7 @@ use lsp_types::{
|
|||
use ra_flycheck::{CheckTask, Status};
|
||||
use ra_ide::{Canceled, FileId, LibraryData, LineIndex, SourceRootId};
|
||||
use ra_prof::profile;
|
||||
use ra_project_model::{PackageRoot, ProjectWorkspace};
|
||||
use ra_project_model::{PackageRoot, ProjectRoot, ProjectWorkspace};
|
||||
use ra_vfs::{VfsFile, VfsTask, Watch};
|
||||
use relative_path::RelativePathBuf;
|
||||
use rustc_hash::FxHashSet;
|
||||
|
@ -96,11 +96,7 @@ pub fn main_loop(ws_roots: Vec<PathBuf>, config: Config, connection: Connection)
|
|||
let mut global_state = {
|
||||
let workspaces = {
|
||||
// FIXME: support dynamic workspace loading.
|
||||
let project_roots: FxHashSet<_> = ws_roots
|
||||
.iter()
|
||||
.filter_map(|it| ra_project_model::ProjectRoot::discover(it).ok())
|
||||
.flatten()
|
||||
.collect();
|
||||
let project_roots = ProjectRoot::discover_all(&ws_roots);
|
||||
|
||||
if project_roots.is_empty() && config.notifications.cargo_toml_not_found {
|
||||
show_message(
|
||||
|
|
Loading…
Reference in a new issue