Skip to content

Commit 3bc7878

Browse files
committed
Syntax: more efficient identifier+symbol regions
Use a single regex for syntax elements which consist of an identifier followed by some token: function calls, parametric types, type expressions Hopefully helps with #253
1 parent c975ac5 commit 3bc7878

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

syntax/julia.vim

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,13 @@ syntax cluster juliaConstItems contains=juliaConstNum,juliaConstBool,juliaCons
8383
syntax cluster juliaMacroItems contains=juliaPossibleMacro,juliaDollarVar,juliaDollarPar,juliaDollarSqBra
8484
syntax cluster juliaSymbolItems contains=juliaPossibleSymbol
8585
syntax 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
8787
syntax cluster juliaPrintfItems contains=juliaPrintfParBlock,juliaPrintfString
8888
syntax cluster juliaOperatorItems contains=juliaOperator,juliaRangeOperator,juliaCTransOperator,juliaTernaryRegion,juliaColon,juliaSemicolon,juliaComma
8989
syntax cluster juliaCommentItems contains=juliaCommentL,juliaCommentM
9090
syntax 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

9494
syntax cluster juliaSpellcheckStrings contains=@spell
9595
syntax cluster juliaSpellcheckDocStrings contains=@spell
@@ -128,7 +128,14 @@ syntax region juliaCurBraBlock matchgroup=juliaParDelim start="{" end="}" cont
128128

129129
exec '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
134141
exec '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\)\>"
208215
syntax match juliaConstC display "\<\%(C_NULL\)\>"
209216
syntax match juliaConstGeneric display "\<\%(nothing\|Main\|undef\|missing\)\>"
210217

211-
exec 'syntax match juliaParamType "' . s:idregex . '\ze{"'
218+
syntax match juliaParamType contained "[^{([:space:]\"]\+\ze{" nextgroup=juliaCurBraBlock
212219

213220
syntax 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
281288
syntax region juliaString matchgroup=juliaStringDelim start=+\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ 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=+\z1+ contains=@juliaSpecialCharsRaw
283290
syntax region juliabString matchgroup=juliaStringDelim start=+\<b\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars
284291
syntax region juliasString matchgroup=juliaStringDelim start=+\<s\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars
285-
syntax region juliavString matchgroup=juliaStringDelim start=+\<v\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialCharsRaw
286-
syntax region juliaipString matchgroup=juliaStringDelim start=+\<ip\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialCharsRaw
287-
syntax region juliabigString matchgroup=juliaStringDelim start=+\<big\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialCharsRaw
288-
syntax region juliaMIMEString matchgroup=juliaStringDelim start=+\<MIME\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars
289-
syntax region juliarawString matchgroup=juliaStringDelim start=+\<raw\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialCharsRaw
290-
syntax region juliatextString matchgroup=juliaStringDelim start=+\<text\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialCharsRaw
291-
syntax region juliahtmlString matchgroup=juliaStringDelim start=+\<html\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialCharsRaw
292-
syntax region juliaint128String matchgroup=juliaStringDelim start=+\<u\?int128\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialCharsRaw
293292

294293
syntax 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
353352
exec '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'
358358
syntax 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'
360360
syntax 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

363363
syntax 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

366366
syntax region juliaCommentL matchgroup=juliaCommentDelim excludenl start="#\ze\%([^=]\|$\)" end="$" contains=juliaTodo,@juliaSpellcheckComments
367367
syntax region juliaCommentM matchgroup=juliaCommentDelim fold start="#=\ze\%([^#]\|$\)" end="=#" contains=juliaTodo,juliaCommentM,@juliaSpellcheckComments

0 commit comments

Comments
 (0)