diff options
Diffstat (limited to 'runtime/syntax')
-rw-r--r-- | runtime/syntax/cs.vim | 33 | ||||
-rw-r--r-- | runtime/syntax/prql.vim | 178 |
2 files changed, 209 insertions, 2 deletions
diff --git a/runtime/syntax/cs.vim b/runtime/syntax/cs.vim index 104470ac4b..3ae6bfca8d 100644 --- a/runtime/syntax/cs.vim +++ b/runtime/syntax/cs.vim @@ -3,7 +3,7 @@ " Maintainer: Nick Jensen <nickspoon@gmail.com> " Former Maintainers: Anduin Withers <awithers@anduin.com> " Johannes Zellner <johannes@zellner.org> -" Last Change: 2022-11-16 +" Last Change: 2025-03-14 " Filenames: *.cs " License: Vim (see :h license) " Repository: https://github.com/nickspoons/vim-cs @@ -190,6 +190,18 @@ syn match csUnicodeNumber +\\U00\x\{6}+ contained contains=csUnicodeSpecifier di syn match csUnicodeSpecifier +\\[uUx]+ contained display syn region csString matchgroup=csQuote start=+"+ end=+"\%(u8\)\=+ end=+$+ extend contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell + +for s:i in range(3, get(g:, "cs_raw_string_quote_count", 8)) + exe 'syn region csRawString' .. s:i .. ' matchgroup=csQuote start=+\z("\{' .. s:i .. '}\)+ end=+\z1+ oneline nextgroup=csRawStringError' .. s:i + exe 'syn region csRawString' .. s:i .. ' matchgroup=csQuote start=+\z("\{' .. s:i .. '}\)\s*$+ end=+^\s*\z1+ nextgroup=csRawStringError' .. s:i .. ' contains=csRawStringError' .. s:i + exe 'syn match csRawStringError' .. s:i .. ' /\%("\{' .. s:i .. '}\)\@' .. s:i .. '<="\+/ contained' + exe 'syn match csRawStringError' .. s:i .. ' /\S.\{-}\s*"\{' .. s:i .. '}"\@!/ contained' + + exe 'hi def link csRawString' .. s:i .. ' csString' + exe 'hi def link csRawStringError' .. s:i .. ' Error' +endfor +unlet s:i + syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError,csUnicodeNumber display syn match csCharacter "'\\''" contains=csSpecialChar display syn match csCharacter "'[^\\]'" display @@ -217,11 +229,26 @@ syn match csInterpolationAlignDel +,+ contained display syn match csInterpolationFormatDel +:+ contained display syn region csVerbatimString matchgroup=csQuote start=+@"+ end=+"\%(u8\)\=+ skip=+""+ extend contains=csVerbatimQuote,@Spell + +" Interpolated raw string literals +for s:i in range(1, get(g:, "cs_raw_string_interpolation_brace_count", 8)) + exe 'syn region csInterpolatedRawString' .. s:i .. ' matchgroup=csQuote start=+$\{' .. s:i .. '}\z("""\+\)+ end=+\z1+ extend contains=csInterpolation' .. s:i .. ',csInterpolationDelimiterError' .. s:i .. ',@Spell' + exe 'syn match csInterpolationDelimiterError' .. s:i .. ' "}\{' .. s:i .. '}" contained' + exe 'syn match csInterpolationDelimiterError' .. s:i .. ' "{\{' .. 2 * s:i .. ',}" contained' + exe 'syn match csInterpolationDelimiterError' .. s:i .. ' "}\{' .. 2 * s:i .. ',}" contained' + exe 'syn region csInterpolation' .. s:i .. ' matchgroup=csInterpolationDelimiter start=+\%({\{' .. s:i .. '}\)\@' .. s:i .. '<!{\{' .. s:i .. '}{\@!+ end=+}\@<!}\{' .. s:i .. '}\%(}\{' .. s:i .. '}\)\@!+' .. + \ ' keepend contained contains=@csAll,csBraced,csBracketed,csInterpolationAlign,csInterpolationFormat,csInterpolationDelimiterError' .. s:i + + exe 'hi def link csInterpolationDelimiterError' .. s:i .. ' Error' + exe 'hi def link csInterpolatedRawString' .. s:i .. ' csRawString' +endfor +unlet s:i + syn match csVerbatimQuote +""+ contained syn region csInterVerbString matchgroup=csQuote start=+$@"+ start=+@$"+ end=+"\%(u8\)\=+ skip=+""+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,csVerbatimQuote,@Spell -syn cluster csString contains=csString,csInterpolatedString,csVerbatimString,csInterVerbString +syn cluster csString contains=csString,csInterpolatedString,csVerbatimString,csInterVerbString,csRawString syn cluster csLiteral contains=csBoolean,@csNumber,csCharacter,@csString,csNull @@ -282,6 +309,8 @@ hi def link csLogicSymbols Operator hi def link csSpecialError Error hi def link csSpecialCharError Error hi def link csString String +hi def link csRawString csString +hi def link csRawStringError Error hi def link csQuote String hi def link csInterpolatedString String hi def link csVerbatimString String diff --git a/runtime/syntax/prql.vim b/runtime/syntax/prql.vim new file mode 100644 index 0000000000..2a224cdf02 --- /dev/null +++ b/runtime/syntax/prql.vim @@ -0,0 +1,178 @@ +" Vim syntax file +" Language: PRQL +" Maintainer: vanillajonathan +" Last Change: 2025-03-07 +" +" https://prql-lang.org/ +" https://github.com/PRQL/prql + +" quit when a syntax file was already loaded. +if exists("b:current_syntax") + finish +endif + +" We need nocompatible mode in order to continue lines with backslashes. +" Original setting will be restored. +let s:cpo_save = &cpo +set cpo&vim + +syn keyword prqlBoolean false true +syn keyword prqlSelf this that +syn keyword prqlStatement null +syn keyword prqlConditional case +syn keyword prqlStatement prql let type alias in +syn keyword prqlRepeat loop +syn match prqlOperator display "\%(+\|-\|/\|*\|=\|\^\|&\||\|!\|>\|<\|%\|\~\)=\?" +syn match prqlOperator display "&&\|||" +syn keyword prqlInclude module + +" Annotations +syn match prqlAnnotation "@" display contained +syn match prqlAnnotationName "@\s*{\h\%(\w\|=\)*}" display contains=prqlAnnotation + +syn match prqlFunction "\h\w*" display contained + +syn match prqlComment "#.*$" contains=prqlTodo,@Spell +syn keyword prqlTodo FIXME NOTE TODO XXX contained + +" Triple-quoted strings can contain doctests. +syn region prqlString matchgroup=prqlQuotes + \ start=+\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" + \ contains=prqlEscape,@Spell +syn region prqlString matchgroup=prqlTripleQuotes + \ start=+\z('''\|"""\)+ end="\z1" keepend + \ contains=prqlEscape,prqlSpaceError,prqlDoctest,@Spell +syn region prqlFString matchgroup=prqlQuotes + \ start=+[f]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" + \ contains=prqlEscape,@Spell +syn region prqlFString matchgroup=prqlTripleQuotes + \ start=+f\z('''\|"""\)+ end="\z1" keepend + \ contains=prqlEscape,prqlSpaceError,prqlDoctest,@Spell +syn region prqlRString matchgroup=prqlQuotes + \ start=+r\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" + \ contains=@Spell +syn region prqlRString matchgroup=prqlTripleQuotes + \ start=+r\z('''\|"""\)+ end="\z1" keepend + \ contains=prqlSpaceError,prqlDoctest,@Spell +syn region prqlSString matchgroup=prqlQuotes + \ start=+s\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" + \ contains=@Spell +syn region prqlSString matchgroup=prqlTripleQuotes + \ start=+s\z('''\|"""\)+ end="\z1" keepend + \ contains=prqlSpaceError,prqlDoctest,@Spell + +syn match prqlEscape +\\[bfnrt'"\\]+ contained +syn match prqlEscape "\\\o\{1,3}" contained +syn match prqlEscape "\\x\x\{2}" contained +syn match prqlEscape "\%(\\u\x\{1,6}\)" contained +syn match prqlEscape "\\$" + +" It is very important to understand all details before changing the +" regular expressions below or their order. +" The word boundaries are *not* the floating-point number boundaries +" because of a possible leading or trailing decimal point. +" The expressions below ensure that all valid number literals are +" highlighted, and invalid number literals are not. For example, +" +" - a decimal point in '4.' at the end of a line is highlighted, +" - a second dot in 1.0.0 is not highlighted, +" - 08 is not highlighted, +" - 08e0 or 08j are highlighted, +" +if !exists("prql_no_number_highlight") + " numbers (including complex) + syn match prqlNumber "\<0[oO]\%(_\=\o\)\+\>" + syn match prqlNumber "\<0[xX]\%(_\=\x\)\+\>" + syn match prqlNumber "\<0[bB]\%(_\=[01]\)\+\>" + syn match prqlNumber "\<\%([1-9]\%(_\=\d\)*\|0\+\%(_\=0\)*\)\>" + syn match prqlNumber "\<\d\%(_\=\d\)*[jJ]\>" + syn match prqlNumber "\<\d\%(_\=\d\)*[eE][+-]\=\d\%(_\=\d\)*[jJ]\=\>" + syn match prqlNumber + \ "\<\d\%(_\=\d\)*\.\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\%(\W\|$\)\@=" + syn match prqlNumber + \ "\%(^\|\W\)\zs\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%([eE][+-]\=\d\%(_\=\d\)*\)\=[jJ]\=\>" +endif + +" https://prql-lang.org/book/reference/stdlib/transforms/ +" +" PRQL built-in functions are in alphabetical order. +" + +" Built-in functions +syn keyword prqlBuiltin aggregate derive filter from group join select sort take window + +" Built-in types +syn keyword prqlType bool float int int8 int16 int32 int64 int128 text date time timestamp + +" avoid highlighting attributes as builtins +syn match prqlAttribute /\.\h\w*/hs=s+1 + \ contains=ALLBUT,prqlBuiltin,prqlFunction + \ transparent + +if exists("prql_space_error_highlight") + " trailing whitespace + syn match prqlSpaceError display excludenl "\s\+$" + " mixed tabs and spaces + syn match prqlSpaceError display " \+\t" + syn match prqlSpaceError display "\t\+ " +endif + +" Do not spell doctests inside strings. +" Notice that the end of a string, either ''', or """, will end the contained +" doctest too. Thus, we do *not* need to have it as an end pattern. +if !exists("prql_no_doctest_highlight") + if !exists("prql_no_doctest_code_highlight") + syn region prqlDoctest + \ start="^\s*>>>\s" end="^\s*$" + \ contained contains=ALLBUT,prqlDoctest,prqlFunction,@Spell + syn region prqlDoctestValue + \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$" + \ contained + else + syn region prqlDoctest + \ start="^\s*>>>" end="^\s*$" + \ contained contains=@NoSpell + endif +endif + +" The default highlight links. Can be overridden later. +hi def link prqlBoolean Boolean +hi def link prqlStatement Statement +hi def link prqlType Type +hi def link prqlConditional Conditional +hi def link prqlRepeat Repeat +hi def link prqlOperator Operator +hi def link prqlInclude Include +hi def link prqlAnnotation Define +hi def link prqlAnnotationName Function +hi def link prqlFunction Function +hi def link prqlComment Comment +hi def link prqlTodo Todo +hi def link prqlSelf Constant +hi def link prqlString String +hi def link prqlFString String +hi def link prqlRString String +hi def link prqlSString String +hi def link prqlQuotes String +hi def link prqlTripleQuotes prqlQuotes +hi def link prqlEscape Special +if !exists("prql_no_number_highlight") + hi def link prqlNumber Number +endif +if !exists("prql_no_builtin_highlight") + hi def link prqlBuiltin Function +endif +if exists("prql_space_error_highlight") + hi def link prqlSpaceError Error +endif +if !exists("prql_no_doctest_highlight") + hi def link prqlDoctest Special + hi def link prqlDoctestValue Define +endif + +let b:current_syntax = "prql" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim:set sw=2 sts=2 ts=8 noet: |