Commit: runtime(rst): Fix highlights nested in directive body

0 views
Skip to first unread message

Christian Brabandt

unread,
Oct 13, 2025, 2:45:20 PMOct 13
to vim...@googlegroups.com
runtime(rst): Fix highlights nested in directive body

Commit: https://github.com/vim/vim/commit/47949b4b46965fdabbbe84cbe14027890d4ed3b8
Author: Minjie Xu <madj...@gmail.com>
Date: Mon Oct 13 18:27:49 2025 +0000

runtime(rst): Fix highlights nested in directive body

The leading two dots of a RST directive gets matched by
rstExplicitMarkup group first, and then the directive name and directive
body will be matched by the groups contained in rstDirectives cluster in
order.

The rstExDirective group in rstDiretives matches any RST directives
other than footnote, citation and hyperlink target, therefore admonition
and code block will be matched by rstExDirective. This fix has
rstExDirective contain rstExplicitMarkup so as to enable recursive RST
directives match.

The interpreted texts enclosed in quotes are not highlighted within a
RST directive body, because the rstCruft cluster contains a non-existing
rstInterpretedText group.It should be renamed to
rstInterpretedTextOrHyperlinkReference which is defined in a
DefineInlineMarkup function call.

related: #18566

Signed-off-by: Minjie Xu <madj...@gmail.com>
Signed-off-by: Marshall Ward <marsha...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/syntax/rst.vim b/runtime/syntax/rst.vim
index 34e43932b..4b9379f5e 100644
--- a/runtime/syntax/rst.vim
+++ b/runtime/syntax/rst.vim
@@ -17,8 +17,9 @@ syn case ignore
syn match rstTransition /^[=`:.'"~^_*+#-]\{4,}\s*$/

syn cluster rstCruft contains=rstEmphasis,rstStrongEmphasis,
- \ rstInterpretedText,rstInlineLiteral,rstSubstitutionReference,
- \ rstInlineInternalTargets,rstFootnoteReference,rstHyperlinkReference
+ \ rstInterpretedTextOrHyperlinkReference,rstInlineLiteral,
+ \ rstSubstitutionReference,rstInlineInternalTargets,rstFootnoteReference,
+ \ rstHyperlinkReference

syn region rstLiteralBlock matchgroup=rstDelimiter
\ start='\(^\z(\s*\).*\)\@<=::
\s*
' skip='^\s*$' end='^\(\z1\s\+\)\@!'
@@ -87,7 +88,7 @@ syn region rstHyperlinkTarget matchgroup=rstDirective
execute 'syn region rstExDirective contained matchgroup=rstDirective' .
\ ' start=+' . s:ReferenceName . '::\_s+' .
\ ' skip=+^$+' .
- \ ' end=+^\s\@!+ contains=@rstCruft,rstLiteralBlock'
+ \ ' end=+^\s\@!+ contains=@rstCruft,rstLiteralBlock,rstExplicitMarkup'

execute 'syn match rstSubstitutionDefinition contained' .
\ ' /|.*|\_s\+/ nextgroup=@rstDirectives'
Reply all
Reply to author
Forward
0 new messages