@@ -83,13 +83,13 @@ syntax cluster juliaConstItems contains=juliaConstNum,juliaConstBool,juliaCons
8383syntax cluster juliaMacroItems contains =juliaPossibleMacro,juliaDollarVar,juliaDollarPar,juliaDollarSqBra
8484syntax cluster juliaSymbolItems contains =juliaPossibleSymbol
8585syntax cluster juliaNumberItems contains =juliaNumbers
86- syntax cluster juliaStringItems contains =juliaChar,juliaString,juliaStringPrefixed, juliabString,juliasString,juliavString,juliaipString,juliabigString,juliaMIMEString,juliarawString,juliatextString,juliahtmlString,juliaint128String ,juliaShellString,juliaDocString,juliaRegEx
86+ syntax cluster juliaStringItems contains =juliaChar,juliaString,juliabString,juliasString,juliaShellString,juliaDocString,juliaRegEx
8787syntax cluster juliaPrintfItems contains =juliaPrintfParBlock,juliaPrintfString
8888syntax cluster juliaOperatorItems contains =juliaOperator,juliaRangeOperator,juliaCTransOperator,juliaTernaryRegion,juliaColon,juliaSemicolon,juliaComma
8989syntax cluster juliaCommentItems contains =juliaCommentL,juliaCommentM
9090syntax cluster juliaErrorItems contains =juliaErrorPar,juliaErrorEnd,juliaErrorElse,juliaErrorCatch,juliaErrorFinally
9191
92- syntax cluster juliaSyntaxRegions contains =juliaParamType,juliaFunctionCall,juliaTypeOperatorR ,juliaWhereR
92+ syntax cluster juliaSyntaxRegions contains =juliaIdSymbol,juliaTypeOperatorR2,juliaTypeOperatorR3 ,juliaWhereR
9393
9494syntax cluster juliaSpellcheckStrings contains =@spell
9595syntax cluster juliaSpellcheckDocStrings contains =@spell
@@ -128,7 +128,14 @@ syntax region juliaCurBraBlock matchgroup=juliaParDelim start="{" end="}" cont
128128
129129exec ' syntax match juliaType contained "\%(' . s: idregex . ' \.\)*\zs' . s: idregex . ' "'
130130
131- exec ' syntax match juliaFunctionCall "' . s: idregex . ' \.\?(\@=" nextgroup=juliaParBlock'
131+ " This is a generic identifier followed by some symbol, either a type
132+ " operator (<: or >:), or an open parenthesis, or an open curly bracket.
133+ " It's used to recognize one of the contained regions looking for identifiers
134+ " only once. Once recognized, those regions no longer need to use the
135+ " expensive s:idregex.
136+ exec ' syntax match juliaIdSymbol transparent "' . s: idregex . ' \%(\s*[<>]:\|\.\?(\|{\|\"\%(\"\"\)\?\)\@=" contains=juliaFunctionCall,juliaParamType,juliaStringPrefixed,juliaTypeOperatorR1'
137+
138+ syntax match juliaFunctionCall contained " [^{([:space:]\" ]\+ (\@ =" nextgroup =juliaParBlock
132139
133140" note: we would in principle add a "s:nodot" before function/macro/struct/... but it shouldn't come up in valid code
134141exec ' syntax match juliaFunctionDef contained transparent "\%(\<\%(function\|macro\)\)\@' .s: d (8 ).' <=\s\+\zs' . s: idregex . ' \%(\.' . s: idregex . ' \)*\ze\s*\%((\|\send\>\|$\)" contains=juliaFunctionName'
@@ -208,7 +215,7 @@ syntax match juliaConstIO display "\<\%(std\%(out\|in\|err\)\|devnull\)\>"
208215syntax match juliaConstC display " \<\% (C_NULL\)\> "
209216syntax match juliaConstGeneric display " \<\% (nothing\| Main\| undef\| missing\)\> "
210217
211- exec ' syntax match juliaParamType " ' . s: idregex . ' \ ze{"'
218+ syntax match juliaParamType contained " [^{([:space:] \" ] \+\ z e{" nextgroup = juliaCurBraBlock
212219
213220syntax match juliaPossibleMacro transparent " @" contains =juliaMacroCall,juliaMacroCallP,juliaPrintfMacro,juliaDocMacro
214221
@@ -279,17 +286,9 @@ exec 'syntax match juliaCTransOperator "[[:space:]}' . s:nonid_chars . s:uniop
279286" TODO: some of these might be specialized; the rest could be just left to the
280287" generic juliaStringPrefixed fallback
281288syntax region juliaString matchgroup =juliaStringDelim start =+ \z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckStrings
282- exec ' syntax region juliaStringPrefixed matchgroup=juliaStringDelim start=+\< ' . s: idregex . ' \ z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialCharsRaw'
289+ syntax region juliaStringPrefixed contained matchgroup =juliaStringDelim start =+ [^{([:space:]"] \+\ z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaSpecialCharsRaw
283290syntax region juliabString matchgroup =juliaStringDelim start =+ \< b\z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaSpecialChars
284291syntax region juliasString matchgroup =juliaStringDelim start =+ \< s\z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaSpecialChars
285- syntax region juliavString matchgroup =juliaStringDelim start =+ \< v\z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaSpecialCharsRaw
286- syntax region juliaipString matchgroup =juliaStringDelim start =+ \< ip\z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaSpecialCharsRaw
287- syntax region juliabigString matchgroup =juliaStringDelim start =+ \< big\z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaSpecialCharsRaw
288- syntax region juliaMIMEString matchgroup =juliaStringDelim start =+ \< MIME\z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaSpecialChars
289- syntax region juliarawString matchgroup =juliaStringDelim start =+ \< raw\z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaSpecialCharsRaw
290- syntax region juliatextString matchgroup =juliaStringDelim start =+ \< text\z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaSpecialCharsRaw
291- syntax region juliahtmlString matchgroup =juliaStringDelim start =+ \< html\z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaSpecialCharsRaw
292- syntax region juliaint128String matchgroup =juliaStringDelim start =+ \< u\? int128\z ("\( ""\)\?\) + skip =+ \% (\\\\\) *\\ "+ end =+ \z 1+ contains =@juliaSpecialCharsRaw
293292
294293syntax region juliaDocString matchgroup =juliaDocStringDelim fold start =+ ^"""+ skip =+ \% (\\\\\) *\\ "+ end =+ """+ contains =@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckDocStrings
295294
@@ -353,15 +352,16 @@ exec 'syntax match juliaQuotedQMarkPar "' . s:quoting_colon . '(\s*?\s*)" con
353352exec ' syntax region juliaQuotedParBlockS matchgroup=juliaQParDelim contained start="' . s: quoting_colonS . ' (" end=")" contains=@juliaExpressions'
354353
355354
355+ syntax match juliaTypeOperatorR1 contained transparent " [^{([:space:]\" ]\+\% (\s *[<>]:\)\@ =" contains =juliaType,@juliaExpressions
356+
356357" force precedence over Symbols
357- exec ' syntax match juliaTypeOperatorR transparent "' . s: idregex . ' \%(\s*[<>]:\)\@=" contains=juliaType,@juliaExpressions'
358358syntax match juliaTypeOperator contained " [<>:]:"
359- exec ' syntax match juliaTypeOperatorR transparent "[<>:]:\s*\%(' . s: idregex . ' \.\)*' . s: idregex . ' " contains=juliaTypeOperator,juliaType,@juliaExpressions nextgroup=juliaTypeOperator'
359+ exec ' syntax match juliaTypeOperatorR2 transparent "[<>:]:\s*\%(' . s: idregex . ' \.\)*' . s: idregex . ' " contains=juliaTypeOperator,juliaType,@juliaExpressions nextgroup=juliaTypeOperator'
360360syntax match juliaIsaKeyword contained " \< isa\> "
361- exec ' syntax match juliaTypeOperatorR transparent "\<isa\s\+\%(' . s: idregex . ' \.\)*' . s: idregex . ' " contains=juliaIsaKeyword,juliaType,@juliaExpressions nextgroup=juliaIsaKeyword'
361+ exec ' syntax match juliaTypeOperatorR3 transparent "\<isa\s\+\%(' . s: idregex . ' \.\)*' . s: idregex . ' " contains=juliaIsaKeyword,juliaType,@juliaExpressions nextgroup=juliaIsaKeyword'
362362
363363syntax match juliaWhereKeyword " \< where\> "
364- exec ' syntax match juliaWhereR transparent "\<where\s\+' . s: idregex . ' " contains=juliaWhereKeyword,juliaType,juliaTypeOperatorR '
364+ exec ' syntax match juliaWhereR transparent "\<where\s\+' . s: idregex . ' " contains=juliaWhereKeyword,juliaType,juliaIdSymbol '
365365
366366syntax region juliaCommentL matchgroup =juliaCommentDelim excludenl start =" #\z e\% ([^=]\| $\) " end =" $" contains =juliaTodo,@juliaSpellcheckComments
367367syntax region juliaCommentM matchgroup =juliaCommentDelim fold start =" #=\z e\% ([^#]\| $\) " end =" =#" contains =juliaTodo,juliaCommentM,@juliaSpellcheckComments
0 commit comments