feat(markdown)!: switch to split parser (#3048)

* switch to split markdown parser with separate block and inline parsers to improve performance
* add exclude_children! directive (useful for something like Injected markdown incorrectly highlights indented docstrings #2212)
* split markdown queries into block and inline ones and add the injection for inline into block grammar
* add include_dir option to parser configs (needed because the two grammars don't live in the repos root directory)

BREAKING CHANGE: downstream queries need to be adapted to new parser
This commit is contained in:
Matthias Deiml 2022-06-26 18:02:29 +02:00 committed by GitHub
parent d810c38634
commit 002084b1be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 121 additions and 61 deletions

View file

@ -1,6 +1,6 @@
;; From MDeiml/tree-sitter-markdown
(atx_heading (heading_content) @text.title)
(setext_heading (heading_content) @text.title)
;From MDeiml/tree-sitter-markdown
(atx_heading (inline) @text.title)
(setext_heading (paragraph) @text.title)
[
(atx_h1_marker)
@ -14,33 +14,23 @@
] @punctuation.special
[
(code_span)
(link_title)
(indented_code_block)
(fenced_code_block)
] @text.literal
[
(emphasis_delimiter)
(code_span_delimiter)
(fenced_code_block_delimiter)
] @punctuation.delimiter
(code_fence_content) @none
(emphasis) @text.emphasis
(strong_emphasis) @text.strong
[
(link_destination)
(uri_autolink)
] @text.uri
[
(link_label)
(link_text)
(image_description)
] @text.reference
[
@ -52,56 +42,17 @@
(thematic_break)
] @punctuation.special
(block_quote_marker) @punctuation.special
[
(block_continuation)
(block_quote_marker)
] @punctuation.special
[
(backslash_escape)
(hard_line_break)
] @string.escape
(image "!" @punctuation.delimiter)
(image "[" @punctuation.delimiter)
(image "]" @punctuation.delimiter)
(image "(" @punctuation.delimiter)
; (image ")" @punctuation.delimiter)
(inline_link "[" @punctuation.delimiter)
(inline_link "]" @punctuation.delimiter)
(inline_link "(" @punctuation.delimiter)
; (inline_link ")" @punctuation.delimiter)
(shortcut_link "[" @punctuation.delimiter)
(shortcut_link "]" @punctuation.delimiter)
([
(info_string)
(fenced_code_block_delimiter)
(code_span_delimiter)
(emphasis_delimiter)
] @conceal
(#set! conceal ""))
; Conceal inline links
(inline_link
[
"["
"]"
"("
(link_destination)
")"
] @conceal
(#set! conceal ""))
; Conceal image links
(image
[
"!"
"["
"]"
"("
(link_destination)
")"
] @conceal
(#set! conceal ""))

View file

@ -1,9 +1,9 @@
(fenced_code_block
(info_string
(language) @language)
(code_fence_content) @content)
(code_fence_content) @content (#exclude_children! @content))
((html_block) @html)
((html_tag) @html)
(document . (thematic_break) (_) @yaml @combined (thematic_break))
(document . (section . (thematic_break) (_) @yaml @combined (thematic_break)))
((inline) @markdown_inline (#exclude_children! @markdown_inline))

View file

@ -0,0 +1,67 @@
;; From MDeiml/tree-sitter-markdown
[
(code_span)
(link_title)
] @text.literal
[
(emphasis_delimiter)
(code_span_delimiter)
] @punctuation.delimiter
(emphasis) @text.emphasis
(strong_emphasis) @text.strong
[
(link_destination)
(uri_autolink)
] @text.uri
[
(link_label)
(link_text)
(image_description)
] @text.reference
[
(backslash_escape)
(hard_line_break)
] @string.escape
; "(" not part of query because of
; https://github.com/nvim-treesitter/nvim-treesitter/issues/2206
; TODO: Find better fix for this
(image ["!" "[" "]" "("] @punctuation.delimiter)
(inline_link ["[" "]" "("] @punctuation.delimiter)
(shortcut_link ["[" "]"] @punctuation.delimiter)
([
(code_span_delimiter)
(emphasis_delimiter)
] @conceal
(#set! conceal ""))
; Conceal inline links
(inline_link
[
"["
"]"
"("
(link_destination)
")"
] @conceal
(#set! conceal ""))
; Conceal image links
(image
[
"!"
"["
"]"
"("
(link_destination)
")"
] @conceal
(#set! conceal ""))

View file

@ -0,0 +1 @@
((html_tag) @html)