diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-01-20 14:05:17 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-01-20 14:05:35 +0100 |
| commit | dd331f007cb9c9968605f8d3eaef8fb498c21322 (patch) | |
| tree | f1b1490758ec53fd204724a325158d16c980d131 /src/ide | |
| parent | 40561e57fbbc68becac07acd54a34f94f591f277 (diff) | |
Rewrite parser
Diffstat (limited to 'src/ide')
| -rw-r--r-- | src/ide/complete.rs | 8 | ||||
| -rw-r--r-- | src/ide/highlight.rs | 86 |
2 files changed, 45 insertions, 49 deletions
diff --git a/src/ide/complete.rs b/src/ide/complete.rs index 9e13fc8d..f0808b21 100644 --- a/src/ide/complete.rs +++ b/src/ide/complete.rs @@ -141,7 +141,7 @@ fn complete_params(ctx: &mut CompletionContext) -> bool { if let Some(param) = before_colon.cast::<ast::Ident>(); then { ctx.from = match ctx.leaf.kind() { - SyntaxKind::Colon | SyntaxKind::Space { .. } => ctx.cursor, + SyntaxKind::Colon | SyntaxKind::Space => ctx.cursor, _ => ctx.leaf.offset(), }; ctx.named_param_value_completions(&callee, ¶m); @@ -246,7 +246,7 @@ fn complete_symbols(ctx: &mut CompletionContext) -> bool { /// Complete in markup mode. fn complete_markup(ctx: &mut CompletionContext) -> bool { // Bail if we aren't even in markup. - if !matches!(ctx.leaf.parent_kind(), None | Some(SyntaxKind::Markup { .. })) { + if !matches!(ctx.leaf.parent_kind(), None | Some(SyntaxKind::Markup)) { return false; } @@ -325,7 +325,7 @@ fn complete_math(ctx: &mut CompletionContext) -> bool { fn complete_code(ctx: &mut CompletionContext) -> bool { if matches!( ctx.leaf.parent_kind(), - None | Some(SyntaxKind::Markup { .. }) | Some(SyntaxKind::Math) + None | Some(SyntaxKind::Markup) | Some(SyntaxKind::Math) ) { return false; } @@ -887,7 +887,7 @@ impl<'a> CompletionContext<'a> { self.snippet_completion( "import", - "import ${items} from \"${file.typ}\"", + "import \"${file.typ}\": ${items}", "Imports variables from another file.", ); diff --git a/src/ide/highlight.rs b/src/ide/highlight.rs index cc502537..42c05002 100644 --- a/src/ide/highlight.rs +++ b/src/ide/highlight.rs @@ -83,9 +83,41 @@ impl Category { /// highlighted. pub fn highlight(node: &LinkedNode) -> Option<Category> { match node.kind() { - SyntaxKind::LineComment => Some(Category::Comment), - SyntaxKind::BlockComment => Some(Category::Comment), - SyntaxKind::Space { .. } => None, + SyntaxKind::Markup + if node.parent_kind() == Some(SyntaxKind::TermItem) + && node.next_sibling().as_ref().map(|v| v.kind()) + == Some(SyntaxKind::Colon) => + { + Some(Category::ListTerm) + } + SyntaxKind::Markup => None, + SyntaxKind::Text => None, + SyntaxKind::Space => None, + SyntaxKind::Linebreak => Some(Category::Escape), + SyntaxKind::Parbreak => None, + SyntaxKind::Escape => Some(Category::Escape), + SyntaxKind::Shorthand => Some(Category::Escape), + SyntaxKind::Symbol => Some(Category::Escape), + SyntaxKind::SmartQuote => None, + SyntaxKind::Strong => Some(Category::Strong), + SyntaxKind::Emph => Some(Category::Emph), + SyntaxKind::Raw => Some(Category::Raw), + SyntaxKind::Link => Some(Category::Link), + SyntaxKind::Label => Some(Category::Label), + SyntaxKind::Ref => Some(Category::Ref), + SyntaxKind::Heading => Some(Category::Heading), + SyntaxKind::HeadingMarker => None, + SyntaxKind::ListItem => None, + SyntaxKind::ListMarker => Some(Category::ListMarker), + SyntaxKind::EnumItem => None, + SyntaxKind::EnumMarker => Some(Category::ListMarker), + SyntaxKind::TermItem => None, + SyntaxKind::TermMarker => Some(Category::ListMarker), + SyntaxKind::Math => None, + SyntaxKind::Atom => None, + SyntaxKind::Script => None, + SyntaxKind::Frac => None, + SyntaxKind::AlignPoint => Some(Category::MathOperator), SyntaxKind::LeftBrace => Some(Category::Punctuation), SyntaxKind::RightBrace => Some(Category::Punctuation), @@ -105,16 +137,9 @@ pub fn highlight(node: &LinkedNode) -> Option<Category> { _ => None, }, SyntaxKind::Dollar => Some(Category::MathDelimiter), - SyntaxKind::Plus => Some(match node.parent_kind() { - Some(SyntaxKind::EnumItem) => Category::ListMarker, - _ => Category::Operator, - }), - SyntaxKind::Minus => Some(match node.parent_kind() { - Some(SyntaxKind::ListItem) => Category::ListMarker, - _ => Category::Operator, - }), + SyntaxKind::Plus => Some(Category::Operator), + SyntaxKind::Minus => Some(Category::Operator), SyntaxKind::Slash => Some(match node.parent_kind() { - Some(SyntaxKind::TermItem) => Category::ListMarker, Some(SyntaxKind::Frac) => Category::MathOperator, _ => Category::Operator, }), @@ -157,41 +182,9 @@ pub fn highlight(node: &LinkedNode) -> Option<Category> { SyntaxKind::Include => Some(Category::Keyword), SyntaxKind::As => Some(Category::Keyword), - SyntaxKind::Markup { .. } - if node.parent_kind() == Some(SyntaxKind::TermItem) - && node.next_sibling().as_ref().map(|v| v.kind()) - == Some(SyntaxKind::Colon) => - { - Some(Category::ListTerm) - } - SyntaxKind::Markup { .. } => None, - - SyntaxKind::Text => None, - SyntaxKind::Linebreak => Some(Category::Escape), - SyntaxKind::Escape => Some(Category::Escape), - SyntaxKind::Shorthand => Some(Category::Escape), - SyntaxKind::Symbol => Some(Category::Escape), - SyntaxKind::SmartQuote { .. } => None, - SyntaxKind::Strong => Some(Category::Strong), - SyntaxKind::Emph => Some(Category::Emph), - SyntaxKind::Raw { .. } => Some(Category::Raw), - SyntaxKind::Link => Some(Category::Link), - SyntaxKind::Label => Some(Category::Label), - SyntaxKind::Ref => Some(Category::Ref), - SyntaxKind::Heading => Some(Category::Heading), - SyntaxKind::ListItem => None, - SyntaxKind::EnumItem => None, - SyntaxKind::EnumNumbering => Some(Category::ListMarker), - SyntaxKind::TermItem => None, - SyntaxKind::Math => None, - SyntaxKind::Atom => None, - SyntaxKind::Script => None, - SyntaxKind::Frac => None, - SyntaxKind::AlignPoint => Some(Category::MathOperator), - SyntaxKind::Ident => match node.parent_kind() { Some( - SyntaxKind::Markup { .. } + SyntaxKind::Markup | SyntaxKind::Math | SyntaxKind::Script | SyntaxKind::Frac, @@ -258,7 +251,10 @@ pub fn highlight(node: &LinkedNode) -> Option<Category> { SyntaxKind::LoopContinue => None, SyntaxKind::FuncReturn => None, + SyntaxKind::LineComment => Some(Category::Comment), + SyntaxKind::BlockComment => Some(Category::Comment), SyntaxKind::Error => Some(Category::Error), + SyntaxKind::Eof => None, } } |
