summaryrefslogtreecommitdiff
path: root/src/ide
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-01-20 14:05:17 +0100
committerLaurenz <laurmaedje@gmail.com>2023-01-20 14:05:35 +0100
commitdd331f007cb9c9968605f8d3eaef8fb498c21322 (patch)
treef1b1490758ec53fd204724a325158d16c980d131 /src/ide
parent40561e57fbbc68becac07acd54a34f94f591f277 (diff)
Rewrite parser
Diffstat (limited to 'src/ide')
-rw-r--r--src/ide/complete.rs8
-rw-r--r--src/ide/highlight.rs86
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, &param);
@@ -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,
}
}