From 2ce979dec09fb1eb4e0d5432f1d81b9e7b8751c7 Mon Sep 17 00:00:00 2001 From: da-r-k Date: Fri, 27 Feb 2026 03:28:59 +0530 Subject: [PATCH 1/2] feat(doxygen): add Javadoc/Doxygen syntax highlighting Add tree-sitter-doxygen grammar and injection rules to highlight Javadoc tags (@param, @return, @throws, etc.) inside /** comments. Uses a WASM-compatible fork of tree-sitter-doxygen until tree-sitter-grammars/tree-sitter-doxygen#21 is merged upstream. Co-Authored-By: Claude Opus 4.6 --- extension.toml | 4 +++ languages/doxygen/config.toml | 9 ++++++ languages/doxygen/highlights.scm | 53 ++++++++++++++++++++++++++++++++ languages/java/injections.scm | 2 +- 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 languages/doxygen/config.toml create mode 100644 languages/doxygen/highlights.scm diff --git a/extension.toml b/extension.toml index 91f82a9..a80aeaf 100644 --- a/extension.toml +++ b/extension.toml @@ -12,6 +12,10 @@ repository = "https://github.com/zed-extensions/java" repository = "https://github.com/tree-sitter/tree-sitter-java" commit = "94703d5a6bed02b98e438d7cad1136c01a60ba2c" +[grammars.doxygen] +repository = "https://github.com/da-r-k/tree-sitter-doxygen" +commit = "4523f899192571744a9bb064c69594a157fa4a7d" + [grammars.properties] repository = "https://github.com/tree-sitter-grammars/tree-sitter-properties" commit = "579b62f5ad8d96c2bb331f07d1408c92767531d9" diff --git a/languages/doxygen/config.toml b/languages/doxygen/config.toml new file mode 100644 index 0000000..a3fdf40 --- /dev/null +++ b/languages/doxygen/config.toml @@ -0,0 +1,9 @@ +name = "Doxygen" +grammar = "doxygen" +autoclose_before = "]})>" +brackets = [ + { start = "{", end = "}", close = true, newline = false }, + { start = "[", end = "]", close = true, newline = false }, + { start = "(", end = ")", close = true, newline = false }, +] +hidden = true diff --git a/languages/doxygen/highlights.scm b/languages/doxygen/highlights.scm new file mode 100644 index 0000000..6bd37df --- /dev/null +++ b/languages/doxygen/highlights.scm @@ -0,0 +1,53 @@ +((tag_name) @keyword + (#set! "priority" 105)) + +[ + "@code" + "@endcode" +] @keyword + +(identifier) @variable + +((tag + (tag_name) @_param + (identifier) @variable.parameter) + (#any-of? @_param "@param" "\\param")) + +(function (identifier) @function) + +(function_link) @function + +(emphasis) @markup.italic + +[ + "\\a" + "\\c" +] @tag + +(code_block_language) @label + +[ + "in" + "out" + "inout" +] @keyword.modifier + +"~" @operator + +[ + "" + "" +] @tag + +[ + "." + "," + "::" + (code_block_start) + (code_block_end) +] @punctuation.delimiter + +["(" ")" "{" "}" "[" "]"] @punctuation.bracket + +(code_block_content) @none diff --git a/languages/java/injections.scm b/languages/java/injections.scm index 8113bea..e8978d0 100644 --- a/languages/java/injections.scm +++ b/languages/java/injections.scm @@ -5,7 +5,7 @@ (#set! injection.language "comment")) ((block_comment) @injection.content - (#lua-match? @injection.content "/[*][!<*][^a-zA-Z]") + (#match? @injection.content "^/\\*\\*[^*]") (#set! injection.language "doxygen")) ((method_invocation From cf70c32f1c829341af0f772e29e2d92e8610655d Mon Sep 17 00:00:00 2001 From: da-r-k Date: Fri, 27 Feb 2026 05:42:08 +0530 Subject: [PATCH 2/2] feat(doxygen): add code block injection and refine highlights - Inject Java syntax into @code/@endcode blocks - Restrict tag highlighting to valid Javadoc tags only - Remove Doxygen-only features (\a, \c emphasis) Co-Authored-By: Claude Opus 4.6 --- languages/doxygen/highlights.scm | 46 +++++++++----------------------- languages/doxygen/injections.scm | 7 +++++ 2 files changed, 20 insertions(+), 33 deletions(-) create mode 100644 languages/doxygen/injections.scm diff --git a/languages/doxygen/highlights.scm b/languages/doxygen/highlights.scm index 6bd37df..5320f87 100644 --- a/languages/doxygen/highlights.scm +++ b/languages/doxygen/highlights.scm @@ -1,39 +1,22 @@ ((tag_name) @keyword + (#any-of? @keyword + "@param" "@return" "@returns" "@throws" "@exception" + "@see" "@since" "@version" "@author" "@deprecated" + "@serial" "@serialField" "@serialData" + "@link" "@linkplain" "@value" "@literal" "@code" + "@inheritDoc" "@docRoot" "@hidden" "@index" + "@provides" "@uses" "@implSpec" "@implNote" "@apiNote") (#set! "priority" 105)) -[ - "@code" - "@endcode" -] @keyword - -(identifier) @variable - ((tag (tag_name) @_param (identifier) @variable.parameter) - (#any-of? @_param "@param" "\\param")) + (#any-of? @_param "@param")) (function (identifier) @function) (function_link) @function -(emphasis) @markup.italic - -[ - "\\a" - "\\c" -] @tag - -(code_block_language) @label - -[ - "in" - "out" - "inout" -] @keyword.modifier - -"~" @operator - [ "" @@ -41,13 +24,10 @@ ] @tag [ - "." - "," - "::" - (code_block_start) - (code_block_end) -] @punctuation.delimiter + "@code" + "@endcode" +] @keyword -["(" ")" "{" "}" "[" "]"] @punctuation.bracket +(code_block_language) @label -(code_block_content) @none +["(" ")" "{" "}" "[" "]"] @punctuation.bracket diff --git a/languages/doxygen/injections.scm b/languages/doxygen/injections.scm new file mode 100644 index 0000000..91838f0 --- /dev/null +++ b/languages/doxygen/injections.scm @@ -0,0 +1,7 @@ +((code_block + (code_block_language) @injection.language + (code_block_content) @injection.content)) + +((code_block + (code_block_content) @injection.content) + (#set! injection.language "java"))