aboutsummaryrefslogtreecommitdiff
path: root/runtime/syntax
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax')
-rw-r--r--runtime/syntax/cs.vim33
-rw-r--r--runtime/syntax/prql.vim178
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: