From 96cdab38f619ea2d504c1256e06af6b5a1ac3d55 Mon Sep 17 00:00:00 2001 From: Myriad-Dreamin <35292584+Myriad-Dreamin@users.noreply.github.com> Date: Thu, 27 Feb 2025 14:48:57 +0800 Subject: [PATCH] feat: match named arg parent in literals (#1418) --- .../tinymist-analysis/src/syntax/matcher.rs | 14 +++++ .../fixtures/completion/modify_string_3.typ | 3 ++ .../snaps/test@modify_string_3.typ.snap | 54 +++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 crates/tinymist-query/src/fixtures/completion/modify_string_3.typ create mode 100644 crates/tinymist-query/src/fixtures/completion/snaps/test@modify_string_3.typ.snap diff --git a/crates/tinymist-analysis/src/syntax/matcher.rs b/crates/tinymist-analysis/src/syntax/matcher.rs index 338043f9..53ca1eb2 100644 --- a/crates/tinymist-analysis/src/syntax/matcher.rs +++ b/crates/tinymist-analysis/src/syntax/matcher.rs @@ -1240,6 +1240,20 @@ fn arg_context<'a>( Some(ArgClass::Named(args_node.find(param_ident.span())?)) } _ => { + let parent = node.parent(); + if let Some(parent) = parent { + if parent.kind() == SyntaxKind::Named { + let param_ident = parent.cast::()?; + let name = param_ident.name(); + let init = param_ident.expr(); + let init = parent.find(init.span())?; + if init.range().contains(&node.offset()) { + let name = args_node.find(name.span())?; + return Some(ArgClass::Named(name)); + } + } + } + let mut spreads = EcoVec::new(); let mut positional = 0; let is_spread = node.kind() == SyntaxKind::Spread; diff --git a/crates/tinymist-query/src/fixtures/completion/modify_string_3.typ b/crates/tinymist-query/src/fixtures/completion/modify_string_3.typ new file mode 100644 index 00000000..1a2b991b --- /dev/null +++ b/crates/tinymist-query/src/fixtures/completion/modify_string_3.typ @@ -0,0 +1,3 @@ +/// contains: "New Computer Modern" + +#set text(font: (name: "" /* range -2..0 */)) diff --git a/crates/tinymist-query/src/fixtures/completion/snaps/test@modify_string_3.typ.snap b/crates/tinymist-query/src/fixtures/completion/snaps/test@modify_string_3.typ.snap new file mode 100644 index 00000000..095e9642 --- /dev/null +++ b/crates/tinymist-query/src/fixtures/completion/snaps/test@modify_string_3.typ.snap @@ -0,0 +1,54 @@ +--- +source: crates/tinymist-query/src/completion.rs +description: "Completion on \" (63..65)" +expression: "JsonRepr::new_pure(results)" +input_file: crates/tinymist-query/src/fixtures/completion/modify_string_3.typ +--- +[ + { + "isIncomplete": false, + "items": [ + { + "kind": 6, + "label": "\"New Computer Modern\"", + "sortText": "003", + "textEdit": { + "newText": "New Computer Modern", + "range": { + "end": { + "character": 24, + "line": 2 + }, + "start": { + "character": 24, + "line": 2 + } + } + } + } + ] + }, + { + "isIncomplete": false, + "items": [ + { + "kind": 6, + "label": "\"New Computer Modern\"", + "sortText": "003", + "textEdit": { + "newText": "New Computer Modern\"", + "range": { + "end": { + "character": 25, + "line": 2 + }, + "start": { + "character": 25, + "line": 2 + } + } + } + } + ] + } +]