mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-25 12:33:33 +00:00
Small refactoring
This commit is contained in:
parent
8aa740dab4
commit
d163f9f114
2 changed files with 26 additions and 32 deletions
|
@ -167,29 +167,23 @@ impl<T: SourceDatabaseExt> FileLoader for FileLoaderDelegate<&'_ T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn possible_sudmobule_names(&self, module_file: FileId) -> Vec<String> {
|
fn possible_sudmobule_names(&self, module_file: FileId) -> Vec<String> {
|
||||||
fn possible_sudmobules_opt(
|
|
||||||
module_files: &FileSet,
|
|
||||||
module_file: FileId,
|
|
||||||
) -> Option<Vec<FileId>> {
|
|
||||||
match module_files.file_name_and_extension(module_file)? {
|
|
||||||
("mod", Some("rs")) | ("lib", Some("rs")) => {
|
|
||||||
module_files.list_files(module_file, None)
|
|
||||||
}
|
|
||||||
(directory_with_module_name, Some("rs")) => module_files
|
|
||||||
.list_files(module_file, Some(&format!("../{}/", directory_with_module_name))),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let module_files = &self.source_root(module_file).file_set;
|
let module_files = &self.source_root(module_file).file_set;
|
||||||
possible_sudmobules_opt(module_files, module_file)
|
let possible_submodule_files = match module_files.file_name_and_extension(module_file) {
|
||||||
.unwrap_or_default()
|
Some(("mod", Some("rs"))) | Some(("lib", Some("rs"))) => {
|
||||||
|
module_files.list_files_with_extensions(module_file, None)
|
||||||
|
}
|
||||||
|
Some((directory_with_module_name, Some("rs"))) => module_files
|
||||||
|
.list_files_with_extensions(
|
||||||
|
module_file,
|
||||||
|
Some(&format!("../{}/", directory_with_module_name)),
|
||||||
|
),
|
||||||
|
_ => Vec::new(),
|
||||||
|
};
|
||||||
|
|
||||||
|
possible_submodule_files
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|submodule_file| module_files.file_name_and_extension(submodule_file))
|
.filter(|(_, extension)| extension == &Some("rs"))
|
||||||
.map(|(file_name, extension)| match extension {
|
.map(|(file_name, _)| file_name.to_owned())
|
||||||
Some(extension) => format!("{}.{}", file_name, extension),
|
|
||||||
None => file_name.to_owned(),
|
|
||||||
})
|
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,33 +30,33 @@ impl FileSet {
|
||||||
self.paths[&file].file_name_and_extension()
|
self.paths[&file].file_name_and_extension()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn list_files(
|
pub fn list_files_with_extensions(
|
||||||
&self,
|
&self,
|
||||||
anchor: FileId,
|
anchor: FileId,
|
||||||
anchor_relative_path: Option<&str>,
|
anchor_relative_path: Option<&str>,
|
||||||
) -> Option<Vec<FileId>> {
|
) -> Vec<(&str, Option<&str>)> {
|
||||||
let anchor_directory = {
|
let anchor_directory = {
|
||||||
let path = self.paths[&anchor].clone();
|
let path = self.paths[&anchor].clone();
|
||||||
match anchor_relative_path {
|
match anchor_relative_path {
|
||||||
Some(anchor_relative_path) => path.join(anchor_relative_path),
|
Some(anchor_relative_path) => path.join(anchor_relative_path),
|
||||||
None => path.parent(),
|
None => path.parent(),
|
||||||
}
|
}
|
||||||
}?;
|
};
|
||||||
|
|
||||||
Some(
|
if let Some(anchor_directory) = anchor_directory {
|
||||||
self.paths
|
self.paths
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|(&file_id, path)| {
|
.filter_map(|(_, path)| {
|
||||||
if path.parent()? == anchor_directory
|
if path.parent()? == anchor_directory {
|
||||||
&& matches!(path.file_name_and_extension(), Some((_, Some("rs"))))
|
path.file_name_and_extension()
|
||||||
{
|
|
||||||
Some(file_id)
|
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect()
|
||||||
)
|
} else {
|
||||||
|
Vec::new()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pub fn insert(&mut self, file_id: FileId, path: VfsPath) {
|
pub fn insert(&mut self, file_id: FileId, path: VfsPath) {
|
||||||
self.files.insert(path.clone(), file_id);
|
self.files.insert(path.clone(), file_id);
|
||||||
|
|
Loading…
Reference in a new issue