From 4e9f16dd1ef8b48d4a37fde479adde1758796871 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Mon, 13 Oct 2025 18:28:58 +0000 Subject: [PATCH] runtime(rst): Correctly end nested comments Previously, a comment in a directive block would incorrectly mark all subsequent lines in the directive block as comment, because the syn-region did not check the leading indent. related: #18566 Signed-off-by: Antony Lee Signed-off-by: Marshall Ward Signed-off-by: Christian Brabandt --- runtime/syntax/rst.vim | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/runtime/syntax/rst.vim b/runtime/syntax/rst.vim index 4b9379f5e6..8094d8771b 100644 --- a/runtime/syntax/rst.vim +++ b/runtime/syntax/rst.vim @@ -52,7 +52,8 @@ syn cluster rstDirectives contains=rstFootnote,rstCitation, \ rstHyperlinkTarget,rstExDirective syn match rstExplicitMarkup '^\s*\.\.\_s' - \ nextgroup=@rstDirectives,rstComment,rstSubstitutionDefinition + \ nextgroup=@rstDirectives,rstSubstitutionDefinition + \ contains=rstComment " "Simple reference names are single words consisting of alphanumerics plus " isolated (no two adjacent) internal hyphens, underscores, periods, colons @@ -61,10 +62,10 @@ let s:ReferenceName = '[[:alnum:]]\%([-_.:+]\?[[:alnum:]]\+\)*' syn keyword rstTodo contained FIXME TODO XXX NOTE -execute 'syn region rstComment contained' . - \ ' start=/.*/' - \ ' skip=+^$+' . - \ ' end=/^\s\@!/ contains=rstTodo' +syn region rstComment + \ start='\v^\z(\s*)\.\.(\_s+[\[|_]|\_s+.*::)@!' skip=+^$+ end=/^\(\z1 \)\@!/ + \ contains=@Spell,rstTodo + execute 'syn region rstFootnote contained matchgroup=rstDirective' . \ ' start=+\[\%(\d\+\|#\%(' . s:ReferenceName . '\)\=\|\*\)\]\_s+' .