From 99b1e8ad89aa73b60b43a66a723c52f4b13b97ae Mon Sep 17 00:00:00 2001 From: Clay Date: Tue, 23 Aug 2022 17:12:04 -0700 Subject: [PATCH 01/14] Fix markdown indented code block rendering (#3503) --- helix-term/src/ui/markdown.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/helix-term/src/ui/markdown.rs b/helix-term/src/ui/markdown.rs index c53b3b66..a0b299e7 100644 --- a/helix-term/src/ui/markdown.rs +++ b/helix-term/src/ui/markdown.rs @@ -229,10 +229,7 @@ impl Markdown { Event::End(tag) => { tags.pop(); match tag { - Tag::Heading(_, _, _) - | Tag::Paragraph - | Tag::CodeBlock(CodeBlockKind::Fenced(_)) - | Tag::Item => { + Tag::Heading(_, _, _) | Tag::Paragraph | Tag::CodeBlock(_) | Tag::Item => { push_line(&mut spans, &mut lines); } _ => (), @@ -240,17 +237,18 @@ impl Markdown { // whenever heading, code block or paragraph closes, empty line match tag { - Tag::Heading(_, _, _) - | Tag::Paragraph - | Tag::CodeBlock(CodeBlockKind::Fenced(_)) => { + Tag::Heading(_, _, _) | Tag::Paragraph | Tag::CodeBlock(_) => { lines.push(Spans::default()); } _ => (), } } Event::Text(text) => { - // TODO: temp workaround - if let Some(Tag::CodeBlock(CodeBlockKind::Fenced(language))) = tags.last() { + if let Some(Tag::CodeBlock(kind)) = tags.last() { + let language = match kind { + CodeBlockKind::Fenced(language) => language, + CodeBlockKind::Indented => "", + }; let tui_text = highlighted_code_block( text.to_string(), language, From 6b912b864195e0781b186e50b91050ed5c9b0e3d Mon Sep 17 00:00:00 2001 From: ChemicalXandco <32775248+ChemicalXandco@users.noreply.github.com> Date: Wed, 24 Aug 2022 02:52:01 +0100 Subject: [PATCH 02/14] add syntax highlights for xit (#3521) --- book/src/generated/lang-support.md | 1 + languages.toml | 13 ++++++++++++- runtime/queries/xit/highlights.scm | 11 +++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 runtime/queries/xit/highlights.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index e9ef56cf..62d7a04f 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -112,5 +112,6 @@ | verilog | ✓ | ✓ | | `svlangserver` | | vue | ✓ | | | `vls` | | wgsl | ✓ | | | `wgsl_analyzer` | +| xit | ✓ | | | | | yaml | ✓ | | ✓ | `yaml-language-server` | | zig | ✓ | | ✓ | `zls` | diff --git a/languages.toml b/languages.toml index 5772be47..2b56e332 100644 --- a/languages.toml +++ b/languages.toml @@ -1493,7 +1493,6 @@ indent = { tab-width = 2, unit = " " } name = "jsdoc" source = { git = "https://github.com/tree-sitter/tree-sitter-jsdoc", rev = "189a6a4829beb9cdbe837260653b4a3dfb0cc3db" } - [[language]] name = "openscad" scope = "source.openscad" @@ -1653,3 +1652,15 @@ indent = { tab-width = 2, unit = " " } [[grammar]] name = "task" source = { git = "https://github.com/alexanderbrevig/tree-sitter-task", rev = "f2cb435c5dbf3ee19493e224485d977cb2d36d8b" } + +[[language]] +name = "xit" +scope = "source.xit" +injection-regex = "xit" +file-types = ["xit"] +roots = [] +indent = { tab-width = 4, unit = " " } + +[[grammar]] +name = "xit" +source = { git = "https://github.com/synaptiko/tree-sitter-xit", rev = "7d7902456061bc2ad21c64c44054f67b5515734c" } diff --git a/runtime/queries/xit/highlights.scm b/runtime/queries/xit/highlights.scm new file mode 100644 index 00000000..c94b89ad --- /dev/null +++ b/runtime/queries/xit/highlights.scm @@ -0,0 +1,11 @@ +(headline) @markup.heading + +(open_checkbox) @markup.list +(ongoing_checkbox) @keyword.control +(checked_checkbox) @diff.plus +(obsolete_checkbox) @comment.unused + +(checked_task) @comment.unused +(obsolete_task) @comment.unused + +(priority) @error From ccae718a67f39542281125610764b733d90b26f8 Mon Sep 17 00:00:00 2001 From: seb-bl <31244011+seb-bl@users.noreply.github.com> Date: Wed, 24 Aug 2022 04:35:57 +0200 Subject: [PATCH 03/14] Improve dart indent (#3419) --- languages.toml | 2 +- runtime/queries/dart/indents.scm | 98 +++++++++++++++++++++++++++++--- 2 files changed, 90 insertions(+), 10 deletions(-) diff --git a/languages.toml b/languages.toml index 2b56e332..cf834d35 100644 --- a/languages.toml +++ b/languages.toml @@ -923,7 +923,7 @@ indent = { tab-width = 2, unit = " " } [[grammar]] name = "dart" -source = { git = "https://github.com/UserNobody14/tree-sitter-dart", rev = "6a25376685d1d47968c2cef06d4db8d84a70025e" } +source = { git = "https://github.com/UserNobody14/tree-sitter-dart", rev = "2d7f66651c9319c1a0e4dda226cc2628fbb66528" } [[language]] name = "scala" diff --git a/runtime/queries/dart/indents.scm b/runtime/queries/dart/indents.scm index 14c6a375..cdb96ae8 100644 --- a/runtime/queries/dart/indents.scm +++ b/runtime/queries/dart/indents.scm @@ -1,16 +1,95 @@ +; things surrounded by ({[]}) [ - (class_body) - (function_body) - (function_expression_body) - (declaration) - (initializers) + (template_substitution) + (list_literal) + (set_or_map_literal) + (parenthesized_expression) + (arguments) + (index_selector) + (block) + (assertion_arguments) (switch_block) - (if_statement) + (catch_parameters) + (for_loop_parts) + (configuration_uri_condition) + (enum_body) + (class_body) + (extension_body) + (parameter_type_list) + (optional_positional_parameter_types) + (named_parameter_types) (formal_parameter_list) - (formal_parameter) - (list_literal) + (optional_formal_parameters) +] @indent + +; control flow statement which accept one line as body + +(for_statement + body: _ @indent + (#not-kind-eq? @indent block) + (#set! "scope" "all") +) + +(while_statement + body: _ @indent + (#not-kind-eq? @indent block) + (#set! "scope" "all") +) + +(do_statement + body: _ @indent + (#not-kind-eq? @indent block) + (#set! "scope" "all") +) + +(if_statement + consequence: _ @indent + (#not-kind-eq? @indent block) + (#set! "scope" "all") +) +(if_statement + alternative: _ @indent + (#not-kind-eq? @indent if_statement) + (#not-kind-eq? @indent block) + (#set! "scope" "all") +) +(if_statement + "else" @else + alternative: (if_statement) @indent + (#not-same-line? @indent @else) + (#set! "scope" "all") +) + +(if_element + consequence: _ @indent + (#set! "scope" "all") +) +(if_element + alternative: _ @indent + (#not-kind-eq? @indent if_element) + (#set! "scope" "all") +) +(if_element + "else" @else + alternative: (if_element) @indent + (#not-same-line? @indent @else) + (#set! "scope" "all") +) + +(for_element + body: _ @indent + (#set! "scope" "all") +) + +; simple statements +[ + (local_variable_declaration) + (break_statement) + (continue_statement) (return_statement) - (arguments) + (yield_statement) + (yield_each_statement) + (expression_statement) ] @indent [ @@ -18,3 +97,4 @@ "]" ")" ] @outdent + From 2b16fd43f901753fcedd87b9687ce535c4108203 Mon Sep 17 00:00:00 2001 From: Jaden Date: Wed, 24 Aug 2022 07:51:10 -0700 Subject: [PATCH 04/14] feat(lang): Add esdl grammar (#3526) --- book/src/generated/lang-support.md | 1 + languages.toml | 13 +++++ runtime/queries/esdl/highlights.scm | 74 +++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 runtime/queries/esdl/highlights.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 62d7a04f..12a42931 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -24,6 +24,7 @@ | elvish | ✓ | | | `elvish` | | erb | ✓ | | | | | erlang | ✓ | ✓ | | `erlang_ls` | +| esdl | ✓ | | | | | fish | ✓ | ✓ | ✓ | | | fortran | ✓ | | ✓ | `fortls` | | gdscript | ✓ | | ✓ | | diff --git a/languages.toml b/languages.toml index cf834d35..cfacf27f 100644 --- a/languages.toml +++ b/languages.toml @@ -1664,3 +1664,16 @@ indent = { tab-width = 4, unit = " " } [[grammar]] name = "xit" source = { git = "https://github.com/synaptiko/tree-sitter-xit", rev = "7d7902456061bc2ad21c64c44054f67b5515734c" } + +[[language]] +name = "esdl" +scope = "source.esdl" +injection-regex = "esdl" +file-types = ["esdl"] +comment-token = "#" +indent = { tab-width = 2, unit = " " } +roots = ["edgedb.toml"] + +[[grammar]] +name ="esdl" +source = { git = "https://github.com/greym0uth/tree-sitter-esdl", rev = "b840c8a8028127e0a7c6e6c45141adade2bd75cf" } diff --git a/runtime/queries/esdl/highlights.scm b/runtime/queries/esdl/highlights.scm new file mode 100644 index 00000000..7dfde022 --- /dev/null +++ b/runtime/queries/esdl/highlights.scm @@ -0,0 +1,74 @@ +; Keywords +[ + "module" + "using" + "single" + "multi" + "link" + "property" + "constraint" + "tuple" + "annotation" + "abstract" + "scalar" + "type" + "required" + "optional" + "extension" + "function" +] @keyword + +(modifier) @keyword +(extending) @keyword + +(module name: (identifier) @namespace) +(object_type) @type + +(comment) @comment + +; Properties +(property) @variable.other.member +(link) @variable.other.member +(annotation) @variable.other.member + +(identifier) @variable +(string) @string +(edgeql_fragment) @string +; Builtins + +(type) @type +[ + "str" + "bool" + "int16" + "int32" + "int64" + "float32" + "float64" + "bigint" + "decimal" + "json" + "uuid" + "bytes" + "datetime" + "duration" + "sequence" + "anytype" +] @type.builtin + +(true) @constant.builtin +(false) @constant.builtin +(null) @constant.builtin + +; Delimiters +[ + ";" + "," +] @punctuation.delimiter + +; Operators +[ + "->" + ":=" +] @operator + From 77f11bf272b1e7286f1ad77cba29ede7393665c3 Mon Sep 17 00:00:00 2001 From: Christoph Horn Date: Mon, 22 Aug 2022 14:22:48 +0200 Subject: [PATCH 05/14] Julia queries: update grammar, fix breaking changes --- languages.toml | 2 +- runtime/queries/julia/highlights.scm | 23 ++++++++++++++--------- runtime/queries/julia/injections.scm | 11 +++++++---- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/languages.toml b/languages.toml index cfacf27f..38af1310 100644 --- a/languages.toml +++ b/languages.toml @@ -571,7 +571,7 @@ indent = { tab-width = 4, unit = " " } [[grammar]] name = "julia" -source = { git = "https://github.com/tree-sitter/tree-sitter-julia", rev = "12ea597262125fc22fd2e91aa953ac69b19c26ca" } +source = { git = "https://github.com/tree-sitter/tree-sitter-julia", rev = "fc60b7cce87da7a1b7f8cb0f9371c3dc8b684500" } [[language]] name = "java" diff --git a/runtime/queries/julia/highlights.scm b/runtime/queries/julia/highlights.scm index 7c447985..31848888 100644 --- a/runtime/queries/julia/highlights.scm +++ b/runtime/queries/julia/highlights.scm @@ -1,10 +1,7 @@ -[ - (triple_string) - (string) -] @string +(string_literal) @string -(string +(prefixed_string_literal prefix: (identifier) @constant.builtin) (macro_identifier) @function.macro @@ -80,7 +77,9 @@ (struct_definition name: (identifier) @type) -(number) @constant.numeric.integer +(integer_literal) @constant.numeric.integer +(float_literal) @constant.numeric.float + (range_expression (identifier) @constant.numeric.integer (eq? @constant.numeric.integer "end")) @@ -89,7 +88,10 @@ (identifier) @constant.numeric.integer (eq? @constant.numeric.integer "end"))) (coefficient_expression - (number) + [ + (integer_literal) + (float_literal) + ] (identifier) @constant.builtin) ;; TODO: operators. @@ -117,7 +119,10 @@ (function_definition ["function" "end"] @keyword.function) -(comment) @comment +[ + (line_comment) + (block_comment) +] @comment [ "const" @@ -171,7 +176,7 @@ (((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "false")) -["::" ":" "." "," "..." "!"] @punctuation.delimiter +["::" ":" "." "," "..."] @punctuation.delimiter ["[" "]" "(" ")" "{" "}"] @punctuation.bracket ["="] @operator diff --git a/runtime/queries/julia/injections.scm b/runtime/queries/julia/injections.scm index 1c1e804e..3eab231f 100644 --- a/runtime/queries/julia/injections.scm +++ b/runtime/queries/julia/injections.scm @@ -1,5 +1,8 @@ -((triple_string) @injection.content - (#set! injection.language "markdown")) +; ((string_literal) @injection.content +; (#set! injection.language "markdown")) -((comment) @injection.content - (#set! injection.language "comment")) +; ((line_comment) @injection.content +; (#set! injection.language "comment")) + +; ((block_comment) @injection.content +; (#set! injection.language "comment")) From f5c00b9bc9bb92238893e0a82c7d678d891aa624 Mon Sep 17 00:00:00 2001 From: Christoph Horn Date: Mon, 22 Aug 2022 18:13:21 +0200 Subject: [PATCH 06/14] Julia queries: major refactoring of `highlights.scm`, add regex injections, locals --- runtime/queries/julia/highlights.scm | 325 ++++++++++++++++----------- runtime/queries/julia/injections.scm | 20 +- runtime/queries/julia/locals.scm | 82 +++---- 3 files changed, 238 insertions(+), 189 deletions(-) diff --git a/runtime/queries/julia/highlights.scm b/runtime/queries/julia/highlights.scm index 31848888..c4f6999a 100644 --- a/runtime/queries/julia/highlights.scm +++ b/runtime/queries/julia/highlights.scm @@ -1,112 +1,142 @@ +; ---------- +; Primitives +; ---------- + +[ + (line_comment) + (block_comment) +] @comment + +(((identifier) @constant.builtin) (match? @constant.builtin "^(nothing|missing|Inf|NaN)$")) +(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "true")) +(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "false")) + +(integer_literal) @constant.numeric.integer +(float_literal) @constant.numeric.float + +(character_literal) @constant.character +(escape_sequence) @constant.character.escape (string_literal) @string (prefixed_string_literal - prefix: (identifier) @constant.builtin) + prefix: (identifier) @function.macro) @string -(macro_identifier) @function.macro -(macro_identifier (identifier) @function.macro) ; for any one using the variable highlight -(macro_definition - name: (identifier) @function.macro - ["macro" "end" @keyword]) +(quote_expression + (identifier) @string.special.symbol) + +; ------------------- +; Modules and Imports +; ------------------- + +(module_definition + name: (identifier) @namespace) + +(import_statement + (identifier) @namespace) + +(selected_import + . (identifier) @namespace) + +(scoped_identifier + (identifier) @namespace) + +; ----- +; Types +; ----- + +(abstract_definition + name: (identifier) @type) + +(primitive_definition + name: (identifier) @type) -(field_expression - (identifier) - (identifier) @variable.other.member .) +(struct_definition + name: (identifier) @type) + +(struct_definition + . (_) + (identifier) @variable.other.member) + +(struct_definition + . (_) + (typed_expression + . (identifier) @variable.other.member)) + +(type_parameter_list + (identifier) @type) + +(constrained_parameter + (identifier) @type) + +(subtype_clause + (identifier) @type) + +(typed_expression + (identifier) @type . ) + +(parameterized_identifier + (identifier) @type) + +(type_argument_list + (identifier) @type) + +; ------------------- +; Function definition +; ------------------- (function_definition name: (identifier) @function) -(call_expression - (identifier) @function) -(call_expression - (field_expression (identifier) @function.method .)) -(broadcast_call_expression - (identifier) @function) -(broadcast_call_expression - (field_expression (identifier) @function.method .)) + (parameter_list (identifier) @variable.parameter) -(parameter_list - (optional_parameter . - (identifier) @variable.parameter)) -(typed_parameter - (identifier) @variable.parameter - (identifier) @type) -(type_parameter_list - (identifier) @type) + (typed_parameter (identifier) @variable.parameter - (parameterized_identifier) @type) -(function_expression + (identifier)? @type) + +(optional_parameter . (identifier) @variable.parameter) -(spread_parameter) @variable.parameter + (spread_parameter (identifier) @variable.parameter) -(named_argument - . (identifier) @variable.parameter) -(argument_list - (typed_expression - (identifier) @variable.parameter - (identifier) @type)) -(argument_list - (typed_expression - (identifier) @variable.parameter - (parameterized_identifier) @type)) -;; Symbol expressions (:my-wanna-be-lisp-keyword) -(quote_expression - (identifier)) @string.special.symbol +(function_expression + . (identifier) @variable.parameter) -;; Parsing error! foo (::Type) get's parsed as two quote expressions -(argument_list - (quote_expression - (quote_expression - (identifier) @type))) +; --------------- +; Functions calls +; --------------- -(type_argument_list - (identifier) @type) -(parameterized_identifier (_)) @type -(argument_list - (typed_expression . (identifier) @variable.parameter)) +(call_expression + (identifier) @function) -(typed_expression - (identifier) @type .) -(typed_expression - (parameterized_identifier) @type .) +(broadcast_call_expression + (identifier) @function) -(struct_definition - name: (identifier) @type) +(call_expression + (field_expression (identifier) @function .)) -(integer_literal) @constant.numeric.integer -(float_literal) @constant.numeric.float +(broadcast_call_expression + (field_expression (identifier) @function .)) + +; ------ +; Macros +; ------ + +(macro_definition + name: (identifier) @function.macro) -(range_expression - (identifier) @constant.numeric.integer - (eq? @constant.numeric.integer "end")) -(range_expression - (_ - (identifier) @constant.numeric.integer - (eq? @constant.numeric.integer "end"))) -(coefficient_expression - [ - (integer_literal) - (float_literal) - ] - (identifier) @constant.builtin) - -;; TODO: operators. -;; Those are a bit difficult to implement since the respective nodes are hidden right now (_power_operator) -;; and heavily use Unicode chars (support for those are bad in vim/lua regexes) -;[; - ;(power_operator); - ;(times_operator); - ;(plus_operator); - ;(arrow_operator); - ;(comparison_operator); - ;(assign_operator); -;] @operator ; - -"end" @keyword +(macro_identifier + "@" @function.macro + (identifier) @function.macro) + +; -------- +; Keywords +; -------- + +(function_definition + ["function" "end"] @keyword.function) (if_statement ["if" "end"] @keyword.control.conditional) @@ -117,36 +147,6 @@ (ternary_expression ["?" ":"] @keyword.control.conditional) -(function_definition ["function" "end"] @keyword.function) - -[ - (line_comment) - (block_comment) -] @comment - -[ - "const" - "return" - "macro" - "struct" - "primitive" - "type" -] @keyword - -((identifier) @keyword (match? @keyword "global|local")) - -(compound_expression - ["begin" "end"] @keyword) -(try_statement - ["try" "end" ] @keyword.control.exception) -(finally_clause - "finally" @keyword.control.exception) -(catch_clause - "catch" @keyword.control.exception) -(quote_statement - ["quote" "end"] @keyword) -(let_statement - ["let" "end"] @keyword) (for_statement ["for" "end"] @keyword.control.repeat) (while_statement @@ -157,33 +157,90 @@ "in" @keyword.control.repeat) (for_clause "for" @keyword.control.repeat) -(do_clause - ["do" "end"] @keyword) -(export_statement - ["export"] @keyword.control.import) +(try_statement + ["try" "end" ] @keyword.control.exception) +(finally_clause + "finally" @keyword.control.exception) +(catch_clause + "catch" @keyword.control.exception) [ - "using" - "module" + "export" "import" + "using" ] @keyword.control.import -((identifier) @keyword.control.import (#eq? @keyword.control.import "baremodule")) +[ + "abstract" + "begin" + "const" + "do" + "end" + "let" + "macro" + "module" + "mutable" + "primitive" + "quote" + "return" + "struct" + "type" +] @keyword + +; TODO: fix this +((identifier) @keyword (match? @keyword "global|local")) -(((identifier) @constant.builtin) (match? @constant.builtin "^(nothing|Inf|NaN)$")) -(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "true")) -(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "false")) +; --------- +; Operators +; --------- + +[ + (operator) + "::" + "<:" + ":" + "=>" + "..." + "$" +] @operator + +; ------------ +; Punctuations +; ------------ + +[ + "." + "," + ";" +] @punctuation.delimiter + +[ + "[" + "]" + "(" + ")" + "{" + "}" +] @punctuation.bracket + +; --------------------- +; Remaining identifiers +; --------------------- + +; could also be namespace but this should cover the majority +(field_expression + . (_) + (identifier) @variable.other.member) +(const_statement + (variable_declaration + . (identifier) @constant)) -["::" ":" "." "," "..."] @punctuation.delimiter -["[" "]" "(" ")" "{" "}"] @punctuation.bracket +((identifier) @type + (match? @type "([A-Z][a-z0-9]+)+$")) -["="] @operator +((identifier) @constant + (match? @constant "^[A-Z][A-Z0-9_]+$")) (identifier) @variable -;; In case you want type highlighting based on Julia naming conventions (this might collide with mathematical notation) -;((identifier) @type ; exception: mark `A_foo` sort of identifiers as variables - ;(match? @type "^[A-Z][^_]")) -((identifier) @constant - (match? @constant "^[A-Z][A-Z_]{2}[A-Z_]*$")) diff --git a/runtime/queries/julia/injections.scm b/runtime/queries/julia/injections.scm index 3eab231f..caed916f 100644 --- a/runtime/queries/julia/injections.scm +++ b/runtime/queries/julia/injections.scm @@ -1,8 +1,16 @@ -; ((string_literal) @injection.content -; (#set! injection.language "markdown")) +( + (string_literal) @injection.content + (#set! injection.language "markdown")) -; ((line_comment) @injection.content -; (#set! injection.language "comment")) +( + [ + (line_comment) + (block_comment) + ] @injection.content + (#set! injection.language "comment")) -; ((block_comment) @injection.content -; (#set! injection.language "comment")) +( + (prefixed_string_literal + prefix: (identifier) @function.macro) @injection.content + (#eq? @function.macro "re") + (#set! injection.language "regex")) diff --git a/runtime/queries/julia/locals.scm b/runtime/queries/julia/locals.scm index d5ac794e..07b96f2c 100644 --- a/runtime/queries/julia/locals.scm +++ b/runtime/queries/julia/locals.scm @@ -1,59 +1,43 @@ +; ----------- +; Definitions +; ----------- +; Imports (import_statement - (identifier) @definition.import) -(variable_declaration - (identifier) @local.definition) -(variable_declaration - (tuple_expression - (identifier) @local.definition)) -(for_binding - (identifier) @local.definition) -(for_binding - (tuple_expression - (identifier) @local.definition)) - -(assignment_expression - (tuple_expression - (identifier) @local.definition)) -(assignment_expression - (bare_tuple_expression - (identifier) @local.definition)) -(assignment_expression - (identifier) @local.definition) - -(type_parameter_list - (identifier) @definition.type) -(type_argument_list - (identifier) @definition.type) -(struct_definition - name: (identifier) @definition.type) + (identifier) @local.definition) + +; Constants +(const_statement + (variable_declaration + . (identifier) @local.definition)) +; Parameters (parameter_list - (identifier) @definition.parameter) + (identifier) @local.definition) + (typed_parameter - (identifier) @definition.parameter - (identifier)) -(function_expression - . (identifier) @definition.parameter) -(argument_list - (typed_expression - (identifier) @definition.parameter - (identifier))) -(spread_parameter - (identifier) @definition.parameter) + . (identifier) @local.definition) -(function_definition - name: (identifier) @definition.function) @local.scope -(macro_definition - name: (identifier) @definition.macro) @local.scope +(optional_parameter . + (identifier) @local.definition) -(identifier) @local.reference +(spread_parameter + (identifier) @local.definition) + +(function_expression + . (identifier) @local.definition) + +; ------ +; Scopes +; ------ [ - (try_statement) - (finally_clause) - (quote_statement) - (let_statement) - (compound_expression) - (for_statement) + (function_definition) + (macro_definition) ] @local.scope + +; ---------- +; References +; ---------- + +(identifier) @local.reference From 5806db1e5cd52897bf0cda4421629eec207a621c Mon Sep 17 00:00:00 2001 From: Christoph Horn Date: Wed, 24 Aug 2022 08:56:42 +0200 Subject: [PATCH 07/14] Julia queries: limit markdown highlighting to docstrings --- runtime/queries/julia/injections.scm | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/runtime/queries/julia/injections.scm b/runtime/queries/julia/injections.scm index caed916f..5b2e7584 100644 --- a/runtime/queries/julia/injections.scm +++ b/runtime/queries/julia/injections.scm @@ -1,5 +1,18 @@ ( - (string_literal) @injection.content + (source_file + ( + (string_literal) @injection.content + [ + (module_definition) + (function_definition) + (macro_definition) + (primitive_definition) + (abstract_definition) + (struct_definition) + (assignment_expression) + (const_statement) + ] + )) (#set! injection.language "markdown")) ( From 26b2f0a1b5a1bb6cd83f16f6019d903312999bb9 Mon Sep 17 00:00:00 2001 From: Christoph Horn Date: Wed, 24 Aug 2022 10:32:08 +0200 Subject: [PATCH 08/14] Julia queries: prevent constructors to be highlighted as functions Also improves the captures of the remaining identifiers. --- runtime/queries/julia/highlights.scm | 56 ++++++++++++++++++---------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/runtime/queries/julia/highlights.scm b/runtime/queries/julia/highlights.scm index c4f6999a..9271615f 100644 --- a/runtime/queries/julia/highlights.scm +++ b/runtime/queries/julia/highlights.scm @@ -85,8 +85,11 @@ ; Function definition ; ------------------- -(function_definition - name: (identifier) @function) +( + (function_definition + name: (identifier) @function) + ; prevent constructors (PascalCase) to be highlighted as functions + (#match? @function "^[^A-Z]")) (parameter_list (identifier) @variable.parameter) @@ -108,17 +111,26 @@ ; Functions calls ; --------------- -(call_expression - (identifier) @function) +( + (call_expression + (identifier) @function) + ; prevent constructors (PascalCase) to be highlighted as functions + (#match? @function "^[^A-Z]")) -(broadcast_call_expression - (identifier) @function) +( + (broadcast_call_expression + (identifier) @function) + (#match? @function "^[^A-Z]")) -(call_expression - (field_expression (identifier) @function .)) +( + (call_expression + (field_expression (identifier) @function .)) + (#match? @function "^[^A-Z]")) -(broadcast_call_expression - (field_expression (identifier) @function .)) +( + (broadcast_call_expression + (field_expression (identifier) @function .)) + (#match? @function "^[^A-Z]")) ; ------ ; Macros @@ -228,19 +240,25 @@ ; Remaining identifiers ; --------------------- -; could also be namespace but this should cover the majority -(field_expression - . (_) - (identifier) @variable.other.member) - (const_statement (variable_declaration . (identifier) @constant)) -((identifier) @type - (match? @type "([A-Z][a-z0-9]+)+$")) +; SCREAMING_SNAKE_CASE +( + (identifier) @constant + (match? @constant "^[A-Z][A-Z0-9_]*$")) -((identifier) @constant - (match? @constant "^[A-Z][A-Z0-9_]+$")) +; remaining identifiers that start with capital letters should be types (PascalCase) +( + (identifier) @type + (match? @type "^[A-Z]")) + +; Field expressions are either module content or struct fields. +; Module types and constants should already be captured, so this +; assumes the remaining identifiers to be struct fields. +(field_expression + (_) + (identifier) @variable.other.member) (identifier) @variable From facde9f18c03dd8061199215af5a010903daaedb Mon Sep 17 00:00:00 2001 From: Christoph Horn Date: Wed, 24 Aug 2022 17:25:36 +0200 Subject: [PATCH 09/14] Julia queries: fix non-consecutive docstring highlight --- runtime/queries/julia/injections.scm | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/runtime/queries/julia/injections.scm b/runtime/queries/julia/injections.scm index 5b2e7584..ce4011f2 100644 --- a/runtime/queries/julia/injections.scm +++ b/runtime/queries/julia/injections.scm @@ -1,18 +1,17 @@ ( (source_file - ( - (string_literal) @injection.content - [ - (module_definition) - (function_definition) - (macro_definition) - (primitive_definition) - (abstract_definition) - (struct_definition) - (assignment_expression) - (const_statement) - ] - )) + (string_literal) @injection.content + . + [ + (module_definition) + (function_definition) + (macro_definition) + (primitive_definition) + (abstract_definition) + (struct_definition) + (assignment_expression) + (const_statement) + ]) (#set! injection.language "markdown")) ( From 45add73fb1d2c4f2b0c544117c2d83b7081a2a4a Mon Sep 17 00:00:00 2001 From: ath3 <45574139+ath3@users.noreply.github.com> Date: Wed, 24 Aug 2022 18:58:15 +0200 Subject: [PATCH 10/14] AWK support (#3528) --- book/src/generated/lang-support.md | 1 + languages.toml | 14 ++++ runtime/queries/awk/highlights.scm | 122 ++++++++++++++++++++++++++++ runtime/queries/awk/injections.scm | 2 + runtime/queries/awk/textobjects.scm | 10 +++ runtime/queries/bash/injections.scm | 6 ++ 6 files changed, 155 insertions(+) create mode 100644 runtime/queries/awk/highlights.scm create mode 100644 runtime/queries/awk/injections.scm create mode 100644 runtime/queries/awk/textobjects.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 12a42931..8c1d8208 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -1,5 +1,6 @@ | Language | Syntax Highlighting | Treesitter Textobjects | Auto Indent | Default LSP | | --- | --- | --- | --- | --- | +| awk | ✓ | ✓ | | `awk-language-server` | | bash | ✓ | | | `bash-language-server` | | beancount | ✓ | | | | | c | ✓ | ✓ | ✓ | `clangd` | diff --git a/languages.toml b/languages.toml index 38af1310..bac2c8d0 100644 --- a/languages.toml +++ b/languages.toml @@ -66,6 +66,20 @@ indent = { tab-width = 2, unit = " " } name = "toml" source = { git = "https://github.com/ikatyang/tree-sitter-toml", rev = "7cff70bbcbbc62001b465603ca1ea88edd668704" } +[[language]] +name = "awk" +scope = "source.awk" +injection-regex = "awk" +file-types = ["awk", "gawk", "nawk", "mawk"] +roots = [] +comment-token = "#" +language-server = { command = "awk-language-server" } +indent = { tab-width = 2, unit = " " } + +[[grammar]] +name = "awk" +source = { git = "https://github.com/Beaglefoot/tree-sitter-awk", rev = "a799bc5da7c2a84bc9a06ba5f3540cf1191e4ee3" } + [[language]] name = "protobuf" scope = "source.proto" diff --git a/runtime/queries/awk/highlights.scm b/runtime/queries/awk/highlights.scm new file mode 100644 index 00000000..34d660ad --- /dev/null +++ b/runtime/queries/awk/highlights.scm @@ -0,0 +1,122 @@ +; tree-sitter-awk v0.5.1 + +; https://tree-sitter.github.io/tree-sitter/using-parsers#pattern-matching-with-queries + +; Order matters + +[ + ";" + "," + "(" + ")" + "[" + "]" + "{" + "}" +] @operator + +(piped_io_statement [ + "|" + "|&" +] @operator) + +(redirected_io_statement [ + ">" + ">>" +] @operator) + +(update_exp [ + "++" + "--" +] @operator) + +(ternary_exp [ + "?" + ":" +] @operator) + +(assignment_exp [ + "=" + "+=" + "-=" + "*=" + "/=" + "%=" + "^=" +] @operator) + +(unary_exp [ + "!" + "+" + "-" +] @operator) + +(binary_exp [ + "^" + "**" + "*" + "/" + "%" + "+" + "-" + "<" + ">" + "<=" + ">=" + "==" + "!=" + "~" + "!~" + "in" + "&&" + "||" +] @operator) + +[ + "@include" + "@load" + "@namespace" + (pattern) +] @namespace + +[ + "function" + "func" + "print" + "printf" + "if" + "else" + "do" + "while" + "for" + "in" + "delete" + "return" + "exit" + "switch" + "case" + "default" + (break_statement) + (continue_statement) + (next_statement) + (nextfile_statement) + (getline_input) + (getline_file) +] @keyword + +(comment) @comment +(regex) @string.regexp +(number) @constant.numeric +(string) @string + +(func_call name: (identifier) @function) +(func_def name: (identifier) @function) + +(field_ref (_) @variable) +[ + (identifier) + (field_ref) +] @variable + +(ns_qualified_name "::" @operator) +(ns_qualified_name (namespace) @namespace) diff --git a/runtime/queries/awk/injections.scm b/runtime/queries/awk/injections.scm new file mode 100644 index 00000000..321c90ad --- /dev/null +++ b/runtime/queries/awk/injections.scm @@ -0,0 +1,2 @@ +((comment) @injection.content + (#set! injection.language "comment")) diff --git a/runtime/queries/awk/textobjects.scm b/runtime/queries/awk/textobjects.scm new file mode 100644 index 00000000..467a8982 --- /dev/null +++ b/runtime/queries/awk/textobjects.scm @@ -0,0 +1,10 @@ + +(func_def name: (identifier) (block) @function.inside) @function.around + +(param_list (_) @parameter.inside) @parameter.around + +(args (_) @parameter.inside) @parameter.around + +(comment) @comment.inside + +(comment)+ @comment.around diff --git a/runtime/queries/bash/injections.scm b/runtime/queries/bash/injections.scm index 321c90ad..0fddb10f 100644 --- a/runtime/queries/bash/injections.scm +++ b/runtime/queries/bash/injections.scm @@ -1,2 +1,8 @@ ((comment) @injection.content (#set! injection.language "comment")) + +(command + name: (command_name (word) @_command) + argument: (raw_string) @injection.content + (#match? @_command "^[gnm]?awk$") + (#set! injection.language "awk")) \ No newline at end of file From 0a22148559d6db831aba0241c1f92cef80201e8a Mon Sep 17 00:00:00 2001 From: ath3 <45574139+ath3@users.noreply.github.com> Date: Wed, 24 Aug 2022 23:14:56 +0200 Subject: [PATCH 11/14] AWK Regex injection (#3535) --- runtime/queries/awk/injections.scm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/runtime/queries/awk/injections.scm b/runtime/queries/awk/injections.scm index 321c90ad..12302f61 100644 --- a/runtime/queries/awk/injections.scm +++ b/runtime/queries/awk/injections.scm @@ -1,2 +1,5 @@ ((comment) @injection.content (#set! injection.language "comment")) + +((regex_pattern) @injection.content + (#set! injection.language "regex")) From 28c5e2170e387dab48f74f5667c3039aa4eb2739 Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Wed, 24 Aug 2022 19:15:44 -0500 Subject: [PATCH 12/14] Update tree-sitter-ruby (#3527) --- languages.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages.toml b/languages.toml index bac2c8d0..0bcc6ef2 100644 --- a/languages.toml +++ b/languages.toml @@ -496,7 +496,7 @@ indent = { tab-width = 2, unit = " " } [[grammar]] name = "ruby" -source = { git = "https://github.com/tree-sitter/tree-sitter-ruby", rev = "dfff673b41df7fadcbb609c6338f38da3cdd018e" } +source = { git = "https://github.com/tree-sitter/tree-sitter-ruby", rev = "4c600a463d97e36a0ca5ac57e11f3ac8c297a0fa" } [[language]] name = "bash" From f0fb3407d2bac6523f0f293d18642393ba3c2a7c Mon Sep 17 00:00:00 2001 From: Luna Date: Thu, 25 Aug 2022 17:35:43 +0200 Subject: [PATCH 13/14] Fixed Doom acario theme (#3533) (#3539) Changed the `namespace` style to fix the issue (#3533). I also made the theme look a little closer to how it looks in Emacs, I did however opt to still have it slightly different as I found it easier to read with my port than on the original in Emacs. I also sorted most keys (mainly from line 8 to 28) for the theme to be in alphabetical order, so it's easier to have a quick glance where they are. --- runtime/themes/doom_acario_dark.toml | 61 +++++++++++++++------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/runtime/themes/doom_acario_dark.toml b/runtime/themes/doom_acario_dark.toml index 5fb8272f..ba7c28e8 100644 --- a/runtime/themes/doom_acario_dark.toml +++ b/runtime/themes/doom_acario_dark.toml @@ -2,38 +2,42 @@ # # This was made based on # https://github.com/doomemacs/themes/blob/master/themes/doom-acario-dark-theme.el -# I've done my best to make it work completely, but there's still some things that differ from the emacs version. +# I've done my best to make it look like the Emacs theme, there are still things that looks different from the original. +# But I've decided to keep it like that as I found it to be easier to read when there's a lot going on i.e lots of variables, strings and functions close to each other. -type = { fg = 'blue' } -constructor = { fg = 'red' } -constant = { fg = 'magenta' } -'constant.numeric' = { fg = 'orange' } -string = { fg = 'green' } -comment = { fg = 'gray', modifiers = ['italic'] } +'attribute' = { fg = 'blue' } +'comment' = { fg = 'gray', modifiers = ['italic'] } 'comment.block' = { fg = 'green', modifiers = ['italic'] } 'comment.block.documentation' = { fg = 'green', modifiers = ['italic'] } -variable = { fg = 'cyan' } -'variable.parameter' = { fg = 'blue' } -label = { fg = 'green' } -keyword = { fg = 'red' } -operator = { fg = 'blue' } -function = { fg = 'yellow' } -tag = { fg = 'cyan' } -attribute = { fg = 'blue' } -attribute = { fg = 'blue' } -namespace = { fg = 'red' } +'constant' = { fg = 'magenta' } +'constant.numeric' = { fg = 'orange' } +'constructor' = { fg = 'red' } +'function' = { fg = 'yellow' } +'function.builtin' = { fg = 'blue' } +'function.method' = { fg = 'white' } +'keyword' = { fg = 'red' } +'label' = { fg = 'green' } +'namespace' = { fg = 'white' } +'operator' = { fg = 'blue' } +'punctuation.bracket' = { fg = 'blue' } +'punctuation.delimiter' = { fg = 'white', modifiers = ['bold'] } +'string' = { fg = 'green' } +'tag' = { fg = 'cyan' } +'type' = { fg = 'blue' } +'variable' = { fg = 'cyan' } +'variable.parameter' = { fg = 'white' } +'markup.bold' = { fg = 'orange', modifiers = ['bold'] } +'markup.italic' = { fg = 'magenta', modifiers = ['italic'] } 'markup.heading' = { fg = 'red' } -'markup.list' = { fg = 'red' } -'markup.raw.inline' = { fg = 'green', bg = 'base4' } -'markup.raw.block' = { fg = 'green', bg = 'base4' } -'markup.link' = { fg = 'orange' } +'markup.link' = { fg = 'orange' } 'markup.link.url' = { fg = 'magenta' } 'markup.link.text' = { fg = 'orange' } 'markup.link.label' = { fg = 'green' } +'markup.list' = { fg = 'red' } 'markup.quote' = { fg = 'green', modifiers = ['italic'] } -'markup.bold' = { fg = 'orange', modifiers = ['bold'] } -'markup.italic' = { fg = 'magenta', modifiers = ['italic'] } +'markup.raw.block' = { fg = 'green', bg = 'base4' } +'markup.raw.inline' = { fg = 'green', bg = 'base4' } 'diff.plus' = { fg = 'green' } 'diff.minus' = { fg = 'red' } @@ -61,19 +65,20 @@ namespace = { fg = 'red' } 'ui.menu.selected' = { bg = 'base3', fg = 'fg' } 'ui.selection' = { bg = 'base2' } -warning = { fg = 'orange' } -error = { fg = 'red', modifiers = ['bold'] } -info = { fg = 'blue', modifiers = ['bold'] } -hint = { fg = 'blue', modifiers = ['bold'] } +'warning' = { fg = 'orange' } +'error' = { fg = 'red', modifiers = ['bold'] } +'info' = { fg = 'blue', modifiers = ['bold'] } +'hint' = { fg = 'blue', modifiers = ['bold'] } 'diagnostic'= { fg = 'red', modifiers = ['underlined'] } +'diagnostic.error'= { fg = 'red', modifiers = ['underlined'] } 'diagnostic.info'= { fg = 'blue', modifiers = ['underlined'] } 'diagnostic.warning'= { fg = 'yellow', modifiers = ['underlined'] } -'diagnostic.error'= { fg = 'red', modifiers = ['underlined'] } 'special' = { fg = 'orange' } [palette] +white = '#ffffff' black = '#000000' red = '#D83441' green = '#79D836' From 86a8ea57bb3cb651cf9bee3fd1ae37f7e134c526 Mon Sep 17 00:00:00 2001 From: ath3 <45574139+ath3@users.noreply.github.com> Date: Fri, 26 Aug 2022 00:59:02 +0200 Subject: [PATCH 14/14] Pascal support (#3542) --- book/src/generated/lang-support.md | 1 + languages.toml | 14 + runtime/queries/pascal/highlights.scm | 382 +++++++++++++++++++++++++ runtime/queries/pascal/injections.scm | 2 + runtime/queries/pascal/textobjects.scm | 10 + 5 files changed, 409 insertions(+) create mode 100644 runtime/queries/pascal/highlights.scm create mode 100644 runtime/queries/pascal/injections.scm create mode 100644 runtime/queries/pascal/textobjects.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 8c1d8208..8d8275ab 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -76,6 +76,7 @@ | odin | ✓ | | | `ols` | | openscad | ✓ | | | `openscad-language-server` | | org | ✓ | | | | +| pascal | ✓ | ✓ | | `pasls` | | perl | ✓ | ✓ | ✓ | | | php | ✓ | ✓ | ✓ | `intelephense` | | prisma | ✓ | | | `prisma-language-server` | diff --git a/languages.toml b/languages.toml index 0bcc6ef2..986b927e 100644 --- a/languages.toml +++ b/languages.toml @@ -1691,3 +1691,17 @@ roots = ["edgedb.toml"] [[grammar]] name ="esdl" source = { git = "https://github.com/greym0uth/tree-sitter-esdl", rev = "b840c8a8028127e0a7c6e6c45141adade2bd75cf" } + +[[language]] +name = "pascal" +scope = "source.pascal" +injection-regex = "pascal" +file-types = ["pas", "pp", "inc", "lpr", "lfm"] +roots = [] +comment-token = "//" +indent = { tab-width = 2, unit = " " } +language-server = { command = "pasls", args = [] } + +[[grammar]] +name = "pascal" +source = { git = "https://github.com/Isopod/tree-sitter-pascal", rev = "2fd40f477d3e2794af152618ccfac8d92eb72a66" } diff --git a/runtime/queries/pascal/highlights.scm b/runtime/queries/pascal/highlights.scm new file mode 100644 index 00000000..5368a22b --- /dev/null +++ b/runtime/queries/pascal/highlights.scm @@ -0,0 +1,382 @@ +; -- Identifier type inferrence + +; VERY QUESTIONABLE: Highlighting of identifiers based on spelling +(exprBinary ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprUnary ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(assignment rhs: ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprBrackets ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprParens ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprDot rhs: ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprTpl args: ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprArgs ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(declEnumValue ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(defaultValue ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) + +; -- Break, Continue & Exit +; (Not ideal: ideally, there would be a way to check if these special +; identifiers are shadowed by a local variable) +(statement ((identifier) @keyword.control.return + (#match? @keyword.control.return "^[eE][xX][iI][tT]$"))) +(statement (exprCall entity: ((identifier) @keyword.control.return + (#match? @keyword.control.return "^[eE][xX][iI][tT]$")))) +(statement ((identifier) @keyword.control.repeat + (#match? @keyword.control.repeat "^[bB][rR][eE][aA][kK]$"))) +(statement ((identifier) @keyword.control.repeat + (#match? @keyword.control.repeat "^[cC][oO][nN][tT][iI][nN][uU][eE]$"))) + +; -- Heuristic for procedure/function calls without parentheses +; (If a statement consists only of an identifier, assume it's a procedure) +; (This will still not match all procedure calls, and also may produce false +; positives in rare cases, but only for nonsensical code) + +(statement (exprDot rhs: (exprTpl entity: (identifier) @function))) +(statement (exprTpl entity: (identifier) @function)) +(statement (exprDot rhs: (identifier) @function)) +(statement (identifier) @function) + +; -- Procedure name in calls with parentheses +; (Pascal doesn't require parentheses for procedure calls, so this will not +; detect all calls) + +(inherited) @function + +; foo.bar +(exprCall entity: (exprDot rhs: (exprTpl entity: (identifier) @function))) +; foo.bar +(exprCall entity: (exprDot rhs: (identifier) @function)) +; foobar +(exprCall entity: (exprTpl entity: (identifier) @function)) +; foobar +(exprCall entity: (identifier) @function) + +; -- Fields + +(declSection (declVars (declVar name:(identifier) @variable.other.member))) +(declSection (declField name:(identifier) @variable.other.member)) +(declClass (declField name:(identifier) @variable.other.member)) +(exprDot rhs: (exprDot) @variable.other.member) +(exprDot rhs: (identifier) @variable.other.member) + +(recInitializerField name:(identifier) @variable.other.member) + +; -- Variable & constant declarations +; (This is only questionable because we cannot detect types of identifiers +; declared in other units, so the results will be inconsistent) + +(declVar name: (identifier) @variable) +(declConst name: (identifier) @constant) +(declEnumValue name: (identifier) @constant) + +; -- Constant usage + +[ + (caseLabel) + (label) +] @constant + +(procAttribute (identifier) @constant) +(procExternal (identifier) @constant) + +; -- Type usage + +(typeref) @type + +; -- Exception parameters + +(exceptionHandler variable: (identifier) @variable.parameter) + +; -- Template parameters + +(genericArg type: (typeref) @type) +(genericArg name: (identifier) @variable.parameter) + +(declProc name: (genericDot lhs: (identifier) @type)) +(declType (genericDot (identifier) @type)) + +(genericDot (genericTpl (identifier) @type)) +(genericDot (genericDot (identifier) @type)) + +(genericTpl entity: (genericDot (identifier) @type)) +(genericTpl entity: (identifier) @type) + +; -- Function parameters + +(declArg name: (identifier) @variable.parameter) + +; Treat property declarations like functions + +(declProp name: (identifier) @function) +(declProp getter: (identifier) @variable.other.member) +(declProp setter: (identifier) @variable.other.member) + +; -- Procedure & function declarations + +; foo.bar +(declProc name: (genericDot rhs: (genericTpl entity: (identifier) @function))) +; foo.bar +(declProc name: (genericDot rhs: (identifier) @function)) +; foobar +(declProc name: (genericTpl entity: (identifier) @function)) +; foobar +(declProc name: (identifier) @function) + +; -- Type declaration + +(declType name: (genericTpl entity: (identifier) @type)) +(declType name: (identifier) @type) + +; -- Comments + +(comment) @comment +(pp) @function.macro + +; -- Variables + +(exprBinary (identifier) @variable) +(exprUnary (identifier) @variable) +(assignment (identifier) @variable) +(exprBrackets (identifier) @variable) +(exprParens (identifier) @variable) +(exprDot (identifier) @variable) +(exprTpl (identifier) @variable) +(exprArgs (identifier) @variable) +(defaultValue (identifier) @variable) + +; -- Literals + +(literalNumber) @constant.builtin.numeric +(literalString) @string + +; -- Builtin constants + +[ + (kTrue) + (kFalse) +] @constant.builtin.boolean + +[ + (kNil) +] @constant.builtin + +; -- Punctuation & operators + +[ + (kOr) + (kXor) + (kDiv) + (kMod) + (kAnd) + (kShl) + (kShr) + (kNot) + (kIs) + (kAs) + (kIn) +] @keyword.operator + +[ + (kDot) + (kAdd) + (kSub) + (kMul) + (kFdiv) + (kAssign) + (kAssignAdd) + (kAssignSub) + (kAssignMul) + (kAssignDiv) + (kEq) + (kLt) + (kLte) + (kGt) + (kGte) + (kNeq) + (kAt) + (kHat) +] @operator + +[ + ".." +] @punctuation.special + +[ + ";" + "," + ":" + (kEndDot) +] @punctuation.delimiter + +[ + "(" + ")" + "[" + "]" +] @punctuation.bracket + +; -- Attributes + +(procAttribute (kPublic) @attribute) + +[ + (kDefault) + (kIndex) + (kNodefault) + (kStored) + + (kStatic) + (kVirtual) + (kAbstract) + (kSealed) + (kDynamic) + (kOverride) + (kOverload) + (kReintroduce) + (kInline) + + (kForward) + + (kStdcall) + (kCdecl) + (kCppdecl) + (kPascal) + (kRegister) + (kMwpascal) + (kExternal) + (kName) + (kMessage) + (kDeprecated) + (kExperimental) + (kPlatform) + (kUnimplemented) + (kCvar) + (kExport) + (kFar) + (kNear) + (kSafecall) + (kAssembler) + (kNostackframe) + (kInterrupt) + (kNoreturn) + (kIocheck) + (kLocal) + (kHardfloat) + (kSoftfloat) + (kMs_abi_default) + (kMs_abi_cdecl) + (kSaveregisters) + (kSysv_abi_default) + (kSysv_abi_cdecl) + (kVectorcall) + (kVarargs) + (kWinapi) + (kAlias) + (kDelayed) + + (rttiAttributes) + (procAttribute) + +] @attribute + +; -- Keywords +[ + (kProgram) + (kLibrary) + (kUnit) + (kUses) + + (kBegin) + (kEnd) + (kAsm) + + (kVar) + (kThreadvar) + (kConst) + (kResourcestring) + (kConstref) + (kOut) + (kType) + (kLabel) + (kExports) + + (kAbsolute) + + (kProperty) + (kRead) + (kWrite) + (kImplements) + + (kClass) + (kInterface) + (kObject) + (kRecord) + (kObjcclass) + (kObjccategory) + (kObjcprotocol) + (kArray) + (kFile) + (kString) + (kSet) + (kOf) + (kHelper) + (kPacked) + + (kInherited) + + (kGeneric) + (kSpecialize) + + (kFunction) + (kProcedure) + (kConstructor) + (kDestructor) + (kOperator) + (kReference) + + (kInterface) + (kImplementation) + (kInitialization) + (kFinalization) + + (kPublished) + (kPublic) + (kProtected) + (kPrivate) + (kStrict) + (kRequired) + (kOptional) + + (kTry) + (kExcept) + (kFinally) + (kRaise) + (kOn) + (kCase) + (kWith) + (kGoto) +] @keyword + +[ + (kFor) + (kTo) + (kDownto) + (kDo) + (kWhile) + (kRepeat) + (kUntil) +] @keyword.control.repeat + +[ + (kIf) + (kThen) + (kElse) +] @keyword.control.conditional diff --git a/runtime/queries/pascal/injections.scm b/runtime/queries/pascal/injections.scm new file mode 100644 index 00000000..321c90ad --- /dev/null +++ b/runtime/queries/pascal/injections.scm @@ -0,0 +1,2 @@ +((comment) @injection.content + (#set! injection.language "comment")) diff --git a/runtime/queries/pascal/textobjects.scm b/runtime/queries/pascal/textobjects.scm new file mode 100644 index 00000000..56dbe540 --- /dev/null +++ b/runtime/queries/pascal/textobjects.scm @@ -0,0 +1,10 @@ + +(declType (declClass (declSection) @class.inside)) @class.around + +(defProc body: (_) @function.inside) @function.around + +(declArgs (_) @parameter.inside) @parameter.around +(exprArgs (_) @parameter.inside) @parameter.around + +(comment) @comment.inside +(comment)+ @comment.around