From b04c0ad2059b2da65bcd013b72e7e13393d4d6fb Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 5 Jul 2026 20:52:59 -0400 Subject: [PATCH] Do not highlight rule components as propane keywords --- extra/vim/syntax/propane.vim | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/extra/vim/syntax/propane.vim b/extra/vim/syntax/propane.vim index 451c0c2..a47cd5d 100644 --- a/extra/vim/syntax/propane.vim +++ b/extra/vim/syntax/propane.vim @@ -20,10 +20,16 @@ exe "syn include @propaneTarget syntax/".b:propane_subtype.".vim" syn region propaneTarget matchgroup=propaneDelimiter start="<<" end=">>$" contains=@propaneTarget keepend syn match propaneComment "#.*" -syn match propaneOperator "->" syn match propaneFieldAlias ":[a-zA-Z0-9_]\+" contains=propaneFieldOperator syn match propaneFieldOperator ":" contained syn match propaneOperator "?" +" The right-hand side of a rule (after '->' up to '<<' or ';') lists symbol +" names that may coincide with propane keywords (e.g. 'start', 'token', +" 'tree'). Wrap it in a region that excludes keyword matches so those names +" are not highlighted as keywords. The '<<' is left unconsumed so the +" propaneTarget region can still match it. +syn region propaneRuleRhs matchgroup=propaneOperator start="->" end="\ze<<" end=";" contains=propaneFieldAlias,propaneRuleOperator,propaneComment keepend +syn match propaneRuleOperator "?" contained " Keywords that introduce a user-defined name. The name is consumed by " propaneName via nextgroup so a name matching a keyword (e.g. 'token start') " is not highlighted as a keyword. These must be a match (not syn keyword) @@ -39,6 +45,7 @@ hi def link propaneKeyword Keyword hi def link propaneNameDecl Keyword hi def link propaneRegex String hi def link propaneOperator Operator +hi def link propaneRuleOperator Operator hi def link propaneFieldOperator Operator hi def link propaneDelimiter Delimiter hi def link propaneFieldAlias Identifier