codekingpro/portable-devtools
114k
1" Vim syntax file2" Language: R (GNU S)3" Maintainer: This runtime file is looking for a new maintainer.4" Former Maintainers: Jakson Aquino <jalvesaq@gmail.com>5" Vaidotas Zemlys <zemlys@gmail.com>6" Tom Payne <tom@tompayne.org>7" Contributor: Johannes Ranke <jranke@uni-bremen.de>8" Former Repository: https://github.com/jalvesaq/R-Vim-runtime9" Filenames: *.R *.r *.Rhistory *.Rt10" Last Change: 2023 Dec 24 08:05AM11" 2024 Feb 19 by Vim Project (announce adoption)12"13" NOTE: The highlighting of R functions might be defined in14" runtime files created by a filetype plugin, if installed.15"16" CONFIGURATION:17" Syntax folding can be turned on by18"19" let r_syntax_folding = 120"21" ROxygen highlighting can be turned off by22"23" let r_syntax_hl_roxygen = 024"25" Some lines of code were borrowed from Zhuojun Chen.26 27if exists("b:current_syntax")28 finish29endif30 31syn iskeyword @,48-57,_,.32 33" The variables g:r_hl_roxygen and g:r_syn_minlines were renamed on April 8, 2017.34if exists("g:r_hl_roxygen")35 let g:r_syntax_hl_roxygen = g:r_hl_roxygen36endif37if exists("g:r_syn_minlines")38 let g:r_syntax_minlines = g:r_syn_minlines39endif40 41if exists("g:r_syntax_folding") && g:r_syntax_folding42 setlocal foldmethod=syntax43endif44 45let g:r_syntax_hl_roxygen = get(g:, 'r_syntax_hl_roxygen', 1)46 47syn case match48 49" Comment50syn match rCommentTodo contained "\(BUG\|FIXME\|NOTE\|TODO\):"51syn match rTodoParen contained "\(BUG\|FIXME\|NOTE\|TODO\)\s*(.\{-})\s*:" contains=rTodoKeyw,rTodoInfo transparent52syn keyword rTodoKeyw BUG FIXME NOTE TODO contained53syn match rTodoInfo "(\zs.\{-}\ze)" contained54syn match rComment contains=@Spell,rCommentTodo,rTodoParen "#.*"55 56" Roxygen57if g:r_syntax_hl_roxygen58 " A roxygen block can start at the beginning of a file (first version) and59 " after a blank line (second version). It ends when a line appears that does not60 " contain a roxygen comment. In the following comments, any line containing61 " a roxygen comment marker (one or two hash signs # followed by a single62 " quote ' and preceded only by whitespace) is called a roxygen line. A63 " roxygen line containing only a roxygen comment marker, optionally followed64 " by whitespace is called an empty roxygen line.65 66 syn match rOCommentKey "^\s*#\{1,2}'" contained67 syn region rOExamples start="^\s*#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold68 69 " R6 classes may contain roxygen lines independent of roxygen blocks70 syn region rOR6Class start=/R6Class(/ end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold71 syn match rOR6Block "#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained72 syn match rOR6Block "^\s*#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained73 74 " First we match all roxygen blocks as containing only a title. In case an75 " empty roxygen line ending the title or a tag is found, this will be76 " overridden later by the definitions of rOBlock.77 syn match rOTitleBlock "\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag78 79 " A title as part of a block is always at the beginning of the block, i.e.80 " either at the start of a file or after a completely empty line.81 syn match rOTitle "\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag82 syn match rOTitleTag contained "@title"83 84 " When a roxygen block has a title and additional content, the title85 " consists of one or more roxygen lines (as little as possible are matched),86 " followed either by an empty roxygen line87 syn region rOBlock start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold88 89 " or by a roxygen tag (we match everything starting with @ but not @@ which is used as escape sequence for a literal @).90 syn region rOBlock start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold91 92 " If a block contains an @rdname, @describeIn tag, it may have paragraph breaks, but does not have a title93 syn region rOBlockNoTitle start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @rdname" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold94 syn region rOBlockNoTitle start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @describeIn" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold95 96 " rOTag list originally generated from the lists that were available in97 " https://github.com/klutometis/roxygen/R/rd.R and98 " https://github.com/klutometis/roxygen/R/namespace.R99 " using s/^ \([A-Za-z0-9]*\) = .*/ syn match rOTag contained "@\1"/100 " Plus we need the @include tag101 102 " rd.R103 syn match rOTag contained "@aliases"104 syn match rOTag contained "@author"105 syn match rOTag contained "@backref"106 syn match rOTag contained "@concept"107 syn match rOTag contained "@describeIn"108 syn match rOTag contained "@description"109 syn match rOTag contained "@details"110 syn match rOTag contained "@docType"111 syn match rOTag contained "@encoding"112 syn match rOTag contained "@evalRd"113 syn match rOTag contained "@example"114 syn match rOTag contained "@examples"115 syn match rOTag contained "@family"116 syn match rOTag contained "@field"117 syn match rOTag contained "@format"118 syn match rOTag contained "@inherit"119 syn match rOTag contained "@inheritParams"120 syn match rOTag contained "@inheritDotParams"121 syn match rOTag contained "@inheritSection"122 syn match rOTag contained "@keywords"123 syn match rOTag contained "@method"124 syn match rOTag contained "@name"125 syn match rOTag contained "@md"126 syn match rOTag contained "@noMd"127 syn match rOTag contained "@noRd"128 syn match rOTag contained "@note"129 syn match rOTag contained "@param"130 syn match rOTag contained "@rdname"131 syn match rOTag contained "@rawRd"132 syn match rOTag contained "@references"133 syn match rOTag contained "@return"134 syn match rOTag contained "@section"135 syn match rOTag contained "@seealso"136 syn match rOTag contained "@slot"137 syn match rOTag contained "@source"138 syn match rOTag contained "@template"139 syn match rOTag contained "@templateVar"140 syn match rOTag contained "@title"141 syn match rOTag contained "@usage"142 " namespace.R143 syn match rOTag contained "@export"144 syn match rOTag contained "@exportClass"145 syn match rOTag contained "@exportMethod"146 syn match rOTag contained "@exportPattern"147 syn match rOTag contained "@import"148 syn match rOTag contained "@importClassesFrom"149 syn match rOTag contained "@importFrom"150 syn match rOTag contained "@importMethodsFrom"151 syn match rOTag contained "@rawNamespace"152 syn match rOTag contained "@S3method"153 syn match rOTag contained "@useDynLib"154 " other155 syn match rOTag contained "@eval"156 syn match rOTag contained "@include"157 syn match rOTag contained "@includeRmd"158 syn match rOTag contained "@order"159endif160 161 162if &filetype == "rhelp"163 " string enclosed in double quotes164 syn region rString contains=rSpecial,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/165 " string enclosed in single quotes166 syn region rString contains=rSpecial,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/167else168 " string enclosed in double quotes169 syn region rString contains=rSpecial,rStrError,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/170 " string enclosed in single quotes171 syn region rString contains=rSpecial,rStrError,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/172endif173 174syn match rStrError display contained "\\."175 176 177" New line, carriage return, tab, backspace, bell, feed, vertical tab, backslash178syn match rSpecial display contained "\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\"179 180" Hexadecimal and Octal digits181syn match rSpecial display contained "\\\(x\x\{1,2}\|[0-8]\{1,3}\)"182 183" Unicode characters184syn match rSpecial display contained "\\u\x\{1,4}"185syn match rSpecial display contained "\\U\x\{1,8}"186syn match rSpecial display contained "\\u{\x\{1,4}}"187syn match rSpecial display contained "\\U{\x\{1,8}}"188 189" Raw string190syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)(/ end=/)\z2\z1/ keepend191syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\){/ end=/}\z2\z1/ keepend192syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)\[/ end=/\]\z2\z1/ keepend193 194" Statement195syn keyword rStatement break next return196syn keyword rConditional if else197syn keyword rRepeat for in repeat while198 199" Constant (not really)200syn keyword rConstant T F LETTERS letters month.abb month.name pi201syn keyword rConstant R.version.string202 203syn keyword rNumber NA_integer_ NA_real_ NA_complex_ NA_character_204 205" Constants206syn keyword rConstant NULL207syn keyword rBoolean FALSE TRUE208syn keyword rNumber NA Inf NaN209 210" integer211syn match rInteger "\<\d\+L"212syn match rInteger "\<0x\([0-9]\|[a-f]\|[A-F]\)\+L"213syn match rInteger "\<\d\+[Ee]+\=\d\+L"214 215" number with no fractional part or exponent216syn match rNumber "\<\d\+\>"217" hexadecimal number218syn match rNumber "\<0x\([0-9]\|[a-f]\|[A-F]\)\+"219 220" floating point number with integer and fractional parts and optional exponent221syn match rFloat "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\="222" floating point number with no integer part and optional exponent223syn match rFloat "\<\.\d\+\([Ee][-+]\=\d\+\)\="224" floating point number with no fractional part and optional exponent225syn match rFloat "\<\d\+[Ee][-+]\=\d\+"226 227" complex number228syn match rComplex "\<\d\+i"229syn match rComplex "\<\d\++\d\+i"230syn match rComplex "\<0x\([0-9]\|[a-f]\|[A-F]\)\+i"231syn match rComplex "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=i"232syn match rComplex "\<\.\d\+\([Ee][-+]\=\d\+\)\=i"233syn match rComplex "\<\d\+[Ee][-+]\=\d\+i"234 235syn match rAssign '='236syn match rOperator "&"237syn match rOperator '-'238syn match rOperator '\*'239syn match rOperator '+'240if &filetype == "quarto" || &filetype == "rmd" || &filetype == "rrst"241 syn match rOperator "[|!<>^~`/:]"242else243 syn match rOperator "[|!<>^~/:]"244endif245syn match rOperator "%\{2}\|%\S\{-}%"246syn match rOperator '\([!><]\)\@<=='247syn match rOperator '=='248syn match rOperator '|>'249syn match rOpError '\*\{3}'250syn match rOpError '//'251syn match rOpError '&&&'252syn match rOpError '|||'253syn match rOpError '<<'254syn match rOpError '>>'255 256syn match rAssign "<\{1,2}-"257syn match rAssign "->\{1,2}"258 259" Special260syn match rDelimiter "[,;:]"261 262" Error263if exists("g:r_syntax_folding")264 syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold265 syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError fold266 syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError fold267 syn region rSection matchgroup=Title start=/^#.*[-=#]\{4,}/ end=/^#.*[-=#]\{4,}/ms=s-2,me=s-1 transparent contains=ALL fold268else269 syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError270 syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError271 syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError272endif273 274syn match rError "[)\]}]"275syn match rBraceError "[)}]" contained276syn match rCurlyError "[)\]]" contained277syn match rParenError "[\]}]" contained278 279" Use Nvim-R to highlight functions dynamically if it is installed280if !exists("g:r_syntax_fun_pattern")281 let s:ff = split(substitute(globpath(&rtp, "R/functions.vim"), "functions.vim", "", "g"), "\n")282 if len(s:ff) > 0283 let g:r_syntax_fun_pattern = 0284 else285 let g:r_syntax_fun_pattern = 1286 endif287endif288 289" Only use Nvim-R to highlight functions if they should not be highlighted290" according to a generic pattern291if g:r_syntax_fun_pattern == 1292 syn match rFunction '[0-9a-zA-Z_\.]\+\s*\ze('293else294 " Nvim-R:295 runtime R/functions.vim296endif297 298syn match rDollar display contained "\$"299syn match rDollar display contained "@"300 301" List elements will not be highlighted as functions:302syn match rLstElmt "\$[a-zA-Z0-9\\._]*" contains=rDollar303syn match rLstElmt "@[a-zA-Z0-9\\._]*" contains=rDollar304 305" Functions that may add new objects306syn keyword rPreProc library require attach detach source307 308if &filetype == "rhelp"309 syn match rHelpIdent '\\method'310 syn match rHelpIdent '\\S4method'311endif312 313" Type314syn match rType "\\"315syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame316 317" Name of object with spaces318if &filetype == "rmd" || &filetype == "rrst" || &filetype == "quarto"319 syn region rNameWSpace start="`" end="`" contains=rSpaceFun containedin=rmdrChunk320else321 syn region rNameWSpace start="`" end="`" contains=rSpaceFun322endif323 324if &filetype == "rhelp"325 syn match rhPreProc "^#ifdef.*"326 syn match rhPreProc "^#endif.*"327 syn match rhSection "\\dontrun\>"328endif329 330if exists("r_syntax_minlines")331 exe "syn sync minlines=" . r_syntax_minlines332else333 syn sync minlines=40334endif335 336" Define the default highlighting.337hi def link rAssign Statement338hi def link rBoolean Boolean339hi def link rBraceError Error340hi def link rComment Comment341hi def link rTodoParen Comment342hi def link rTodoInfo SpecialComment343hi def link rCommentTodo Todo344hi def link rTodoKeyw Todo345hi def link rComplex Number346hi def link rConditional Conditional347hi def link rConstant Constant348hi def link rCurlyError Error349hi def link rDelimiter Delimiter350hi def link rDollar SpecialChar351hi def link rError Error352hi def link rFloat Float353hi def link rFunction Function354hi def link rSpaceFun Function355hi def link rHelpIdent Identifier356hi def link rhPreProc PreProc357hi def link rhSection PreCondit358hi def link rInteger Number359hi def link rLstElmt Normal360hi def link rNameWSpace Normal361hi def link rNumber Number362hi def link rOperator Operator363hi def link rOpError Error364hi def link rParenError Error365hi def link rPreProc PreProc366hi def link rRawString String367hi def link rRawStrDelim Delimiter368hi def link rRepeat Repeat369hi def link rSpecial SpecialChar370hi def link rStatement Statement371hi def link rString String372hi def link rStrError Error373hi def link rType Type374if g:r_syntax_hl_roxygen375 hi def link rOTitleTag Operator376 hi def link rOTag Operator377 hi def link rOTitleBlock Title378 hi def link rOBlock Comment379 hi def link rOBlockNoTitle Comment380 hi def link rOR6Block Comment381 hi def link rOTitle Title382 hi def link rOCommentKey Comment383 hi def link rOExamples SpecialComment384endif385 386let b:current_syntax="r"387 388" vim: ts=8 sw=2389 