mirror of
https://github.com/Myriad-Dreamin/tinymist.git
synced 2025-08-04 10:18:16 +00:00
dev: add Definition::file_id
(#1626)
This commit is contained in:
parent
ec5be5d2b0
commit
04c013f3a4
5 changed files with 21 additions and 17 deletions
|
@ -43,6 +43,11 @@ impl Definition {
|
|||
Some((fid, range))
|
||||
}
|
||||
|
||||
/// Gets file location of the definition.
|
||||
pub fn file_id(&self) -> Option<TypstFileId> {
|
||||
self.decl.file_id()
|
||||
}
|
||||
|
||||
/// The range of the name of the definition.
|
||||
pub fn name_range(&self, ctx: &SharedContext) -> Option<Range<usize>> {
|
||||
self.decl.name_range(ctx)
|
||||
|
|
|
@ -47,7 +47,7 @@ impl StatefulRequest for PrepareRenameRequest {
|
|||
let origin_selection_range = ctx.to_lsp_range(syntax.node().range(), &source);
|
||||
let def = ctx.def_of_syntax(&source, doc, syntax.clone())?;
|
||||
|
||||
let (name, range) = prepare_renaming(ctx, &syntax, &def)?;
|
||||
let (name, range) = prepare_renaming(&syntax, &def)?;
|
||||
|
||||
Some(PrepareRenameResponse::RangeWithPlaceholder {
|
||||
range: range.unwrap_or(origin_selection_range),
|
||||
|
@ -57,12 +57,11 @@ impl StatefulRequest for PrepareRenameRequest {
|
|||
}
|
||||
|
||||
pub(crate) fn prepare_renaming(
|
||||
ctx: &mut LocalContext,
|
||||
deref_target: &SyntaxClass,
|
||||
def: &Definition,
|
||||
) -> Option<(String, Option<LspRange>)> {
|
||||
let name = def.name().clone();
|
||||
let (def_fid, _name_range) = def.location(ctx.shared()).clone()?;
|
||||
let def_fid = def.file_id()?;
|
||||
|
||||
if WorkspaceResolver::is_package_file(def_fid) {
|
||||
crate::log_debug_ct!(
|
||||
|
|
|
@ -44,7 +44,7 @@ impl StatefulRequest for RenameRequest {
|
|||
|
||||
let def = ctx.def_of_syntax(&source, doc, syntax.clone())?;
|
||||
|
||||
prepare_renaming(ctx, &syntax, &def)?;
|
||||
prepare_renaming(&syntax, &def)?;
|
||||
|
||||
match syntax {
|
||||
// todo: abs path
|
||||
|
@ -56,7 +56,7 @@ impl StatefulRequest for RenameRequest {
|
|||
self.new_name
|
||||
};
|
||||
|
||||
let def_fid = def.location(ctx.shared())?.0;
|
||||
let def_fid = def.file_id()?;
|
||||
// todo: rename in untitled files
|
||||
let old_path = ctx.path_for_id(def_fid).ok()?.to_err().ok()?;
|
||||
|
||||
|
|
|
@ -438,6 +438,7 @@ impl Decl {
|
|||
}
|
||||
}
|
||||
|
||||
/// Gets file location of the declaration.
|
||||
pub fn file_id(&self) -> Option<TypstFileId> {
|
||||
match self {
|
||||
Self::Module(ModuleDecl { fid, .. }) => Some(*fid),
|
||||
|
@ -446,16 +447,16 @@ impl Decl {
|
|||
}
|
||||
}
|
||||
|
||||
// todo: name range
|
||||
/// The range of the name of the definition.
|
||||
/// Gets name range of the declaration.
|
||||
pub fn name_range(&self, ctx: &SharedContext) -> Option<Range<usize>> {
|
||||
if !self.is_def() {
|
||||
return None;
|
||||
}
|
||||
if let Decl::BibEntry(decl) = self {
|
||||
return Some(decl.at.1.clone());
|
||||
}
|
||||
|
||||
if !self.is_def() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let span = self.span();
|
||||
if let Some(range) = span.range() {
|
||||
return Some(range.clone());
|
||||
|
|
|
@ -536,7 +536,6 @@ impl InsTy {
|
|||
Value::Func(func) => func.span(),
|
||||
Value::Args(args) => args.span,
|
||||
Value::Content(content) => content.span(),
|
||||
// todo: module might have file id
|
||||
_ => return None,
|
||||
})
|
||||
})
|
||||
|
@ -966,9 +965,9 @@ impl SigTy {
|
|||
pub fn matches<'a>(
|
||||
&'a self,
|
||||
args: &'a SigTy,
|
||||
withs: Option<&'a Vec<Interned<crate::analysis::SigTy>>>,
|
||||
with: Option<&'a Vec<Interned<crate::analysis::SigTy>>>,
|
||||
) -> impl Iterator<Item = (&'a Ty, &'a Ty)> + 'a {
|
||||
let with_len = withs
|
||||
let with_len = with
|
||||
.map(|w| w.iter().map(|w| w.positional_params().len()).sum::<usize>())
|
||||
.unwrap_or(0);
|
||||
|
||||
|
@ -985,7 +984,7 @@ impl SigTy {
|
|||
0
|
||||
};
|
||||
|
||||
let arg_pos = withs
|
||||
let arg_pos = with
|
||||
.into_iter()
|
||||
.flat_map(|w| w.iter().rev().map(|w| w.positional_params()))
|
||||
.flatten()
|
||||
|
@ -995,7 +994,7 @@ impl SigTy {
|
|||
let arg_stream = arg_pos.chain(arg_rest.into_iter().cycle()).take(max_len);
|
||||
|
||||
let pos = sig_stream.zip(arg_stream);
|
||||
let common_ifaces = withs
|
||||
let common_ifaces = with
|
||||
.map(|args_all| args_all.iter().rev())
|
||||
.into_iter()
|
||||
.flatten()
|
||||
|
@ -1445,9 +1444,9 @@ mod tests {
|
|||
fn matches(
|
||||
sig: Interned<SigTy>,
|
||||
args: Interned<SigTy>,
|
||||
withs: Option<Vec<Interned<ArgsTy>>>,
|
||||
with: Option<Vec<Interned<ArgsTy>>>,
|
||||
) -> String {
|
||||
let res = sig.matches(&args, withs.as_ref()).collect::<Vec<_>>();
|
||||
let res = sig.matches(&args, with.as_ref()).collect::<Vec<_>>();
|
||||
format!("{res:?}")
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue