Introduce anchored_path
They allow to represent paths like `#[path = "C:\path.rs"] mod foo;` in a lossless cross-platform & network-transparent way.
This commit is contained in:
@@ -4,7 +4,7 @@ use crate::{
|
||||
MacroDefId, MacroDefKind, TextSize,
|
||||
};
|
||||
|
||||
use base_db::FileId;
|
||||
use base_db::{AnchoredPath, FileId};
|
||||
use either::Either;
|
||||
use mbe::{parse_to_token_tree, ExpandResult};
|
||||
use parser::FragmentKind;
|
||||
@@ -324,7 +324,8 @@ fn relative_file(
|
||||
allow_recursion: bool,
|
||||
) -> Option<FileId> {
|
||||
let call_site = call_id.as_file().original_file(db);
|
||||
let res = db.resolve_path(call_site, path)?;
|
||||
let path = AnchoredPath { anchor: call_site, path };
|
||||
let res = db.resolve_path(path)?;
|
||||
// Prevent include itself
|
||||
if res == call_site && !allow_recursion {
|
||||
None
|
||||
|
||||
@@ -5,7 +5,7 @@ use std::{
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
|
||||
use base_db::{salsa, CrateId, FileId, FileLoader, FileLoaderDelegate};
|
||||
use base_db::{salsa, AnchoredPath, CrateId, FileId, FileLoader, FileLoaderDelegate};
|
||||
use rustc_hash::FxHashSet;
|
||||
|
||||
#[salsa::database(
|
||||
@@ -40,8 +40,8 @@ impl FileLoader for TestDB {
|
||||
fn file_text(&self, file_id: FileId) -> Arc<String> {
|
||||
FileLoaderDelegate(self).file_text(file_id)
|
||||
}
|
||||
fn resolve_path(&self, anchor: FileId, path: &str) -> Option<FileId> {
|
||||
FileLoaderDelegate(self).resolve_path(anchor, path)
|
||||
fn resolve_path(&self, path: AnchoredPath) -> Option<FileId> {
|
||||
FileLoaderDelegate(self).resolve_path(path)
|
||||
}
|
||||
fn relevant_crates(&self, file_id: FileId) -> Arc<FxHashSet<CrateId>> {
|
||||
FileLoaderDelegate(self).relevant_crates(file_id)
|
||||
|
||||
Reference in New Issue
Block a user