feat: find definition of label references (#235)

* feat: find definition of label references

* dev: move dependencies declaration

* dev: remove serde_spanned
This commit is contained in:
Myriad-Dreamin 2024-05-05 18:53:18 +08:00 committed by GitHub
parent c133d81d36
commit d774304574
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 563 additions and 37 deletions

View file

@ -3,7 +3,7 @@ use lsp_types::TextEdit;
use crate::{
analysis::find_definition, find_references, prelude::*, syntax::get_deref_target,
validate_renaming_definition, SemanticRequest,
validate_renaming_definition,
};
/// The [`textDocument/rename`] request is sent from the client to the server to
@ -21,10 +21,14 @@ pub struct RenameRequest {
pub new_name: String,
}
impl SemanticRequest for RenameRequest {
impl StatefulRequest for RenameRequest {
type Response = WorkspaceEdit;
fn request(self, ctx: &mut AnalysisContext) -> Option<Self::Response> {
fn request(
self,
ctx: &mut AnalysisContext,
doc: Option<VersionedDocument>,
) -> Option<Self::Response> {
let source = ctx.source_by_path(&self.path).ok()?;
let offset = ctx.to_typst_pos(self.position, &source)?;
@ -35,7 +39,7 @@ impl SemanticRequest for RenameRequest {
let deref_target = get_deref_target(ast_node, cursor)?;
let lnk = find_definition(ctx, source.clone(), deref_target.clone())?;
let lnk = find_definition(ctx, source.clone(), doc.as_ref(), deref_target.clone())?;
validate_renaming_definition(&lnk)?;