mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 12:29:21 +00:00
Better API
This commit is contained in:
parent
4bed588001
commit
17870a3e2c
8 changed files with 64 additions and 24 deletions
|
@ -20,15 +20,24 @@ impl FileSet {
|
|||
self.files.len()
|
||||
}
|
||||
pub fn resolve_path(&self, anchor: FileId, path: &str) -> Option<FileId> {
|
||||
let mut base = self.paths[&anchor].clone();
|
||||
let mut base = dbg!(self.paths[&anchor].clone());
|
||||
base.pop();
|
||||
let path = base.join(path)?;
|
||||
let path = dbg!(base).join(dbg!(path))?;
|
||||
self.files.get(&path).copied()
|
||||
}
|
||||
pub fn list_some_random_files_todo(&self, anchor: FileId) -> Vec<(FileId, String)> {
|
||||
let anchor_path = self.paths[&anchor].clone();
|
||||
|
||||
pub fn file_name_and_extension(&self, file: FileId) -> Option<(&str, &str)> {
|
||||
self.paths[&file].file_name_and_extension()
|
||||
}
|
||||
|
||||
pub fn list_files(&self, directory: FileId) -> Vec<(FileId, String)> {
|
||||
// TODO kb determine the ways to list all applicable files
|
||||
// Maybe leave list directory here only and the move the rest of the logic into the database impl?
|
||||
// cache results in Salsa?
|
||||
|
||||
dbg!(directory);
|
||||
/*
|
||||
[crates/vfs/src/file_set.rs:30] anchor_path = "/Users/someonetoignore/Downloads/tmp_dir/zzzz/src/lib.rs"
|
||||
[crates/vfs/src/file_set.rs:30] directory = "/Users/someonetoignore/Downloads/tmp_dir/zzzz/src/"
|
||||
[crates/vfs/src/file_set.rs:31] self.files.keys() = [
|
||||
"/Users/someonetoignore/Downloads/tmp_dir/zzzz/src/test_mod_1/test_mod_2/test_mod_3.rs",
|
||||
"/Users/someonetoignore/Downloads/tmp_dir/zzzz/src/test_mod_1/test_mod_2.rs",
|
||||
|
@ -38,15 +47,6 @@ impl FileSet {
|
|||
"/Users/someonetoignore/Downloads/tmp_dir/zzzz/src/test_mod_3.rs",
|
||||
]
|
||||
*/
|
||||
|
||||
// TODO kb determine the ways to list all applicable files
|
||||
// Maybe leave list directory here only and the move the rest of the logic into the database impl?
|
||||
|
||||
// Need to get the following things:
|
||||
// * name of the anchor_path file (file_name, validate that it's a file!)
|
||||
// * list of all files in the file's contai/ning directory (file_dir)
|
||||
// * list of all files in `file_dir/file_name` or just `file_dir/`, for lib.rs or mod.rs
|
||||
// * consider special case for /src/bin/foo.rs as a mod<|> source
|
||||
Vec::new()
|
||||
}
|
||||
pub fn insert(&mut self, file_id: FileId, path: VfsPath) {
|
||||
|
|
|
@ -49,6 +49,16 @@ impl VfsPath {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn file_name_and_extension(&self) -> Option<(&str, &str)> {
|
||||
match &self.0 {
|
||||
VfsPathRepr::PathBuf(p) => p
|
||||
.file_stem()
|
||||
.zip(p.extension())
|
||||
.and_then(|(name, extension)| Some((name.to_str()?, extension.to_str()?))),
|
||||
VfsPathRepr::VirtualPath(p) => p.file_name_and_extension(),
|
||||
}
|
||||
}
|
||||
|
||||
// Don't make this `pub`
|
||||
pub(crate) fn encode(&self, buf: &mut Vec<u8>) {
|
||||
let tag = match &self.0 {
|
||||
|
@ -268,4 +278,9 @@ impl VirtualPath {
|
|||
res.0 = format!("{}/{}", res.0, path);
|
||||
Some(res)
|
||||
}
|
||||
|
||||
pub fn file_name_and_extension(&self) -> Option<(&str, &str)> {
|
||||
// TODO kb check if is a file
|
||||
Some(("test_mod_1", "rs"))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue