From c6d6e6c6259709ec30eadb79a1908dca707a6499 Mon Sep 17 00:00:00 2001 From: Ville Penttinen Date: Thu, 21 Mar 2019 10:43:47 +0200 Subject: Move actual include logic to ProjectRoot This way the two IncludeRustFiles implementations can simply call the ProjectRoots' methods, so that the include logic is in one place. --- crates/ra_batch/src/vfs_filter.rs | 45 +++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 25 deletions(-) (limited to 'crates/ra_batch/src') diff --git a/crates/ra_batch/src/vfs_filter.rs b/crates/ra_batch/src/vfs_filter.rs index 290aec172..dd20c1203 100644 --- a/crates/ra_batch/src/vfs_filter.rs +++ b/crates/ra_batch/src/vfs_filter.rs @@ -2,9 +2,10 @@ use std::path::PathBuf; use ra_project_model::ProjectRoot; use ra_vfs::{RootEntry, Filter, RelativePath}; +/// `IncludeRustFiles` is used to convert +/// from `ProjectRoot` to `RootEntry` for VFS pub struct IncludeRustFiles { - /// Is a member of the current workspace - is_member: bool, + root: ProjectRoot, } impl IncludeRustFiles { @@ -16,44 +17,38 @@ impl IncludeRustFiles { } pub fn from_root(root: ProjectRoot) -> RootEntry { - let is_member = root.is_member(); - IncludeRustFiles::into_entry(root.into_path(), is_member) + IncludeRustFiles::from(root).into() } #[allow(unused)] pub fn external(path: PathBuf) -> RootEntry { - IncludeRustFiles::into_entry(path, false) + IncludeRustFiles::from_root(ProjectRoot::new(path, false)) } pub fn member(path: PathBuf) -> RootEntry { - IncludeRustFiles::into_entry(path, true) - } - - fn into_entry(path: PathBuf, is_member: bool) -> RootEntry { - RootEntry::new(path, Box::new(Self { is_member })) + IncludeRustFiles::from_root(ProjectRoot::new(path, true)) } } impl Filter for IncludeRustFiles { fn include_dir(&self, dir_path: &RelativePath) -> bool { - const COMMON_IGNORED_DIRS: &[&str] = &["node_modules", "target", ".git"]; - const EXTERNAL_IGNORED_DIRS: &[&str] = &["examples", "tests", "benches"]; - - let is_ignored = if self.is_member { - dir_path.components().any(|c| COMMON_IGNORED_DIRS.contains(&c.as_str())) - } else { - dir_path.components().any(|c| { - let path = c.as_str(); - COMMON_IGNORED_DIRS.contains(&path) || EXTERNAL_IGNORED_DIRS.contains(&path) - }) - }; + self.root.include_dir(dir_path) + } - let hidden = dir_path.components().any(|c| c.as_str().starts_with(".")); + fn include_file(&self, file_path: &RelativePath) -> bool { + self.root.include_file(file_path) + } +} - !is_ignored && !hidden +impl std::convert::From for IncludeRustFiles { + fn from(v: ProjectRoot) -> IncludeRustFiles { + IncludeRustFiles { root: v } } +} - fn include_file(&self, file_path: &RelativePath) -> bool { - file_path.extension() == Some("rs") +impl std::convert::From for RootEntry { + fn from(v: IncludeRustFiles) -> RootEntry { + let path = v.root.path().clone(); + RootEntry::new(path, Box::new(v)) } } -- cgit v1.2.3