From bb4b04c82dbbe453ffbc580176c25fac49059513 Mon Sep 17 00:00:00 2001 From: Hannah Date: Mon, 16 Mar 2026 10:19:15 -0400 Subject: [PATCH 1/8] feat(parser): add objectscript UDL parser --- SUPPORTED_LANGUAGES.md | 1 + lua/nvim-treesitter/parsers.lua | 9 + plugin/filetypes.lua | 1 + .../queries/objectscript_udl/highlights.scm | 289 ++++++++++++++++++ runtime/queries/objectscript_udl/indents.scm | 3 + .../queries/objectscript_udl/injections.scm | 159 ++++++++++ 6 files changed, 462 insertions(+) create mode 100644 runtime/queries/objectscript_udl/highlights.scm create mode 100644 runtime/queries/objectscript_udl/indents.scm create mode 100644 runtime/queries/objectscript_udl/injections.scm diff --git a/SUPPORTED_LANGUAGES.md b/SUPPORTED_LANGUAGES.md index 978a4b8ed..c7846003e 100644 --- a/SUPPORTED_LANGUAGES.md +++ b/SUPPORTED_LANGUAGES.md @@ -195,6 +195,7 @@ jsx (queries only)[^jsx] | unstable | `HFIJ ` | @steelsojka [nu](https://github.com/nushell/tree-sitter-nu) | unstable | `HFIJ ` | @abhisheksingh0x558 [objc](https://github.com/tree-sitter-grammars/tree-sitter-objc) | unstable | `HFIJL` | @amaanq [objdump](https://github.com/ColinKennedy/tree-sitter-objdump) | unstable | `H  J ` | @ColinKennedy +[objectscript_udl](https://github.com/intersystems/tree-sitter-objectscript) | unstable | `H IJ ` | @davem-intersys, @hkimura-intersys [ocaml](https://github.com/tree-sitter/tree-sitter-ocaml) | unstable | `HFIJL` | @undu [ocaml_interface](https://github.com/tree-sitter/tree-sitter-ocaml) | unstable | `HFIJL` | @undu [ocamllex](https://github.com/atom-ocaml/tree-sitter-ocamllex) | unstable | `H  J ` | @undu diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index d894046cc..96d882d8d 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -1498,6 +1498,15 @@ return { maintainers = { '@ColinKennedy' }, tier = 2, }, + objectscript_udl = { + install_info = { + location = 'udl', + revision = '7aa01969d0fea2e75dc69f2be2244b13d8269d6f', + url = 'https://github.com/intersystems/tree-sitter-objectscript', + }, + maintainers = { '@davem-intersys', '@hkimura-intersys' }, + tier = 2, + }, ocaml = { install_info = { location = 'grammars/ocaml', diff --git a/plugin/filetypes.lua b/plugin/filetypes.lua index f8fe0c287..927389aa5 100644 --- a/plugin/filetypes.lua +++ b/plugin/filetypes.lua @@ -32,6 +32,7 @@ local filetypes = { make = { 'automake' }, markdown = { 'pandoc' }, muttrc = { 'neomuttrc' }, + objectscript_udl = { 'objectscript' }, ocaml_interface = { 'ocamlinterface' }, perl = { 'pl' }, poe_filter = { 'poefilter' }, diff --git a/runtime/queries/objectscript_udl/highlights.scm b/runtime/queries/objectscript_udl/highlights.scm new file mode 100644 index 000000000..1daa15305 --- /dev/null +++ b/runtime/queries/objectscript_udl/highlights.scm @@ -0,0 +1,289 @@ +(pattern_expression) @string.regexp + +(numeric_literal) @number + +(string_literal) @string + +(keyword_pound_pound_class) @keyword + +(keyword_pound_pound_super) @keyword + +(system_defined_variable) @variable.builtin + +(system_defined_function) @function.builtin + +(sql_field_modifier) @keyword.modifier + +(property_name) @property + +(method_name) @function + +(parameter_name) @property + +(class_name) @type + +(macro) @constant + +(routine_ref) @variable + +(sql_field_identifier) @variable + +(lvn) @variable + +(gvn) @variable + +(ssvn) @variable + +(instance_variable) @variable + +(objectscript_identifier) @variable + +(method_arg) @variable.parameter + +; I didn't include ( or ) in this, because they are often grouped +; as part of a sequence that gets turned into a single token, so they +; don't get matched, and one ends up getting colored differently than the other. +[ + "_" + "," + ":" + ".." + "..." + "'[" + "']" + "']]" + "\"" + "\"\"" + "[" + "]" + "]]" + "{" + "}" + "/" + "\\" + "#" + "|" + "||" + "$$" +] @punctuation.delimiter + +[ + "'&" + "&" + "&&" + "'<" + "'=" + "'>" + "^" + "-" + "^$" + "+" + "<" + "<=" + "=" + ">" + ">=" + "@" + "*" + "**" + "'" + "'!" + "'?" + "!" + "?" +] @operator + +(json_string_literal) @string + +(json_boolean_literal) @boolean + +(json_number_literal) @number + +(json_null_literal) @string + +(bracket) @punctuation.bracket + +; === END EXPR === +; === BEGIN CORE === +(locktype) @variable + +(macro_arg) @variable + +(macro_value) @constant.builtin + +[ + (keyword_for) + (keyword_while) + (keyword_continue) +] @keyword.repeat + +[ + (keyword_if) + (keyword_elseif) + (keyword_else) + (keyword_oldelse) +] @keyword.conditional + +[ + (keyword_throw) + (keyword_try) + (keyword_catch) +] @keyword.exception + +[ + (keyword_return) + (keyword_quit) +] @keyword.return + +[ + (keyword_break) + (keyword_debug) + (keyword_trace) + (keyword_step) + (keyword_nostep) + (keyword_stepmethod) +] @keyword.debug + +[ + (keyword_pound_define) + (keyword_pound_def1arg) + (keyword_pound_if) + (keyword_pound_elseif) + (keyword_pound_else) + (keyword_pound_endif) + (keyword_pound_ifdef) + (keyword_pound_ifndef) + (keyword_dim) +] @keyword.directive + +[ + (keyword_pound_import) + (keyword_pound_include) +] @keyword.import + +[ + (keyword_as) + (keyword_of) + (keyword_public) + (keyword_private) + (keyword_methodimpl) +] @keyword.modifier + +keyword: (_) @keyword + +(embedded_js_special_case_complete) @punctuation.special + +(embedded_sql_marker) @punctuation.special + +(embedded_sql_reverse_marker) @punctuation.special + +(html_marker) @punctuation.special + +(html_marker_reversed) @punctuation.special + +(attribute) @attribute + +(open_keywords) @keyword.modifier + +(use_keywords) @keyword.modifier + +(close_parameter_option_value) @keyword.modifier + +[ + (line_comment_1) + (line_comment_2) + (line_comment_3) + (line_comment_4) + (block_comment) +] @comment @spell + +(tag) @tag + +[ + (keyword_import) + (keyword_include) + (keyword_includegenerator) +] @keyword.import + +[ + (keyword_method) + (keyword_classmethod) +] @keyword.function + +[ + (keyword_class) + (keyword_extends) + (keyword_property) + (keyword_relationship) + (keyword_foreignkey) + (keyword_parameter) + (keyword_projection) + (keyword_index) + (keyword_query) + (keyword_trigger) + (keyword_xdata) + (keyword_storage) +] @keyword.type + +[ + (keyword_as) + (keyword_of) + (keyword_on) + (keyword_not) + (keyword_references) +] @keyword.modifier + +[ + (method_keyword_codemode_expression) + (call_method_keyword) + (method_keyword) + (class_keywords) + (query_keywords) + (trigger_keyword) + (method_keyword_language) + (relationship_keyword) + (foreignkey_keyword) + (parameter_keyword) + (projection_keyword) + (index_keyword) + (index_keyword_extent) + (xdata_keyword) + (xdata_keyword_mimetype) + (property_keyword) +] @keyword.modifier + +(documatic_line) @comment.documentation + +(query_name) @property + +(property_name) @property + +(relationship_name) @property + +(foreignkey_name) @property + +(parameter_name) @property + +(projection_name) @property + +(index_name) @property + +(xdata_name) @property + +(storage_name) @property + +(return_type) @type.builtin + +(typename) @type + +(parameter_type) @type.builtin + +(index_type) @type.builtin + +(projection_type) @type.builtin + +(property_type) @type.builtin + +(index_property_type) @type.builtin + +(identifier) @variable diff --git a/runtime/queries/objectscript_udl/indents.scm b/runtime/queries/objectscript_udl/indents.scm new file mode 100644 index 000000000..a49aa039e --- /dev/null +++ b/runtime/queries/objectscript_udl/indents.scm @@ -0,0 +1,3 @@ +"{" @indent.begin + +"}" @indent.end diff --git a/runtime/queries/objectscript_udl/injections.scm b/runtime/queries/objectscript_udl/injections.scm new file mode 100644 index 000000000..862af545a --- /dev/null +++ b/runtime/queries/objectscript_udl/injections.scm @@ -0,0 +1,159 @@ +(embedded_html + (angled_bracket_fenced_text) @injection.content + (#set! injection.language "html")) + +(embedded_sql + (_ + (paren_fenced_text) @injection.content) + (#set! injection.language "sql")) + +(embedded_js + [ + (angled_bracket_fenced_text) + (embedded_js_special_case) + ] @injection.content + (#set! injection.language "javascript")) + +(embedded_xml + (angled_bracket_fenced_text) @injection.content + (#set! injection.language "xml")) + +([ + (line_comment_1) + (line_comment_2) + (line_comment_3) + (block_comment) +] @injection.content + (#set! injection.language "comment")) + +(method_definition + (external_method_keywords + (method_keyword_language + (rhs) @_lang)) + (external_method_body_content) @injection.content + (#set! injection.include-children "true") + (#match? @_lang "^[Pp][Yy][Tt][Hh][Oo][Nn]$") + (#set! injection.language "python")) + +(method_definition + (external_method_keywords + (method_keyword_language + (rhs) @_lang)) + (external_method_body_content) @injection.content + (#set! injection.include-children "true") + (#match? @_lang "^[Tt][Ss][Qq][Ll]$") + (#set! injection.language "tsql")) + +(method_definition + (external_method_keywords + (method_keyword_language + (rhs) @_lang)) + (external_method_body_content) @injection.content + (#set! injection.include-children "true") + (#match? @_lang "^[Ii][Ss][Pp][Ll]$") + (#set! injection.language "ispl")) + +((trigger + (external_trigger + (trigger_keywords + (method_keyword_language + (rhs) @_lang)) + (external_method_body_content) @injection.content)) + (#set! injection.include-children "true") + (#match? @_lang "^[Pp][Yy][Tt][Hh][Oo][Nn]$") + (#set! injection.language "python")) + +((trigger + (external_trigger + (trigger_keywords + (method_keyword_language + (rhs) @_lang)) + (external_method_body_content) @injection.content)) + (#set! injection.include-children "true") + (#match? @_lang "^[Tt][Ss][Qq][Ll]$") + (#set! injection.language "tsql")) + +(query + (return_type + (typename + (identifier) @_querytype + (#match? @_querytype "^%[Ss][Qq][Ll][Qq][Uu][Ee][Rr][Yy]$"))) + (query_body + (query_body_content) @injection.content) + (#set! injection.language "sql") + (#set! injection.include-children "true")) + +(xdata + (xdata_any + (xdata_keywords + (xdata_keyword_mimetype + (rhs) @_mt)) + (external_method_body_content) @injection.content) + (#set! injection.include-children "true") + (#match? @_mt "^\"?text/markdown\"?$") + (#set! injection.language "markdown")) + +(xdata + (xdata_any + (xdata_keywords + (xdata_keyword_mimetype + (rhs) @_mt)) + (external_method_body_content) @injection.content) + (#set! injection.include-children "true") + (#match? @_mt + "^\"?([Tt][Ee][Xx][Tt]|[Aa][Pp][Pp][Ll][Ii][Cc][Aa][Tt][Ii][Oo][Nn])/[Xx][Mm][Ll]\"?$") + (#set! injection.language "xml")) + +(xdata + (xdata_any + (xdata_keywords + (xdata_keyword_mimetype + (rhs) @_mt)) + (external_method_body_content) @injection.content) + (#set! injection.include-children "true") + (#match? @_mt "^\"?text/html\"?$") + (#set! injection.language "html")) + +(xdata + (xdata_any + (xdata_keywords + (xdata_keyword_mimetype + (rhs) @_mt)) + (external_method_body_content) @injection.content) + (#set! injection.include-children "true") + (#match? @_mt "^\"?application/json\"?$") + (#set! injection.language "json")) + +(xdata + (xdata_any + (xdata_keywords + (xdata_keyword_mimetype + (rhs) @_mt)) + (external_method_body_content) @injection.content) + (#set! injection.include-children "true") + (#match? @_mt + "^\"?([Tt][Ee][Xx][Tt]|[Aa][Pp][Pp][Ll][Ii][Cc][Aa][Tt][Ii][Oo][Nn])/[Yy][Aa][Mm][Ll]\"?$") + (#set! injection.language "yaml")) + +(xdata + (xdata_any + (xdata_keywords + (xdata_keyword_mimetype + (rhs) @_mt)) + (external_method_body_content) @injection.content) + (#set! injection.include-children "true") + (#match? @_mt "^\"?text/css\"?$") + (#set! injection.language "css")) + +(xdata + (xdata_xml + (xdata_keywords)? + (external_method_body_content) @injection.content) + (#set! injection.include-children "true") + (#set! injection.language "xml")) + +(storage + (storage_body + (external_method_body_content) @injection.content) + (#set! injection.language "xml") + (#set! injection.include-children "true")) From 3244ed848fa297c2547d0907cb33002ac7772c04 Mon Sep 17 00:00:00 2001 From: Hannah Date: Mon, 16 Mar 2026 11:41:28 -0400 Subject: [PATCH 2/8] fix(query): use #any-of instead of #match --- .../queries/objectscript_udl/highlights.scm | 2 -- .../queries/objectscript_udl/injections.scm | 27 +++++++++---------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/runtime/queries/objectscript_udl/highlights.scm b/runtime/queries/objectscript_udl/highlights.scm index 1daa15305..55c5623c6 100644 --- a/runtime/queries/objectscript_udl/highlights.scm +++ b/runtime/queries/objectscript_udl/highlights.scm @@ -103,8 +103,6 @@ (bracket) @punctuation.bracket -; === END EXPR === -; === BEGIN CORE === (locktype) @variable (macro_arg) @variable diff --git a/runtime/queries/objectscript_udl/injections.scm b/runtime/queries/objectscript_udl/injections.scm index 862af545a..f81510fac 100644 --- a/runtime/queries/objectscript_udl/injections.scm +++ b/runtime/queries/objectscript_udl/injections.scm @@ -32,7 +32,7 @@ (rhs) @_lang)) (external_method_body_content) @injection.content (#set! injection.include-children "true") - (#match? @_lang "^[Pp][Yy][Tt][Hh][Oo][Nn]$") + (#any-of? @_lang "python" "Python" "PYTHON") (#set! injection.language "python")) (method_definition @@ -41,7 +41,7 @@ (rhs) @_lang)) (external_method_body_content) @injection.content (#set! injection.include-children "true") - (#match? @_lang "^[Tt][Ss][Qq][Ll]$") + (#any-of? @_lang "tsql" "TSQL" "tSQL" "tSql" "TSql") (#set! injection.language "tsql")) (method_definition @@ -50,7 +50,7 @@ (rhs) @_lang)) (external_method_body_content) @injection.content (#set! injection.include-children "true") - (#match? @_lang "^[Ii][Ss][Pp][Ll]$") + (#any-of? @_lang "ispl" "ISPL" "ISpl" "iSpl") (#set! injection.language "ispl")) ((trigger @@ -60,7 +60,7 @@ (rhs) @_lang)) (external_method_body_content) @injection.content)) (#set! injection.include-children "true") - (#match? @_lang "^[Pp][Yy][Tt][Hh][Oo][Nn]$") + (#any-of? @_lang "python" "Python" "PYTHON") (#set! injection.language "python")) ((trigger @@ -70,14 +70,14 @@ (rhs) @_lang)) (external_method_body_content) @injection.content)) (#set! injection.include-children "true") - (#match? @_lang "^[Tt][Ss][Qq][Ll]$") + (#any-of? @_lang "tsql" "TSQL" "tSQL" "tSql" "TSql") (#set! injection.language "tsql")) (query (return_type (typename (identifier) @_querytype - (#match? @_querytype "^%[Ss][Qq][Ll][Qq][Uu][Ee][Rr][Yy]$"))) + (#any-of? @_querytype "%SqlQuery" "%sqlquery" "%SQLQUERY" "%Sqlquery" "%SQLQuery"))) (query_body (query_body_content) @injection.content) (#set! injection.language "sql") @@ -90,7 +90,7 @@ (rhs) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#match? @_mt "^\"?text/markdown\"?$") + (#any-of? @_mt "text/markdown" "\"text/markdown\"") (#set! injection.language "markdown")) (xdata @@ -100,8 +100,7 @@ (rhs) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#match? @_mt - "^\"?([Tt][Ee][Xx][Tt]|[Aa][Pp][Pp][Ll][Ii][Cc][Aa][Tt][Ii][Oo][Nn])/[Xx][Mm][Ll]\"?$") + (#any-of? @_mt "text/xml" "\"text/xml\"" "application/xml" "\"application/xml\"") (#set! injection.language "xml")) (xdata @@ -111,7 +110,7 @@ (rhs) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#match? @_mt "^\"?text/html\"?$") + (#any-of? @_mt "text/html" "\"text/html\"") (#set! injection.language "html")) (xdata @@ -121,7 +120,7 @@ (rhs) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#match? @_mt "^\"?application/json\"?$") + (#any-of? @_mt "application/json" "\"application/json\"") (#set! injection.language "json")) (xdata @@ -131,8 +130,7 @@ (rhs) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#match? @_mt - "^\"?([Tt][Ee][Xx][Tt]|[Aa][Pp][Pp][Ll][Ii][Cc][Aa][Tt][Ii][Oo][Nn])/[Yy][Aa][Mm][Ll]\"?$") + (#any-of? @_mt "text/yaml" "\"text/yaml\"" "application/yaml" "\"application/yaml\"") (#set! injection.language "yaml")) (xdata @@ -142,7 +140,7 @@ (rhs) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#match? @_mt "^\"?text/css\"?$") + (#any-of? @_mt "text/css" "\"text/css\"") (#set! injection.language "css")) (xdata @@ -157,3 +155,4 @@ (external_method_body_content) @injection.content) (#set! injection.language "xml") (#set! injection.include-children "true")) + From 6f2be999f2f2d0bbf4ce0b2942bf41100ab1c6ad Mon Sep 17 00:00:00 2001 From: Hannah Date: Mon, 16 Mar 2026 11:44:48 -0400 Subject: [PATCH 3/8] fix(query): use #any-of instead of #match --- runtime/queries/objectscript_udl/injections.scm | 1 - 1 file changed, 1 deletion(-) diff --git a/runtime/queries/objectscript_udl/injections.scm b/runtime/queries/objectscript_udl/injections.scm index f81510fac..dbac3e801 100644 --- a/runtime/queries/objectscript_udl/injections.scm +++ b/runtime/queries/objectscript_udl/injections.scm @@ -155,4 +155,3 @@ (external_method_body_content) @injection.content) (#set! injection.language "xml") (#set! injection.include-children "true")) - From c97ffd4511a9218ae8793452068bb2ab16185f67 Mon Sep 17 00:00:00 2001 From: Hannah Date: Tue, 24 Mar 2026 16:27:44 -0400 Subject: [PATCH 4/8] feat: add objectscript routine recognition as well --- SUPPORTED_LANGUAGES.md | 1 + lua/nvim-treesitter/parsers.lua | 11 +- .../objectscript_routine/highlights.scm | 284 ++++++++++++++++++ .../queries/objectscript_routine/indents.scm | 3 + .../objectscript_routine/injections.scm | 27 ++ .../queries/objectscript_udl/highlights.scm | 256 ++++++++++------ .../queries/objectscript_udl/injections.scm | 22 +- 7 files changed, 494 insertions(+), 110 deletions(-) create mode 100644 runtime/queries/objectscript_routine/highlights.scm create mode 100644 runtime/queries/objectscript_routine/indents.scm create mode 100644 runtime/queries/objectscript_routine/injections.scm diff --git a/SUPPORTED_LANGUAGES.md b/SUPPORTED_LANGUAGES.md index c7846003e..d8bd64178 100644 --- a/SUPPORTED_LANGUAGES.md +++ b/SUPPORTED_LANGUAGES.md @@ -195,6 +195,7 @@ jsx (queries only)[^jsx] | unstable | `HFIJ ` | @steelsojka [nu](https://github.com/nushell/tree-sitter-nu) | unstable | `HFIJ ` | @abhisheksingh0x558 [objc](https://github.com/tree-sitter-grammars/tree-sitter-objc) | unstable | `HFIJL` | @amaanq [objdump](https://github.com/ColinKennedy/tree-sitter-objdump) | unstable | `H  J ` | @ColinKennedy +[objectscript_routine](https://github.com/intersystems/tree-sitter-objectscript) | unstable | `H IJ ` | @davem-intersys, @hkimura-intersys [objectscript_udl](https://github.com/intersystems/tree-sitter-objectscript) | unstable | `H IJ ` | @davem-intersys, @hkimura-intersys [ocaml](https://github.com/tree-sitter/tree-sitter-ocaml) | unstable | `HFIJL` | @undu [ocaml_interface](https://github.com/tree-sitter/tree-sitter-ocaml) | unstable | `HFIJL` | @undu diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 96d882d8d..184eebada 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -1498,10 +1498,19 @@ return { maintainers = { '@ColinKennedy' }, tier = 2, }, + objectscript_routine = { + install_info = { + location = 'objectscript_routine', + revision = 'a60196ecc4e6d492510a0eb0374e74020895b917', + url = 'https://github.com/intersystems/tree-sitter-objectscript', + }, + maintainers = { '@davem-intersys', '@hkimura-intersys' }, + tier = 2, + }, objectscript_udl = { install_info = { location = 'udl', - revision = '7aa01969d0fea2e75dc69f2be2244b13d8269d6f', + revision = 'a60196ecc4e6d492510a0eb0374e74020895b917', url = 'https://github.com/intersystems/tree-sitter-objectscript', }, maintainers = { '@davem-intersys', '@hkimura-intersys' }, diff --git a/runtime/queries/objectscript_routine/highlights.scm b/runtime/queries/objectscript_routine/highlights.scm new file mode 100644 index 000000000..cbec0cf19 --- /dev/null +++ b/runtime/queries/objectscript_routine/highlights.scm @@ -0,0 +1,284 @@ +; AUTO-GENERATED by scripts/sync_queries.py +; Edit only the LOCAL section in composed files. +; File: highlights.scm +; === BEGIN EXPR === +(pattern_expression) @string.regexp + +[ + (json_number_literal) + (numeric_literal) +] @number + +[ + (json_boolean_literal) + (json_null_literal) +] @boolean + +(json_object_literal_pair + (json_string_literal) @string.special) + +[ + (json_string_literal) + (string_literal) +] @string + +[ + (keyword_pound_pound_super) + (keyword_pound_pound_class) +] @keyword.operator + +(system_defined_variable) @variable.builtin + +(system_defined_function) @function.builtin + +(sql_field_modifier) @keyword.modifier + +[ + (property_name) + (parameter_name) + (sql_field_identifier) +] @variable.member + +(method_name) @function.method + +[ + (routine_name) + (class_name) +] @type + +(macro_function) @function.macro + +(macro_constant) @constant.macro + +[ + (lvn) + (gvn) + (ssvn) + (objectscript_identifier) +] @variable + +(namespace) @module + +[ + (objectscript_identifier_special) + (instance_variable) +] @variable.member + +(method_arg) @variable.parameter + +; I didn't include ( or ) in this, because they are often grouped +; as part of a sequence that gets turned into a single token, so they +; don't get matched, and one ends up getting colored differently than the other. +[ + "_" + "," + ":" + ".." + "..." + "'[" + "']" + "']]" + "\"" + "\"\"" + "[" + "]" + "]]" + "{" + "}" + "/" + "\\" + "#" + "|" + "||" + "$$" +] @punctuation.delimiter + +[ + "'&" + "&" + "&&" + "'<" + "'=" + "'>" + "^" + "-" + "^$" + "+" + "<" + "<=" + "=" + ">" + ">=" + "@" + "*" + "**" + "'" + "'!" + "'?" + "!" + "?" +] @operator + +(bracket) @punctuation.bracket + +; === END EXPR === +; === BEGIN CORE === +(macro_arg) @variable.member + +(macro_value) @constant.builtin + +(macro_def) @keyword.directive.define + +[ + (keyword_for) + (keyword_while) + (keyword_continue) + (keyword_quit) +] @keyword.repeat + +[ + (keyword_if) + (keyword_elseif) + (keyword_else) + (keyword_oldelse) +] @keyword.conditional + +[ + (keyword_throw) + (keyword_try) + (keyword_catch) +] @keyword.exception + +(keyword_return) @keyword.return + +[ + (keyword_break) + (keyword_zbreak) + (keyword_debug) + (keyword_trace) + (keyword_step) + (keyword_nostep) + (keyword_stepmethod) + (keyword_errortrap) + (keyword_interrupt) + (keyword_normal) + (keyword_zkill) + (keyword_zn) + (keyword_zsu) + (keyword_ztrap) + (keyword_zz) +] @keyword.debug + +[ + (keyword_pound_define) + (keyword_pound_def1arg) + (keyword_pound_if) + (keyword_pound_elseif) + (keyword_pound_else) + (keyword_pound_endif) + (keyword_pound_ifdef) + (keyword_pound_ifndef) + (keyword_dim) + (keyword_pound_import) + (keyword_pound_include) + (keyword_pound_delay) + (locktype) +] @keyword.directive + +[ + (keyword_as) + (keyword_of) + (keyword_public) + (keyword_private) + (keyword_methodimpl) + (open_keywords) + (use_keywords) + (close_parameter_option_value) + (keyword_clear) + (keyword_on) + (keyword_off) + (keyword_all) + (keyword_ext) + (keyword_stepmethod) + (keyword_destruct) +] @keyword.modifier + +[ + (keyword_print) + (keyword_zprint) + (keyword_set) + (keyword_write) + (keyword_zwrite) + (keyword_do) + (keyword_for) + (keyword_while) + (keyword_kill) + (keyword_lock) + (keyword_read) + (keyword_open) + (keyword_close) + (keyword_use) + (keyword_new) + (keyword_job) + (keyword_merge) + (keyword_goto) + (keyword_halt_or_hang) + (keyword_halt) + (keyword_hang) + (keyword_tcommit) + (keyword_trollback) + (keyword_tstart) + (keyword_xecute) + (keyword_view) +] @function.builtin + +[ + (keyword_embedded_html) + (keyword_embedded_xml) + (keyword_embedded_sql_amp) + (keyword_embedded_sql_hash) + (keyword_js) +] @keyword.operator + +[ + (embedded_js_special_case_complete) + (embedded_sql_marker) + (embedded_sql_reverse_marker) + (html_marker) + (html_marker_reversed) +] @punctuation.special + +[ + (line_comment_1) + (line_comment_2) + (line_comment_3) + (line_comment_4) + (block_comment) +] @comment @spell + +(namespace) @module + +(tag) @label + +[ + (command_quit) + (command_else) + (command_continue) + (command_if) + (command_do) + (command_for) + (command_lock) + (command_return) + (command_halt_or_hang) + (command_break) +] @comment + +; === END CORE === +; === BEGIN LOCAL === +(routine_type) @type.builtin + +(documatic_line) @comment.documentation @spell + +(routine) @keyword.type + +; === END LOCAL === diff --git a/runtime/queries/objectscript_routine/indents.scm b/runtime/queries/objectscript_routine/indents.scm new file mode 100644 index 000000000..a49aa039e --- /dev/null +++ b/runtime/queries/objectscript_routine/indents.scm @@ -0,0 +1,3 @@ +"{" @indent.begin + +"}" @indent.end diff --git a/runtime/queries/objectscript_routine/injections.scm b/runtime/queries/objectscript_routine/injections.scm new file mode 100644 index 000000000..c6bfab662 --- /dev/null +++ b/runtime/queries/objectscript_routine/injections.scm @@ -0,0 +1,27 @@ +(embedded_html + (angled_bracket_fenced_text) @injection.content + (#set! injection.language "html")) + +(embedded_sql + (_ + (paren_fenced_text) @injection.content) + (#set! injection.language "sql")) + +(embedded_js + [ + (angled_bracket_fenced_text) + (embedded_js_special_case) + ] @injection.content + (#set! injection.language "javascript")) + +(embedded_xml + (angled_bracket_fenced_text) @injection.content + (#set! injection.language "xml")) + +([ + (line_comment_1) + (line_comment_2) + (line_comment_3) + (block_comment) +] @injection.content + (#set! injection.language "comment")) diff --git a/runtime/queries/objectscript_udl/highlights.scm b/runtime/queries/objectscript_udl/highlights.scm index 55c5623c6..2287c0042 100644 --- a/runtime/queries/objectscript_udl/highlights.scm +++ b/runtime/queries/objectscript_udl/highlights.scm @@ -1,12 +1,27 @@ (pattern_expression) @string.regexp -(numeric_literal) @number +[ + (json_number_literal) + (numeric_literal) +] @number -(string_literal) @string +[ + (json_boolean_literal) + (json_null_literal) +] @boolean -(keyword_pound_pound_class) @keyword +(json_object_literal_pair + (json_string_literal) @string.special) -(keyword_pound_pound_super) @keyword +[ + (json_string_literal) + (string_literal) +] @string + +[ + (keyword_pound_pound_super) + (keyword_pound_pound_class) +] @keyword.operator (system_defined_variable) @variable.builtin @@ -14,29 +29,36 @@ (sql_field_modifier) @keyword.modifier -(property_name) @property +[ + (property_name) + (parameter_name) + (sql_field_identifier) +] @variable.member -(method_name) @function +(method_name) @function.method -(parameter_name) @property +[ + (routine_name) + (class_name) +] @type -(class_name) @type +(macro_function) @function.macro -(macro) @constant +(macro_constant) @constant.macro -(routine_ref) @variable +[ + (lvn) + (gvn) + (ssvn) + (objectscript_identifier) +] @variable -(sql_field_identifier) @variable +(namespace) @module -(lvn) @variable - -(gvn) @variable - -(ssvn) @variable - -(instance_variable) @variable - -(objectscript_identifier) @variable +[ + (objectscript_identifier_special) + (instance_variable) +] @variable.member (method_arg) @variable.parameter @@ -93,26 +115,19 @@ "?" ] @operator -(json_string_literal) @string - -(json_boolean_literal) @boolean - -(json_number_literal) @number - -(json_null_literal) @string - (bracket) @punctuation.bracket -(locktype) @variable - -(macro_arg) @variable +(macro_arg) @variable.member (macro_value) @constant.builtin +(macro_def) @keyword.directive.define + [ (keyword_for) (keyword_while) (keyword_continue) + (keyword_quit) ] @keyword.repeat [ @@ -128,18 +143,24 @@ (keyword_catch) ] @keyword.exception -[ - (keyword_return) - (keyword_quit) -] @keyword.return +(keyword_return) @keyword.return [ (keyword_break) + (keyword_zbreak) (keyword_debug) (keyword_trace) (keyword_step) (keyword_nostep) (keyword_stepmethod) + (keyword_errortrap) + (keyword_interrupt) + (keyword_normal) + (keyword_zkill) + (keyword_zn) + (keyword_zsu) + (keyword_ztrap) + (keyword_zz) ] @keyword.debug [ @@ -152,12 +173,11 @@ (keyword_pound_ifdef) (keyword_pound_ifndef) (keyword_dim) -] @keyword.directive - -[ (keyword_pound_import) (keyword_pound_include) -] @keyword.import + (keyword_pound_delay) + (locktype) +] @keyword.directive [ (keyword_as) @@ -165,27 +185,62 @@ (keyword_public) (keyword_private) (keyword_methodimpl) + (open_keywords) + (use_keywords) + (close_parameter_option_value) + (keyword_clear) + (keyword_on) + (keyword_off) + (keyword_all) + (keyword_ext) + (keyword_stepmethod) + (keyword_destruct) ] @keyword.modifier -keyword: (_) @keyword +[ + (keyword_print) + (keyword_zprint) + (keyword_set) + (keyword_write) + (keyword_zwrite) + (keyword_do) + (keyword_for) + (keyword_while) + (keyword_kill) + (keyword_lock) + (keyword_read) + (keyword_open) + (keyword_close) + (keyword_use) + (keyword_new) + (keyword_job) + (keyword_merge) + (keyword_goto) + (keyword_halt_or_hang) + (keyword_halt) + (keyword_hang) + (keyword_tcommit) + (keyword_trollback) + (keyword_tstart) + (keyword_xecute) + (keyword_view) +] @function.builtin -(embedded_js_special_case_complete) @punctuation.special +[ + (keyword_embedded_html) + (keyword_embedded_xml) + (keyword_embedded_sql_amp) + (keyword_embedded_sql_hash) + (keyword_js) +] @keyword.operator -(embedded_sql_marker) @punctuation.special - -(embedded_sql_reverse_marker) @punctuation.special - -(html_marker) @punctuation.special - -(html_marker_reversed) @punctuation.special - -(attribute) @attribute - -(open_keywords) @keyword.modifier - -(use_keywords) @keyword.modifier - -(close_parameter_option_value) @keyword.modifier +[ + (embedded_js_special_case_complete) + (embedded_sql_marker) + (embedded_sql_reverse_marker) + (html_marker) + (html_marker_reversed) +] @punctuation.special [ (line_comment_1) @@ -195,7 +250,24 @@ keyword: (_) @keyword (block_comment) ] @comment @spell -(tag) @tag +(namespace) @module + +(tag) @label + +[ + (command_quit) + (command_else) + (command_continue) + (command_if) + (command_do) + (command_for) + (command_lock) + (command_return) + (command_halt_or_hang) + (command_break) +] @comment + +(iris_username) @keyword.directive [ (keyword_import) @@ -223,14 +295,6 @@ keyword: (_) @keyword (keyword_storage) ] @keyword.type -[ - (keyword_as) - (keyword_of) - (keyword_on) - (keyword_not) - (keyword_references) -] @keyword.modifier - [ (method_keyword_codemode_expression) (call_method_keyword) @@ -248,40 +312,36 @@ keyword: (_) @keyword (xdata_keyword) (xdata_keyword_mimetype) (property_keyword) + (keyword_not) + (keyword_references) + (keyword_byref) + (keyword_output) ] @keyword.modifier -(documatic_line) @comment.documentation +(documatic_line) @comment.documentation @spell -(query_name) @property +[ + (query_name) + (trigger_name) + (relationship_name) + (foreignkey_name) + (parameter_name) + (projection_name) + (index_name) + (xdata_name) + (storage_name) + (xml_identifier) + (index_property) +] @variable.member -(property_name) @property - -(relationship_name) @property - -(foreignkey_name) @property - -(parameter_name) @property - -(projection_name) @property - -(index_name) @property - -(xdata_name) @property - -(storage_name) @property - -(return_type) @type.builtin - -(typename) @type - -(parameter_type) @type.builtin - -(index_type) @type.builtin - -(projection_type) @type.builtin - -(property_type) @type.builtin - -(index_property_type) @type.builtin - -(identifier) @variable +[ + (return_type) + (keyword_list) + (keyword_array) + (parameter_type) + (index_type) + (projection_type) + (property_type) + (index_property_type) + (typename) +] @type.builtin diff --git a/runtime/queries/objectscript_udl/injections.scm b/runtime/queries/objectscript_udl/injections.scm index dbac3e801..0307dbcee 100644 --- a/runtime/queries/objectscript_udl/injections.scm +++ b/runtime/queries/objectscript_udl/injections.scm @@ -29,7 +29,7 @@ (method_definition (external_method_keywords (method_keyword_language - (rhs) @_lang)) + (typename) @_lang)) (external_method_body_content) @injection.content (#set! injection.include-children "true") (#any-of? @_lang "python" "Python" "PYTHON") @@ -38,7 +38,7 @@ (method_definition (external_method_keywords (method_keyword_language - (rhs) @_lang)) + (typename) @_lang)) (external_method_body_content) @injection.content (#set! injection.include-children "true") (#any-of? @_lang "tsql" "TSQL" "tSQL" "tSql" "TSql") @@ -47,7 +47,7 @@ (method_definition (external_method_keywords (method_keyword_language - (rhs) @_lang)) + (typename) @_lang)) (external_method_body_content) @injection.content (#set! injection.include-children "true") (#any-of? @_lang "ispl" "ISPL" "ISpl" "iSpl") @@ -57,7 +57,7 @@ (external_trigger (trigger_keywords (method_keyword_language - (rhs) @_lang)) + (typename) @_lang)) (external_method_body_content) @injection.content)) (#set! injection.include-children "true") (#any-of? @_lang "python" "Python" "PYTHON") @@ -67,7 +67,7 @@ (external_trigger (trigger_keywords (method_keyword_language - (rhs) @_lang)) + (typename) @_lang)) (external_method_body_content) @injection.content)) (#set! injection.include-children "true") (#any-of? @_lang "tsql" "TSQL" "tSQL" "tSql" "TSql") @@ -87,7 +87,7 @@ (xdata_any (xdata_keywords (xdata_keyword_mimetype - (rhs) @_mt)) + (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") (#any-of? @_mt "text/markdown" "\"text/markdown\"") @@ -97,7 +97,7 @@ (xdata_any (xdata_keywords (xdata_keyword_mimetype - (rhs) @_mt)) + (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") (#any-of? @_mt "text/xml" "\"text/xml\"" "application/xml" "\"application/xml\"") @@ -107,7 +107,7 @@ (xdata_any (xdata_keywords (xdata_keyword_mimetype - (rhs) @_mt)) + (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") (#any-of? @_mt "text/html" "\"text/html\"") @@ -117,7 +117,7 @@ (xdata_any (xdata_keywords (xdata_keyword_mimetype - (rhs) @_mt)) + (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") (#any-of? @_mt "application/json" "\"application/json\"") @@ -127,7 +127,7 @@ (xdata_any (xdata_keywords (xdata_keyword_mimetype - (rhs) @_mt)) + (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") (#any-of? @_mt "text/yaml" "\"text/yaml\"" "application/yaml" "\"application/yaml\"") @@ -137,7 +137,7 @@ (xdata_any (xdata_keywords (xdata_keyword_mimetype - (rhs) @_mt)) + (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") (#any-of? @_mt "text/css" "\"text/css\"") From 57bee5b4b8dad67c8819de3a2565913440b9b925 Mon Sep 17 00:00:00 2001 From: Hannah Date: Tue, 24 Mar 2026 16:46:48 -0400 Subject: [PATCH 5/8] feat(highlights): add -- as operator highlight --- runtime/queries/objectscript_routine/highlights.scm | 1 + runtime/queries/objectscript_udl/highlights.scm | 1 + 2 files changed, 2 insertions(+) diff --git a/runtime/queries/objectscript_routine/highlights.scm b/runtime/queries/objectscript_routine/highlights.scm index cbec0cf19..2e8b5ff92 100644 --- a/runtime/queries/objectscript_routine/highlights.scm +++ b/runtime/queries/objectscript_routine/highlights.scm @@ -117,6 +117,7 @@ "'?" "!" "?" + "--" ] @operator (bracket) @punctuation.bracket diff --git a/runtime/queries/objectscript_udl/highlights.scm b/runtime/queries/objectscript_udl/highlights.scm index 2287c0042..a7539a13f 100644 --- a/runtime/queries/objectscript_udl/highlights.scm +++ b/runtime/queries/objectscript_udl/highlights.scm @@ -113,6 +113,7 @@ "'?" "!" "?" + "--" ] @operator (bracket) @punctuation.bracket From b9173266f7430d905bed724ebae43bf68cdf0ba5 Mon Sep 17 00:00:00 2001 From: Hannah Date: Mon, 30 Mar 2026 12:38:42 -0400 Subject: [PATCH 6/8] chore: update commit and highlights to most recent version --- lua/nvim-treesitter/parsers.lua | 4 +- .../objectscript_routine/highlights.scm | 8 ++- .../queries/objectscript_routine/indents.scm | 8 +++ .../objectscript_routine/injections.scm | 8 +++ .../queries/objectscript_udl/highlights.scm | 16 +++++- runtime/queries/objectscript_udl/indents.scm | 8 +++ .../queries/objectscript_udl/injections.scm | 56 +++++++++++++++---- 7 files changed, 88 insertions(+), 20 deletions(-) diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 184eebada..0779734be 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -1501,7 +1501,7 @@ return { objectscript_routine = { install_info = { location = 'objectscript_routine', - revision = 'a60196ecc4e6d492510a0eb0374e74020895b917', + revision = 'f1c568c622a0a43191563fd4c5e649a61eef11cc', url = 'https://github.com/intersystems/tree-sitter-objectscript', }, maintainers = { '@davem-intersys', '@hkimura-intersys' }, @@ -1510,7 +1510,7 @@ return { objectscript_udl = { install_info = { location = 'udl', - revision = 'a60196ecc4e6d492510a0eb0374e74020895b917', + revision = 'f1c568c622a0a43191563fd4c5e649a61eef11cc', url = 'https://github.com/intersystems/tree-sitter-objectscript', }, maintainers = { '@davem-intersys', '@hkimura-intersys' }, diff --git a/runtime/queries/objectscript_routine/highlights.scm b/runtime/queries/objectscript_routine/highlights.scm index 2e8b5ff92..7ba421bde 100644 --- a/runtime/queries/objectscript_routine/highlights.scm +++ b/runtime/queries/objectscript_routine/highlights.scm @@ -117,7 +117,6 @@ "'?" "!" "?" - "--" ] @operator (bracket) @punctuation.bracket @@ -192,8 +191,7 @@ (keyword_public) (keyword_private) (keyword_methodimpl) - (open_keywords) - (use_keywords) + (device_keywords) (close_parameter_option_value) (keyword_clear) (keyword_on) @@ -274,6 +272,8 @@ (command_break) ] @comment +"--" @operator + ; === END CORE === ; === BEGIN LOCAL === (routine_type) @type.builtin @@ -282,4 +282,6 @@ (routine) @keyword.type +(compiled_header) @markup.heading + ; === END LOCAL === diff --git a/runtime/queries/objectscript_routine/indents.scm b/runtime/queries/objectscript_routine/indents.scm index a49aa039e..ce0f064b2 100644 --- a/runtime/queries/objectscript_routine/indents.scm +++ b/runtime/queries/objectscript_routine/indents.scm @@ -1,3 +1,11 @@ +; AUTO-GENERATED by scripts/sync_queries.py +; Edit only the LOCAL section in composed files. +; File: indents.scm +; === BEGIN CORE === "{" @indent.begin "}" @indent.end + +; === END CORE === +; === BEGIN LOCAL === +; === END LOCAL === diff --git a/runtime/queries/objectscript_routine/injections.scm b/runtime/queries/objectscript_routine/injections.scm index c6bfab662..70529732b 100644 --- a/runtime/queries/objectscript_routine/injections.scm +++ b/runtime/queries/objectscript_routine/injections.scm @@ -1,3 +1,7 @@ +; AUTO-GENERATED by scripts/sync_queries.py +; Edit only the LOCAL section in composed files. +; File: injections.scm +; === BEGIN CORE === (embedded_html (angled_bracket_fenced_text) @injection.content (#set! injection.language "html")) @@ -25,3 +29,7 @@ (block_comment) ] @injection.content (#set! injection.language "comment")) + +; === END CORE === +; === BEGIN LOCAL === +; === END LOCAL === diff --git a/runtime/queries/objectscript_udl/highlights.scm b/runtime/queries/objectscript_udl/highlights.scm index a7539a13f..454e195a1 100644 --- a/runtime/queries/objectscript_udl/highlights.scm +++ b/runtime/queries/objectscript_udl/highlights.scm @@ -1,3 +1,7 @@ +; AUTO-GENERATED by scripts/sync_queries.py +; Edit only the LOCAL section in composed files. +; File: highlights.scm +; === BEGIN EXPR === (pattern_expression) @string.regexp [ @@ -113,11 +117,12 @@ "'?" "!" "?" - "--" ] @operator (bracket) @punctuation.bracket +; === END EXPR === +; === BEGIN CORE === (macro_arg) @variable.member (macro_value) @constant.builtin @@ -186,8 +191,7 @@ (keyword_public) (keyword_private) (keyword_methodimpl) - (open_keywords) - (use_keywords) + (device_keywords) (close_parameter_option_value) (keyword_clear) (keyword_on) @@ -268,6 +272,10 @@ (command_break) ] @comment +"--" @operator + +; === END CORE === +; === BEGIN LOCAL === (iris_username) @keyword.directive [ @@ -346,3 +354,5 @@ (index_property_type) (typename) ] @type.builtin + +; === END LOCAL === diff --git a/runtime/queries/objectscript_udl/indents.scm b/runtime/queries/objectscript_udl/indents.scm index a49aa039e..ce0f064b2 100644 --- a/runtime/queries/objectscript_udl/indents.scm +++ b/runtime/queries/objectscript_udl/indents.scm @@ -1,3 +1,11 @@ +; AUTO-GENERATED by scripts/sync_queries.py +; Edit only the LOCAL section in composed files. +; File: indents.scm +; === BEGIN CORE === "{" @indent.begin "}" @indent.end + +; === END CORE === +; === BEGIN LOCAL === +; === END LOCAL === diff --git a/runtime/queries/objectscript_udl/injections.scm b/runtime/queries/objectscript_udl/injections.scm index 0307dbcee..3289fa70c 100644 --- a/runtime/queries/objectscript_udl/injections.scm +++ b/runtime/queries/objectscript_udl/injections.scm @@ -1,3 +1,7 @@ +; AUTO-GENERATED by scripts/sync_queries.py +; Edit only the LOCAL section in composed files. +; File: injections.scm +; === BEGIN CORE === (embedded_html (angled_bracket_fenced_text) @injection.content (#set! injection.language "html")) @@ -26,13 +30,17 @@ ] @injection.content (#set! injection.language "comment")) +; === END CORE === +; === BEGIN LOCAL === +; Keywords, one of type language = "python", none of type codemode +; External method body injection based on [ Language = ... ] (method_definition (external_method_keywords (method_keyword_language (typename) @_lang)) (external_method_body_content) @injection.content (#set! injection.include-children "true") - (#any-of? @_lang "python" "Python" "PYTHON") + (#match? @_lang "^[Pp][Yy][Tt][Hh][Oo][Nn]$") (#set! injection.language "python")) (method_definition @@ -41,7 +49,7 @@ (typename) @_lang)) (external_method_body_content) @injection.content (#set! injection.include-children "true") - (#any-of? @_lang "tsql" "TSQL" "tSQL" "tSql" "TSql") + (#match? @_lang "^[Tt][Ss][Qq][Ll]$") (#set! injection.language "tsql")) (method_definition @@ -50,9 +58,10 @@ (typename) @_lang)) (external_method_body_content) @injection.content (#set! injection.include-children "true") - (#any-of? @_lang "ispl" "ISPL" "ISpl" "iSpl") + (#match? @_lang "^[Ii][Ss][Pp][Ll]$") (#set! injection.language "ispl")) +; External trigger with python body ((trigger (external_trigger (trigger_keywords @@ -60,9 +69,10 @@ (typename) @_lang)) (external_method_body_content) @injection.content)) (#set! injection.include-children "true") - (#any-of? @_lang "python" "Python" "PYTHON") + (#match? @_lang "^[Pp][Yy][Tt][Hh][Oo][Nn]$") (#set! injection.language "python")) +; External trigger with TSQL body ((trigger (external_trigger (trigger_keywords @@ -70,19 +80,28 @@ (typename) @_lang)) (external_method_body_content) @injection.content)) (#set! injection.include-children "true") - (#any-of? @_lang "tsql" "TSQL" "tSQL" "tSql" "TSql") + (#match? @_lang "^[Tt][Ss][Qq][Ll]$") (#set! injection.language "tsql")) +; A query must be of type %SQLQuery to have an SQL body, otherwise the body +; is empty (query (return_type (typename (identifier) @_querytype - (#any-of? @_querytype "%SqlQuery" "%sqlquery" "%SQLQUERY" "%Sqlquery" "%SQLQuery"))) + (#match? @_querytype "^%[Ss][Qq][Ll][Qq][Uu][Ee][Rr][Yy]$"))) (query_body (query_body_content) @injection.content) (#set! injection.language "sql") (#set! injection.include-children "true")) +; XDATA blocks: +; - xdata_any requires a keyword list that includes MimeType +; - xdata_xml allows an optional keyword list and defaults to XML +; ---------------------------- +; XDATA injections (MimeType) +; ---------------------------- +; text/markdown (xdata (xdata_any (xdata_keywords @@ -90,9 +109,10 @@ (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#any-of? @_mt "text/markdown" "\"text/markdown\"") + (#match? @_mt "^\"?text/markdown\"?$") (#set! injection.language "markdown")) +; XML MimeTypes (xdata (xdata_any (xdata_keywords @@ -100,9 +120,11 @@ (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#any-of? @_mt "text/xml" "\"text/xml\"" "application/xml" "\"application/xml\"") + (#match? @_mt + "^\"?([Tt][Ee][Xx][Tt]|[Aa][Pp][Pp][Ll][Ii][Cc][Aa][Tt][Ii][Oo][Nn])/[Xx][Mm][Ll]\"?$") (#set! injection.language "xml")) +; text/html (xdata (xdata_any (xdata_keywords @@ -110,9 +132,10 @@ (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#any-of? @_mt "text/html" "\"text/html\"") + (#match? @_mt "^\"?text/html\"?$") (#set! injection.language "html")) +; application/json (xdata (xdata_any (xdata_keywords @@ -120,9 +143,10 @@ (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#any-of? @_mt "application/json" "\"application/json\"") + (#match? @_mt "^\"?application/json\"?$") (#set! injection.language "json")) +; text/yaml or application/yaml (xdata (xdata_any (xdata_keywords @@ -130,9 +154,11 @@ (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#any-of? @_mt "text/yaml" "\"text/yaml\"" "application/yaml" "\"application/yaml\"") + (#match? @_mt + "^\"?([Tt][Ee][Xx][Tt]|[Aa][Pp][Pp][Ll][Ii][Cc][Aa][Tt][Ii][Oo][Nn])/[Yy][Aa][Mm][Ll]\"?$") (#set! injection.language "yaml")) +; text/css (xdata (xdata_any (xdata_keywords @@ -140,9 +166,12 @@ (typename) @_mt)) (external_method_body_content) @injection.content) (#set! injection.include-children "true") - (#any-of? @_mt "text/css" "\"text/css\"") + (#match? @_mt "^\"?text/css\"?$") (#set! injection.language "css")) +; ----------------------------------------- +; XDATA default (no MimeType): XML fallback +; ----------------------------------------- (xdata (xdata_xml (xdata_keywords)? @@ -150,8 +179,11 @@ (#set! injection.include-children "true") (#set! injection.language "xml")) +; Storage definition is XML (storage (storage_body (external_method_body_content) @injection.content) (#set! injection.language "xml") (#set! injection.include-children "true")) + +; === END LOCAL === From 193a0170d2980bad97ef5157e20f51c926272665 Mon Sep 17 00:00:00 2001 From: Hannah Date: Tue, 31 Mar 2026 12:08:46 -0400 Subject: [PATCH 7/8] feat: update commit --- lua/nvim-treesitter/parsers.lua | 4 ++-- plugin/filetypes.lua | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 0779734be..fe9051f6e 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -1501,7 +1501,7 @@ return { objectscript_routine = { install_info = { location = 'objectscript_routine', - revision = 'f1c568c622a0a43191563fd4c5e649a61eef11cc', + revision = '4216acea5ba1c92217f0d366c9d9c7b44b34a7b9', url = 'https://github.com/intersystems/tree-sitter-objectscript', }, maintainers = { '@davem-intersys', '@hkimura-intersys' }, @@ -1510,7 +1510,7 @@ return { objectscript_udl = { install_info = { location = 'udl', - revision = 'f1c568c622a0a43191563fd4c5e649a61eef11cc', + revision = '4216acea5ba1c92217f0d366c9d9c7b44b34a7b9', url = 'https://github.com/intersystems/tree-sitter-objectscript', }, maintainers = { '@davem-intersys', '@hkimura-intersys' }, diff --git a/plugin/filetypes.lua b/plugin/filetypes.lua index 927389aa5..f08368576 100644 --- a/plugin/filetypes.lua +++ b/plugin/filetypes.lua @@ -33,6 +33,7 @@ local filetypes = { markdown = { 'pandoc' }, muttrc = { 'neomuttrc' }, objectscript_udl = { 'objectscript' }, + objectscript_routine = {'iris_rtn'}, ocaml_interface = { 'ocamlinterface' }, perl = { 'pl' }, poe_filter = { 'poefilter' }, From a385dd092d8283a83fada5d93fd8055e726e317a Mon Sep 17 00:00:00 2001 From: Hannah Date: Tue, 31 Mar 2026 14:17:12 -0400 Subject: [PATCH 8/8] fix: remove iris_rtn mapping --- plugin/filetypes.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/plugin/filetypes.lua b/plugin/filetypes.lua index f08368576..927389aa5 100644 --- a/plugin/filetypes.lua +++ b/plugin/filetypes.lua @@ -33,7 +33,6 @@ local filetypes = { markdown = { 'pandoc' }, muttrc = { 'neomuttrc' }, objectscript_udl = { 'objectscript' }, - objectscript_routine = {'iris_rtn'}, ocaml_interface = { 'ocamlinterface' }, perl = { 'pl' }, poe_filter = { 'poefilter' },