Merge #1655
1655: cleanup imports r=matklad a=matklad Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
cf5d478b67
9 changed files with 43 additions and 45 deletions
|
@ -79,7 +79,7 @@ impl<ID: ArenaId, T> Arena<ID, T> {
|
|||
self.data.push(value);
|
||||
ID::from_raw(id)
|
||||
}
|
||||
pub fn iter(&self) -> impl Iterator<Item = (ID, &T)> {
|
||||
pub fn iter(&self) -> impl Iterator<Item = (ID, &T)> + ExactSizeIterator {
|
||||
self.data.iter().enumerate().map(|(idx, value)| (ID::from_raw(RawId(idx as u32)), value))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ use rustc_hash::FxHashMap;
|
|||
|
||||
use ra_db::{CrateGraph, FileId, SourceRootId};
|
||||
use ra_ide_api::{AnalysisChange, AnalysisHost};
|
||||
use ra_project_model::{ProjectRoot, ProjectWorkspace};
|
||||
use ra_project_model::{PackageRoot, ProjectWorkspace};
|
||||
use ra_vfs::{Vfs, VfsChange};
|
||||
use vfs_filter::IncludeRustFiles;
|
||||
|
||||
|
@ -19,7 +19,7 @@ fn vfs_root_to_id(r: ra_vfs::VfsRoot) -> SourceRootId {
|
|||
SourceRootId(r.0)
|
||||
}
|
||||
|
||||
pub fn load_cargo(root: &Path) -> Result<(AnalysisHost, FxHashMap<SourceRootId, ProjectRoot>)> {
|
||||
pub fn load_cargo(root: &Path) -> Result<(AnalysisHost, FxHashMap<SourceRootId, PackageRoot>)> {
|
||||
let root = std::env::current_dir()?.join(root);
|
||||
let ws = ProjectWorkspace::discover(root.as_ref())?;
|
||||
let project_roots = ws.to_roots();
|
||||
|
@ -48,7 +48,7 @@ pub fn load_cargo(root: &Path) -> Result<(AnalysisHost, FxHashMap<SourceRootId,
|
|||
}
|
||||
|
||||
pub fn load(
|
||||
source_roots: &FxHashMap<SourceRootId, ProjectRoot>,
|
||||
source_roots: &FxHashMap<SourceRootId, PackageRoot>,
|
||||
crate_graph: CrateGraph,
|
||||
vfs: &mut Vfs,
|
||||
) -> AnalysisHost {
|
||||
|
|
|
@ -1,32 +1,32 @@
|
|||
use ra_project_model::ProjectRoot;
|
||||
use ra_project_model::PackageRoot;
|
||||
use ra_vfs::{Filter, RelativePath, RootEntry};
|
||||
use std::path::PathBuf;
|
||||
|
||||
/// `IncludeRustFiles` is used to convert
|
||||
/// from `ProjectRoot` to `RootEntry` for VFS
|
||||
/// from `PackageRoot` to `RootEntry` for VFS
|
||||
pub struct IncludeRustFiles {
|
||||
root: ProjectRoot,
|
||||
root: PackageRoot,
|
||||
}
|
||||
|
||||
impl IncludeRustFiles {
|
||||
pub fn from_roots<R>(roots: R) -> impl Iterator<Item = RootEntry>
|
||||
where
|
||||
R: IntoIterator<Item = ProjectRoot>,
|
||||
R: IntoIterator<Item = PackageRoot>,
|
||||
{
|
||||
roots.into_iter().map(IncludeRustFiles::from_root)
|
||||
}
|
||||
|
||||
pub fn from_root(root: ProjectRoot) -> RootEntry {
|
||||
pub fn from_root(root: PackageRoot) -> RootEntry {
|
||||
IncludeRustFiles::from(root).into()
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
pub fn external(path: PathBuf) -> RootEntry {
|
||||
IncludeRustFiles::from_root(ProjectRoot::new(path, false))
|
||||
IncludeRustFiles::from_root(PackageRoot::new(path, false))
|
||||
}
|
||||
|
||||
pub fn member(path: PathBuf) -> RootEntry {
|
||||
IncludeRustFiles::from_root(ProjectRoot::new(path, true))
|
||||
IncludeRustFiles::from_root(PackageRoot::new(path, true))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,8 +40,8 @@ impl Filter for IncludeRustFiles {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<ProjectRoot> for IncludeRustFiles {
|
||||
fn from(v: ProjectRoot) -> IncludeRustFiles {
|
||||
impl From<PackageRoot> for IncludeRustFiles {
|
||||
fn from(v: PackageRoot) -> IncludeRustFiles {
|
||||
IncludeRustFiles { root: v }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -269,7 +269,7 @@ fn main_loop_inner(
|
|||
&& pending_libraries.is_empty()
|
||||
&& in_flight_libraries == 0
|
||||
{
|
||||
let n_packages: usize = state.workspaces.iter().map(|it| it.count()).sum();
|
||||
let n_packages: usize = state.workspaces.iter().map(|it| it.n_packages()).sum();
|
||||
if state.options.show_workspace_loaded {
|
||||
let msg = format!("workspace loaded, {} rust packages", n_packages);
|
||||
show_message(req::MessageType::Info, msg, msg_sender);
|
||||
|
|
|
@ -1,32 +1,32 @@
|
|||
use ra_project_model::ProjectRoot;
|
||||
use ra_project_model::PackageRoot;
|
||||
use ra_vfs::{Filter, RelativePath, RootEntry};
|
||||
use std::path::PathBuf;
|
||||
|
||||
/// `IncludeRustFiles` is used to convert
|
||||
/// from `ProjectRoot` to `RootEntry` for VFS
|
||||
/// from `PackageRoot` to `RootEntry` for VFS
|
||||
pub struct IncludeRustFiles {
|
||||
root: ProjectRoot,
|
||||
root: PackageRoot,
|
||||
}
|
||||
|
||||
impl IncludeRustFiles {
|
||||
pub fn from_roots<R>(roots: R) -> impl Iterator<Item = RootEntry>
|
||||
where
|
||||
R: IntoIterator<Item = ProjectRoot>,
|
||||
R: IntoIterator<Item = PackageRoot>,
|
||||
{
|
||||
roots.into_iter().map(IncludeRustFiles::from_root)
|
||||
}
|
||||
|
||||
pub fn from_root(root: ProjectRoot) -> RootEntry {
|
||||
pub fn from_root(root: PackageRoot) -> RootEntry {
|
||||
IncludeRustFiles::from(root).into()
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
pub fn external(path: PathBuf) -> RootEntry {
|
||||
IncludeRustFiles::from_root(ProjectRoot::new(path, false))
|
||||
IncludeRustFiles::from_root(PackageRoot::new(path, false))
|
||||
}
|
||||
|
||||
pub fn member(path: PathBuf) -> RootEntry {
|
||||
IncludeRustFiles::from_root(ProjectRoot::new(path, true))
|
||||
IncludeRustFiles::from_root(PackageRoot::new(path, true))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,8 +40,8 @@ impl Filter for IncludeRustFiles {
|
|||
}
|
||||
}
|
||||
|
||||
impl std::convert::From<ProjectRoot> for IncludeRustFiles {
|
||||
fn from(v: ProjectRoot) -> IncludeRustFiles {
|
||||
impl std::convert::From<PackageRoot> for IncludeRustFiles {
|
||||
fn from(v: PackageRoot) -> IncludeRustFiles {
|
||||
IncludeRustFiles { root: v }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -211,7 +211,7 @@ impl WorldSnapshot {
|
|||
} else {
|
||||
res.push_str("workspaces:\n");
|
||||
for w in self.workspaces.iter() {
|
||||
res += &format!("{} packages loaded\n", w.count());
|
||||
res += &format!("{} packages loaded\n", w.n_packages());
|
||||
}
|
||||
}
|
||||
res.push_str("\nanalysis:\n");
|
||||
|
|
|
@ -167,7 +167,7 @@ impl CargoWorkspace {
|
|||
Ok(CargoWorkspace { packages, targets, workspace_root: meta.workspace_root })
|
||||
}
|
||||
|
||||
pub fn packages<'a>(&'a self) -> impl Iterator<Item = Package> + 'a {
|
||||
pub fn packages<'a>(&'a self) -> impl Iterator<Item = Package> + ExactSizeIterator + 'a {
|
||||
self.packages.iter().map(|(id, _pkg)| id)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,13 +9,10 @@ use std::{
|
|||
path::{Path, PathBuf},
|
||||
};
|
||||
|
||||
use rustc_hash::FxHashMap;
|
||||
|
||||
use ra_db::{CrateGraph, Edition, FileId};
|
||||
|
||||
use serde_json::from_reader;
|
||||
|
||||
use relative_path::RelativePath;
|
||||
use rustc_hash::FxHashMap;
|
||||
use serde_json::from_reader;
|
||||
|
||||
pub use crate::{
|
||||
cargo_workspace::{CargoWorkspace, Package, Target, TargetKind},
|
||||
|
@ -34,20 +31,20 @@ pub enum ProjectWorkspace {
|
|||
Json { project: JsonProject },
|
||||
}
|
||||
|
||||
/// `ProjectRoot` describes a workspace root folder.
|
||||
/// `PackageRoot` describes a package root folder.
|
||||
/// Which may be an external dependency, or a member of
|
||||
/// the current workspace.
|
||||
#[derive(Clone)]
|
||||
pub struct ProjectRoot {
|
||||
pub struct PackageRoot {
|
||||
/// Path to the root folder
|
||||
path: PathBuf,
|
||||
/// Is a member of the current workspace
|
||||
is_member: bool,
|
||||
}
|
||||
|
||||
impl ProjectRoot {
|
||||
pub fn new(path: PathBuf, is_member: bool) -> ProjectRoot {
|
||||
ProjectRoot { path, is_member }
|
||||
impl PackageRoot {
|
||||
pub fn new(path: PathBuf, is_member: bool) -> PackageRoot {
|
||||
PackageRoot { path, is_member }
|
||||
}
|
||||
|
||||
pub fn path(&self) -> &PathBuf {
|
||||
|
@ -99,38 +96,39 @@ impl ProjectWorkspace {
|
|||
}
|
||||
}
|
||||
|
||||
/// Returns the roots for the current ProjectWorkspace
|
||||
/// Returns the roots for the current `ProjectWorkspace`
|
||||
/// The return type contains the path and whether or not
|
||||
/// the root is a member of the current workspace
|
||||
pub fn to_roots(&self) -> Vec<ProjectRoot> {
|
||||
pub fn to_roots(&self) -> Vec<PackageRoot> {
|
||||
match self {
|
||||
ProjectWorkspace::Json { project } => {
|
||||
let mut roots = Vec::with_capacity(project.roots.len());
|
||||
for root in &project.roots {
|
||||
roots.push(ProjectRoot::new(root.path.clone(), true));
|
||||
roots.push(PackageRoot::new(root.path.clone(), true));
|
||||
}
|
||||
roots
|
||||
}
|
||||
ProjectWorkspace::Cargo { cargo, sysroot } => {
|
||||
let mut roots =
|
||||
Vec::with_capacity(cargo.packages().count() + sysroot.crates().count());
|
||||
let mut roots = Vec::with_capacity(cargo.packages().len() + sysroot.crates().len());
|
||||
for pkg in cargo.packages() {
|
||||
let root = pkg.root(&cargo).to_path_buf();
|
||||
let member = pkg.is_member(&cargo);
|
||||
roots.push(ProjectRoot::new(root, member));
|
||||
roots.push(PackageRoot::new(root, member));
|
||||
}
|
||||
for krate in sysroot.crates() {
|
||||
roots.push(ProjectRoot::new(krate.root_dir(&sysroot).to_path_buf(), false))
|
||||
roots.push(PackageRoot::new(krate.root_dir(&sysroot).to_path_buf(), false))
|
||||
}
|
||||
roots
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn count(&self) -> usize {
|
||||
pub fn n_packages(&self) -> usize {
|
||||
match self {
|
||||
ProjectWorkspace::Json { project } => project.crates.len(),
|
||||
ProjectWorkspace::Cargo { cargo, .. } => cargo.packages().count(),
|
||||
ProjectWorkspace::Cargo { cargo, sysroot } => {
|
||||
cargo.packages().len() + sysroot.crates().len()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ impl Sysroot {
|
|||
self.by_name("std")
|
||||
}
|
||||
|
||||
pub fn crates<'a>(&'a self) -> impl Iterator<Item = SysrootCrate> + 'a {
|
||||
pub fn crates<'a>(&'a self) -> impl Iterator<Item = SysrootCrate> + ExactSizeIterator + 'a {
|
||||
self.crates.iter().map(|(id, _data)| id)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue