Only clone when required

This commit is contained in:
mo8it 2024-02-29 16:28:59 +01:00
parent 06a883e32f
commit 748f57c16d
4 changed files with 14 additions and 14 deletions

View File

@ -1075,12 +1075,12 @@ fn location_csv_pat(db: &RootDatabase, vfs: &Vfs, sm: &BodySourceMap, pat_id: Pa
format!("{path},{}:{},{}:{}", start.line + 1, start.col, end.line + 1, end.col) format!("{path},{}:{},{}:{}", start.line + 1, start.col, end.line + 1, end.col)
} }
fn expr_syntax_range( fn expr_syntax_range<'a>(
db: &RootDatabase, db: &RootDatabase,
vfs: &Vfs, vfs: &'a Vfs,
sm: &BodySourceMap, sm: &BodySourceMap,
expr_id: ExprId, expr_id: ExprId,
) -> Option<(VfsPath, LineCol, LineCol)> { ) -> Option<(&'a VfsPath, LineCol, LineCol)> {
let src = sm.expr_syntax(expr_id); let src = sm.expr_syntax(expr_id);
if let Ok(src) = src { if let Ok(src) = src {
let root = db.parse_or_expand(src.file_id); let root = db.parse_or_expand(src.file_id);
@ -1096,12 +1096,12 @@ fn expr_syntax_range(
None None
} }
} }
fn pat_syntax_range( fn pat_syntax_range<'a>(
db: &RootDatabase, db: &RootDatabase,
vfs: &Vfs, vfs: &'a Vfs,
sm: &BodySourceMap, sm: &BodySourceMap,
pat_id: PatId, pat_id: PatId,
) -> Option<(VfsPath, LineCol, LineCol)> { ) -> Option<(&'a VfsPath, LineCol, LineCol)> {
let src = sm.pat_syntax(pat_id); let src = sm.pat_syntax(pat_id);
if let Ok(src) = src { if let Ok(src) = src {
let root = db.parse_or_expand(src.file_id); let root = db.parse_or_expand(src.file_id);

View File

@ -297,7 +297,7 @@ pub(crate) fn process_changes(&mut self) -> bool {
let mut bytes = vec![]; let mut bytes = vec![];
let mut modified_rust_files = vec![]; let mut modified_rust_files = vec![];
for file in changed_files { for file in changed_files {
let vfs_path = &vfs.file_path(file.file_id); let vfs_path = vfs.file_path(file.file_id);
if let Some(path) = vfs_path.as_path() { if let Some(path) = vfs_path.as_path() {
let path = path.to_path_buf(); let path = path.to_path_buf();
if reload::should_refresh_for_change(&path, file.kind()) { if reload::should_refresh_for_change(&path, file.kind()) {
@ -481,7 +481,7 @@ pub(crate) fn url_file_version(&self, url: &Url) -> Option<i32> {
} }
pub(crate) fn anchored_path(&self, path: &AnchoredPathBuf) -> Url { pub(crate) fn anchored_path(&self, path: &AnchoredPathBuf) -> Url {
let mut base = self.vfs_read().file_path(path.anchor); let mut base = self.vfs_read().file_path(path.anchor).clone();
base.pop(); base.pop();
let path = base.join(&path.path).unwrap(); let path = base.join(&path.path).unwrap();
let path = path.as_path().unwrap(); let path = path.as_path().unwrap();
@ -489,7 +489,7 @@ pub(crate) fn anchored_path(&self, path: &AnchoredPathBuf) -> Url {
} }
pub(crate) fn file_id_to_file_path(&self, file_id: FileId) -> vfs::VfsPath { pub(crate) fn file_id_to_file_path(&self, file_id: FileId) -> vfs::VfsPath {
self.vfs_read().file_path(file_id) self.vfs_read().file_path(file_id).clone()
} }
pub(crate) fn cargo_target_for_crate_root( pub(crate) fn cargo_target_for_crate_root(
@ -497,7 +497,7 @@ pub(crate) fn cargo_target_for_crate_root(
crate_id: CrateId, crate_id: CrateId,
) -> Option<(&CargoWorkspace, Target)> { ) -> Option<(&CargoWorkspace, Target)> {
let file_id = self.analysis.crate_root(crate_id).ok()?; let file_id = self.analysis.crate_root(crate_id).ok()?;
let path = self.vfs_read().file_path(file_id); let path = self.vfs_read().file_path(file_id).clone();
let path = path.as_path()?; let path = path.as_path()?;
self.workspaces.iter().find_map(|ws| match ws { self.workspaces.iter().find_map(|ws| match ws {
ProjectWorkspace::Cargo { cargo, .. } => { ProjectWorkspace::Cargo { cargo, .. } => {

View File

@ -2097,7 +2097,7 @@ pub(crate) fn fetch_dependency_list(
.into_iter() .into_iter()
.filter_map(|it| { .filter_map(|it| {
let root_file_path = state.file_id_to_file_path(it.root_file_id); let root_file_path = state.file_id_to_file_path(it.root_file_id);
crate_path(root_file_path).and_then(to_url).map(|path| CrateInfoResult { crate_path(&root_file_path).and_then(to_url).map(|path| CrateInfoResult {
name: it.name, name: it.name,
version: it.version, version: it.version,
path, path,
@ -2118,7 +2118,7 @@ pub(crate) fn fetch_dependency_list(
/// An `Option` value representing the path to the directory of the crate with the given /// An `Option` value representing the path to the directory of the crate with the given
/// name, if such a crate is found. If no crate with the given name is found, this function /// name, if such a crate is found. If no crate with the given name is found, this function
/// returns `None`. /// returns `None`.
fn crate_path(root_file_path: VfsPath) -> Option<VfsPath> { fn crate_path(root_file_path: &VfsPath) -> Option<VfsPath> {
let mut current_dir = root_file_path.parent(); let mut current_dir = root_file_path.parent();
while let Some(path) = current_dir { while let Some(path) = current_dir {
let cargo_toml_path = path.join("../Cargo.toml")?; let cargo_toml_path = path.join("../Cargo.toml")?;

View File

@ -163,8 +163,8 @@ pub fn file_id(&self, path: &VfsPath) -> Option<FileId> {
/// # Panics /// # Panics
/// ///
/// Panics if the id is not present in the `Vfs`. /// Panics if the id is not present in the `Vfs`.
pub fn file_path(&self, file_id: FileId) -> VfsPath { pub fn file_path(&self, file_id: FileId) -> &VfsPath {
self.interner.lookup(file_id).clone() self.interner.lookup(file_id)
} }
/// Returns an iterator over the stored ids and their corresponding paths. /// Returns an iterator over the stored ids and their corresponding paths.