mirror of
https://github.com/Myriad-Dreamin/tinymist.git
synced 2025-11-29 06:51:26 +00:00
feat: only complete if the next line is a function definition (#1740)
* test: add `paper.typ` for e2e testing * feat: only complete if the next line is a function definition
This commit is contained in:
parent
8f0d9c25d7
commit
90efb38c7e
7 changed files with 85 additions and 5 deletions
|
|
@ -9,15 +9,28 @@ impl CompletionPair<'_, '_, '_> {
|
||||||
if_chain! {
|
if_chain! {
|
||||||
if text == "///" || text == "/// ";
|
if text == "///" || text == "/// ";
|
||||||
// hash node
|
// hash node
|
||||||
if let Some(next) = self.cursor.leaf.next_leaf();
|
if let Some(hash_node) = self.cursor.leaf.next_leaf();
|
||||||
// let node
|
// let node
|
||||||
if let Some(next_next) = next.next_leaf();
|
if let Some(let_node) = hash_node.next_leaf();
|
||||||
if let Some(next_next) = next_next.next_leaf();
|
if let Some(let_closure) = let_node.next_leaf();
|
||||||
if matches!(next_next.parent_kind(), Some(SyntaxKind::Closure));
|
if matches!(let_closure.parent_kind(), Some(SyntaxKind::Closure));
|
||||||
if let Some(closure) = next_next.parent();
|
if let Some(closure) = let_closure.parent();
|
||||||
if let Some(closure) = closure.cast::<ast::Expr>();
|
if let Some(closure) = closure.cast::<ast::Expr>();
|
||||||
if let ast::Expr::Closure(c) = closure;
|
if let ast::Expr::Closure(c) = closure;
|
||||||
then {
|
then {
|
||||||
|
// Only completes if the next line is a function definition
|
||||||
|
let rng = self.cursor.leaf.offset()..hash_node.offset();
|
||||||
|
let text_between = &self.cursor.source.text()[rng];
|
||||||
|
let mut line_count = 0;
|
||||||
|
for ch in text_between.chars() {
|
||||||
|
if ch == '\n' {
|
||||||
|
line_count += 1;
|
||||||
|
}
|
||||||
|
if line_count > 1 {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let mut doc_snippet: String = if text == "///" {
|
let mut doc_snippet: String = if text == "///" {
|
||||||
" $0\n///".to_string()
|
" $0\n///".to_string()
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
/// contains: Document function
|
||||||
|
|
||||||
|
/* range after 4..5 */
|
||||||
|
///
|
||||||
|
#let f(x, y) = x + y
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
/// contains: Document function
|
||||||
|
|
||||||
|
/* range after 4..5 */
|
||||||
|
///
|
||||||
|
|
||||||
|
#let f(x, y) = x + y
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
---
|
||||||
|
source: crates/tinymist-query/src/completion.rs
|
||||||
|
description: "Completion on \n (59..60)"
|
||||||
|
expression: "JsonRepr::new_pure(results)"
|
||||||
|
input_file: crates/tinymist-query/src/fixtures/completion/comment_docs.typ
|
||||||
|
---
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"isIncomplete": false,
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"kind": 21,
|
||||||
|
"label": "Document function",
|
||||||
|
"textEdit": {
|
||||||
|
"newText": " $0\n///\n/// - x ($1): $2\n/// - y ($3): $4\n/// -> $5",
|
||||||
|
"range": {
|
||||||
|
"end": {
|
||||||
|
"character": 3,
|
||||||
|
"line": 3
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"character": 3,
|
||||||
|
"line": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
source: crates/tinymist-query/src/completion.rs
|
||||||
|
description: "Completion on \n (59..60)"
|
||||||
|
expression: "JsonRepr::new_pure(results)"
|
||||||
|
input_file: crates/tinymist-query/src/fixtures/completion/comment_docs_far.typ
|
||||||
|
---
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"isIncomplete": false,
|
||||||
|
"items": []
|
||||||
|
}
|
||||||
|
]
|
||||||
6
editors/vscode/e2e-workspaces/simple-docs/paper.typ
Normal file
6
editors/vscode/e2e-workspaces/simple-docs/paper.typ
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
#ref(/* position after */ <Russell:1908>)
|
||||||
|
|
||||||
|
@Russell:1908
|
||||||
|
|
||||||
|
#bibliography("references.bib")
|
||||||
8
editors/vscode/e2e-workspaces/simple-docs/references.bib
Normal file
8
editors/vscode/e2e-workspaces/simple-docs/references.bib
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
@article{Russell:1908,
|
||||||
|
Author = {Bertand Russell},
|
||||||
|
Journal = {American Journal of Mathematics},
|
||||||
|
Pages = {222--262},
|
||||||
|
Title = {Mathematical logic based on the theory of types},
|
||||||
|
Volume = 30,
|
||||||
|
Year = 1908}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue