From 4d18a5e5dd427a2962fe34c6a12007cac67ce89c Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Tue, 23 Apr 2019 11:32:40 +0200 Subject: Update --- syntax/ruby.vim | 204 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 117 insertions(+), 87 deletions(-) (limited to 'syntax/ruby.vim') diff --git a/syntax/ruby.vim b/syntax/ruby.vim index b131782c..d0cc0366 100644 --- a/syntax/ruby.vim +++ b/syntax/ruby.vim @@ -69,7 +69,7 @@ endfunction com! -nargs=* SynFold call s:run_syntax_fold() " Not-Top Cluster {{{1 -syn cluster rubyNotTop contains=@rubyCommentNotTop,@rubyStringNotTop,@rubyRegexpSpecial,@rubyDeclaration,@rubyExceptionHandler,rubyConditional,rubyModuleName,rubyClassName,rubySymbolDelimiter +syn cluster rubyNotTop contains=@rubyCommentNotTop,@rubyStringNotTop,@rubyRegexpSpecial,@rubyDeclaration,@rubyExceptionHandler,@rubyClassOperator,rubyConditional,rubyModuleName,rubyClassName,rubySymbolDelimiter,rubyParentheses " Whitespace Errors {{{1 if exists("ruby_space_errors") @@ -82,20 +82,39 @@ if exists("ruby_space_errors") endif " Operators {{{1 -if exists("ruby_operators") - syn match rubyDotOperator "\.\|&\." - syn match rubyTernaryOperator "\%(\w\|[^\x00-\x7F]\)\@1\@!" - syn match rubyComparisonOperator "<=>\|<=\|\%(<\|\=\|[-=]\@1" - syn match rubyBitwiseOperator "[~^|]\|&\.\@!\|\%(class\s*\)\@>" - syn match rubyBooleanOperator "\%(\w\|[^\x00-\x7F]\)\@1\@!\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|||=\||=\|%=\|+=\|>>=\|<<=\|\^=" - syn match rubyEqualityOperator "===\|==\|!=\|!\~\|=\~" - syn match rubyScopeOperator "::" - syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<=\[" end="]" contains=ALLBUT,@rubyNotTop - - syn cluster rubyOperator contains=ruby.*Operator + +syn match rubyEnglishBooleanOperator "\<\%(and\|or\|not\)\>" + +if exists("ruby_operators") || exists("ruby_pseudo_operators") + syn match rubyDotOperator "\.\|&\." + + syn match rubyTernaryOperator "\%(\w\|[^\x00-\x7F]\)\@1\@!" + syn match rubyComparisonOperator "<=>\|<=\|<\|>=\|[-=]\@1" + syn match rubyBitwiseOperator "[~^|]\|&\.\@!\|<<\|>>" + syn match rubyBooleanOperator "\%(\w\|[^\x00-\x7F]\)\@1\@!\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|||=\||=\|%=\|+=\|>>=\|<<=\|\^=" + syn match rubyAssignmentOperator "=>\@!" containedin=rubyBlockParameterList " TODO: this is inelegant + syn match rubyEqualityOperator "===\|==\|!=\|!\~\|=\~" + + syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<=\[" end="]" contains=ALLBUT,@rubyNotTop + + syn match rubyScopeOperator "::" + syn match rubySuperClassOperator "<" contained + syn match rubyEigenClassOperator "<<" contained + syn match rubyLambdaOperator "->" + syn match rubySplatOperator "\%([[{(|,=]\_s*\)\@<=\*" + syn match rubySplatOperator "\%(^\|\s\)\@1<=\*\%(\h\|[^\x00-\x7F]\|[:$@[]\)\@=" + syn match rubyDoubleSplatOperator "\%([{(|,]\_s*\)\@<=\*\*" + syn match rubyDoubleSplatOperator "\s\@1<=\*\*\%(\h\|[^\x00-\x7F]\|[:$@{]\)\@=" + syn match rubyProcOperator "\%([[(|,]\_s*\)\@<=&" + syn match rubyProcOperator "\s\@1<=&\%(\h\|[^\x00-\x7F]\|[:$@]\|->\)\@=" + + syn cluster rubyProperOperator contains=rubyTernaryOperator,rubyArithmeticOperator,rubyComparisonOperator,rubyBitwiseOperator,rubyBooleanOperator,rubyRangeOperator,rubyAssignmentOperator,rubyEqualityOperator,rubyDefinedOperator,rubyEnglishBooleanOperator + syn cluster rubyClassOperator contains=rubyEigenClassOperator,rubySuperClassOperator + syn cluster rubyPseudoOperator contains=rubyDotOperator,rubyScopeOperator,rubyEigenClassOperator,rubySuperClassOperator,rubyLambdaOperator,rubySplatOperator,rubyDoubleSplatOperator,rubyProcOperator + syn cluster rubyOperator contains=ruby.*Operator endif " String Interpolation and Backslash Notation {{{1 @@ -113,8 +132,8 @@ syn match rubyBackslashEscape "\\\\" contained display syn match rubyQuoteEscape "\\'" contained display syn match rubySpaceEscape "\\ " contained display -syn match rubyParenthesisEscape "\\[()]" contained display -syn match rubyCurlyBraceEscape "\\[{}]" contained display +syn match rubyParenthesisEscape "\\[()]" contained display +syn match rubyCurlyBraceEscape "\\[{}]" contained display syn match rubyAngleBracketEscape "\\[<>]" contained display syn match rubySquareBracketEscape "\\[[\]]" contained display @@ -160,9 +179,6 @@ syn match rubyFloat "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@" display " Identifiers {{{1 -syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!]\=" contains=NONE display transparent -syn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent - syn match rubyClassName "\%(\%(^\|[^.]\)\.\s*\)\@\%(\s*(\)\@!" contained syn match rubyModuleName "\%(\%(^\|[^.]\)\.\s*\)\@\%(\s*(\)\@!" contained syn match rubyConstant "\%(\%(^\|[^.]\)\.\s*\)\@\%(\s*(\)\@!" @@ -180,8 +196,8 @@ SynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"': syn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@\%(\s*(\)\@=" -syn match rubyBlockParameter "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained -syn region rubyBlockParameterList start="\%(\%(\\|{\)\_s*\)\@32<=|" end="|" oneline display contains=rubyBlockParameter +syn region rubyParentheses start="(" end=")" contains=ALLBUT,@rubyNotTop containedin=rubyBlockParameterList +syn region rubyBlockParameterList start="\%(\%(\\|{\)\_s*\)\@32<=|" end="|" contains=ALLBUT,@rubyNotTop,@rubyProperOperator if exists('ruby_global_variable_error') syn match rubyGlobalVariableError "$[^A-Za-z_]" display @@ -283,9 +299,9 @@ SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="% SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses " Generalized Double Quoted Strings, Array of Strings, Array of Symbols and Shell Command Output {{{1 -" Note: %= is not matched here as the beginning of a double quoted string +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\%(\%(\w\|[^\x00-\x7F]\|]\)\s*\)\@" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets @@ -300,6 +316,7 @@ SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="% " Here Documents {{{1 syn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration -syn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName,rubyBlockParameter +syn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName " Keywords {{{1 -" Note: the following keywords have already been defined: -" begin case class def do end for if module unless until while -syn match rubyControl "\<\%(and\|break\|in\|next\|not\|or\|redo\|retry\|return\)\>" -syn match rubyKeyword "\<\%(super\|yield\)\>" -syn match rubyBoolean "\<\%(true\|false\)\>[?!]\@!" -syn match rubyPseudoVariable "\<\(self\|nil\)\>[?!]\@!" -syn match rubyPseudoVariable "\<__\%(ENCODING\|dir\|FILE\|LINE\|callee\|method\)__\>" -syn match rubyBeginEnd "\<\%(BEGIN\|END\)\>" +" TODO: reorganise +syn match rubyControl "\%#=1\<\%(break\|in\|next\|redo\|retry\|return\)\>" +syn match rubyKeyword "\%#=1\<\%(super\|yield\)\>" +syn match rubyBoolean "\%#=1\<\%(true\|false\)\>[?!]\@!" +syn match rubyPseudoVariable "\%#=1\<\(self\|nil\)\>[?!]\@!" +syn match rubyPseudoVariable "\%#=1\<__\%(ENCODING\|dir\|FILE\|LINE\|callee\|method\)__\>" +syn match rubyBeginEnd "\%#=1\<\%(BEGIN\|END\)\>" " Expensive Mode {{{1 " Match 'end' with the appropriate opening keyword for syntax based folding " and special highlighting of module/class/method definitions if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive") - syn match rubyDefine "\" nextgroup=rubyAliasDeclaration skipwhite skipnl - syn match rubyDefine "\" nextgroup=rubyMethodDeclaration skipwhite skipnl - syn match rubyDefine "\" nextgroup=rubyMethodName skipwhite skipnl - syn match rubyClass "\" nextgroup=rubyClassDeclaration skipwhite skipnl - syn match rubyModule "\" nextgroup=rubyModuleDeclaration skipwhite skipnl + syn match rubyDefine "\" nextgroup=rubyAliasDeclaration skipwhite skipnl + syn match rubyDefine "\" nextgroup=rubyMethodDeclaration skipwhite skipnl + syn match rubyDefine "\" nextgroup=rubyMethodName skipwhite skipnl + syn match rubyClass "\" nextgroup=rubyClassDeclaration,rubyEigenClassOperator skipwhite skipnl + syn match rubyModule "\" nextgroup=rubyModuleDeclaration skipwhite skipnl - SynFold 'def' syn region rubyMethodBlock start="\" matchgroup=rubyDefine end="\%(\" contains=ALLBUT,@rubyNotTop - SynFold 'class' syn region rubyClassBlock start="\" matchgroup=rubyClass end="\" contains=ALLBUT,@rubyNotTop - SynFold 'module' syn region rubyModuleBlock start="\" matchgroup=rubyModule end="\" contains=ALLBUT,@rubyNotTop + SynFold 'def' syn region rubyMethodBlock start="\" matchgroup=rubyDefine skip="\" end="\" contains=ALLBUT,@rubyNotTop + SynFold 'class' syn region rubyClassBlock start="\" matchgroup=rubyClass skip="\" contained containedin=rubyCaseExpression syn match rubyConditional "\<\%(then\|else\|elsif\)\>" contained containedin=rubyConditionalExpression syn match rubyExceptionHandler "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyBlockExpression,rubyDoBlock - syn match rubyExceptionHandler1 "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyModuleBlock,rubyClassBlock,rubyMethodBlock - syn cluster rubyExceptionHandler contains=rubyExceptionHandler,rubyExceptionHandler1 + syn match rubyExceptionHandler2 "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyModuleBlock,rubyClassBlock,rubyMethodBlock + syn cluster rubyExceptionHandler contains=rubyExceptionHandler,rubyExceptionHandler2 " statements with optional 'do' syn region rubyOptionalDoLine matchgroup=rubyRepeat start="\" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@" matchgroup=rubyOptionalDo end="\" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop - SynFold 'for' syn region rubyRepeatExpression start="\" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@" matchgroup=rubyRepeat end="\" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine + SynFold 'for' syn region rubyRepeatExpression start="\" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@" matchgroup=rubyRepeat skip="\" - syn match rubyAccess "\<\%(public_class_method\|private_class_method\)\>" - syn match rubyAccess "\<\%(public_constant\|private_constant\)\>" - syn match rubyAccess "\" - syn match rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!" " attr is a common variable name - syn match rubyAttribute "\<\%(attr_accessor\|attr_reader\|attr_writer\)\>" - syn match rubyControl "\<\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>" - syn match rubyEval "\<\%(eval\|class_eval\|instance_eval\|module_eval\)\>" - syn match rubyException "\<\%(raise\|fail\|catch\|throw\)\>" - syn match rubyInclude "\<\%(autoload\|gem\|load\|require\|require_relative\)\>" - syn match rubyKeyword "\<\%(callcc\|caller\|lambda\|proc\)\>" - syn match rubyMacro "\<\%(extend\|include\|prepend\|refine\|using\)\>" - syn match rubyMacro "\<\%(alias_method\|define_method\|define_singleton_method\|remove_method\|undef_method\)\>" + syn match rubyAccess "\<\%(public\|protected\|private\)\>" " use re=2 + syn match rubyAccess "\%#=1\<\%(public\|private\)_class_method\>" + syn match rubyAccess "\%#=1\<\%(public\|private\)_constant\>" + syn match rubyAccess "\%#=1\" + syn match rubyAttribute "\%#=1\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!" " attr is a common variable name + syn match rubyAttribute "\%#=1\" + syn match rubyControl "\%#=1\<\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>" + syn match rubyEval "\%#=1\" + syn match rubyEval "\%#=1\<\%(class\|instance\|module\)_eval\>" + syn match rubyException "\%#=1\<\%(raise\|fail\|catch\|throw\)\>" + syn match rubyInclude "\%#=1\<\%(autoload\|gem\|load\|require\%(_relative\)\=\)\>" + syn match rubyKeyword "\%#=1\<\%(callcc\|caller\|lambda\|proc\)\>" + syn match rubyMacro "\%#=1\<\%(extend\|include\|prepend\|refine\|using\)\>" + syn match rubyMacro "\%#=1\<\%(alias\|define\|define_singleton\|remove\|undef\)_method\>" endif " Comments and Documentation {{{1 @@ -436,21 +453,20 @@ syn match rubyUselessLineContinuation "\%([.:,;{([<>~\*%&^|+=-]\|%(\%(\w\|[^\x00 syn match rubyUselessLineContinuation "\\$" nextgroup=rubyUselessLineContinuation skipwhite skipempty contained " Keyword Nobbling {{{1 -" prevent methods with keyword names (and possible ?! suffixes) being highlighted as keywords when called +" prevent methods with keyword names being highlighted as keywords when called syn match rubyKeywordAsMethod "\%(\%(\.\@1\)" transparent contains=rubyDotOperator,rubyScopeOperator -syn match rubyKeywordAsMethod "\<[_[:lower:]][_[:alnum:]]*[?!]" transparent contains=NONE -" Bang/Predicate Special Methods and Operators {{{1 +" Bang and Predicate Methods and Operators {{{1 +syn match rubyBangPredicateMethod "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]" + if !exists("ruby_no_special_methods") - syn match rubyControl "\