mirror of
				https://github.com/vim/vim.git
				synced 2025-10-31 09:57:14 -04:00 
			
		
		
		
	
		
			
	
	
		
			179 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			179 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " 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: |