xref: /vim-8.2.3635/runtime/syntax/r.vim (revision 11e3c5ba)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	      R (GNU S)
3483c5d80SBram Moolenaar" Maintainer:	      Jakson Aquino <[email protected]>
4483c5d80SBram Moolenaar" Former Maintainers: Vaidotas Zemlys <[email protected]>
5483c5d80SBram Moolenaar" 		      Tom Payne <[email protected]>
62c5e8e80SBram Moolenaar" Contributor:        Johannes Ranke <[email protected]>
72c5e8e80SBram Moolenaar" Homepage:           https://github.com/jalvesaq/R-Vim-runtime
8*11e3c5baSBram Moolenaar" Last Change:	      Sun Mar 28, 2021  01:47PM
9483c5d80SBram Moolenaar" Filenames:	      *.R *.r *.Rhistory *.Rt
10483c5d80SBram Moolenaar"
11cd5c8f82SBram Moolenaar" NOTE: The highlighting of R functions might be defined in
128feef4ffSBram Moolenaar" runtime files created by a filetype plugin, if installed.
13483c5d80SBram Moolenaar"
14662db673SBram Moolenaar" CONFIGURATION:
1577cdfd10SBram Moolenaar"   Syntax folding can be turned on by
16662db673SBram Moolenaar"
17662db673SBram Moolenaar"      let r_syntax_folding = 1
18662db673SBram Moolenaar"
1977cdfd10SBram Moolenaar"   ROxygen highlighting can be turned off by
2077cdfd10SBram Moolenaar"
21cd5c8f82SBram Moolenaar"      let r_syntax_hl_roxygen = 0
2277cdfd10SBram Moolenaar"
23483c5d80SBram Moolenaar" Some lines of code were borrowed from Zhuojun Chen.
244770d09aSBram Moolenaar
25483c5d80SBram Moolenaarif exists("b:current_syntax")
26071d4279SBram Moolenaar  finish
27071d4279SBram Moolenaarendif
28071d4279SBram Moolenaar
29cd5c8f82SBram Moolenaarif has("patch-7.4.1142")
30e4a3bcf2SBram Moolenaar  syn iskeyword @,48-57,_,.
31cd5c8f82SBram Moolenaarelse
32cd5c8f82SBram Moolenaar  setlocal iskeyword=@,48-57,_,.
33cd5c8f82SBram Moolenaarendif
34cd5c8f82SBram Moolenaar
35cd5c8f82SBram Moolenaar" The variables g:r_hl_roxygen and g:r_syn_minlines were renamed on April 8, 2017.
36cd5c8f82SBram Moolenaarif exists("g:r_hl_roxygen")
37cd5c8f82SBram Moolenaar  let g:r_syntax_hl_roxygen = g:r_hl_roxygen
38cd5c8f82SBram Moolenaarendif
39cd5c8f82SBram Moolenaarif exists("g:r_syn_minlines")
40cd5c8f82SBram Moolenaar  let g:r_syntax_minlines = g:r_syn_minlines
41cd5c8f82SBram Moolenaarendif
42071d4279SBram Moolenaar
4377cdfd10SBram Moolenaarif exists("g:r_syntax_folding") && g:r_syntax_folding
44662db673SBram Moolenaar  setlocal foldmethod=syntax
45662db673SBram Moolenaarendif
46fc65cabbSBram Moolenaar
47fc65cabbSBram Moolenaarlet g:r_syntax_hl_roxygen = get(g:, 'r_syntax_hl_roxygen', 1)
48662db673SBram Moolenaar
49071d4279SBram Moolenaarsyn case match
50071d4279SBram Moolenaar
51071d4279SBram Moolenaar" Comment
52db6ea063SBram Moolenaarsyn match rCommentTodo contained "\(BUG\|FIXME\|NOTE\|TODO\):"
53fc65cabbSBram Moolenaarsyn match rTodoParen contained "\(BUG\|FIXME\|NOTE\|TODO\)\s*(.\{-})\s*:" contains=rTodoKeyw,rTodoInfo transparent
54fc65cabbSBram Moolenaarsyn keyword rTodoKeyw BUG FIXME NOTE TODO contained
55fc65cabbSBram Moolenaarsyn match rTodoInfo "(\zs.\{-}\ze)" contained
56*11e3c5baSBram Moolenaarsyn match rComment contains=@Spell,rCommentTodo,rTodoParen "#.*"
57203d04d7SBram Moolenaar
58203d04d7SBram Moolenaar" Roxygen
59cd5c8f82SBram Moolenaarif g:r_syntax_hl_roxygen
60cd5c8f82SBram Moolenaar  " A roxygen block can start at the beginning of a file (first version) and
61*11e3c5baSBram Moolenaar  " after a blank line (second version). It ends when a line appears that does not
62cd5c8f82SBram Moolenaar  " contain a roxygen comment. In the following comments, any line containing
63cd5c8f82SBram Moolenaar  " a roxygen comment marker (one or two hash signs # followed by a single
64cd5c8f82SBram Moolenaar  " quote ' and preceded only by whitespace) is called a roxygen line. A
65cd5c8f82SBram Moolenaar  " roxygen line containing only a roxygen comment marker, optionally followed
66cd5c8f82SBram Moolenaar  " by whitespace is called an empty roxygen line.
672c5e8e80SBram Moolenaar
68cd5c8f82SBram Moolenaar  " First we match all roxygen blocks as containing only a title. In case an
69cd5c8f82SBram Moolenaar  " empty roxygen line ending the title or a tag is found, this will be
70fc65cabbSBram Moolenaar  " overridden later by the definitions of rOBlock.
71cd5c8f82SBram Moolenaar  syn match rOTitleBlock "\%^\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag
72cd5c8f82SBram Moolenaar  syn match rOTitleBlock "^\s*\n\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag
732c5e8e80SBram Moolenaar
74*11e3c5baSBram Moolenaar  " A title as part of a block is always at the beginning of the block, i.e.
75*11e3c5baSBram Moolenaar  " either at the start of a file or after a completely empty line.
76*11e3c5baSBram Moolenaar  syn match rOTitle "\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag
77*11e3c5baSBram Moolenaar  syn match rOTitle "^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag
78*11e3c5baSBram Moolenaar  syn match rOTitleTag contained "@title"
79*11e3c5baSBram Moolenaar
80cd5c8f82SBram Moolenaar  " When a roxygen block has a title and additional content, the title
81cd5c8f82SBram Moolenaar  " consists of one or more roxygen lines (as little as possible are matched),
82cd5c8f82SBram Moolenaar  " followed either by an empty roxygen line
83cd5c8f82SBram Moolenaar  syn region rOBlock start="\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
84cd5c8f82SBram Moolenaar  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 fold
85cd5c8f82SBram Moolenaar
86cd5c8f82SBram Moolenaar  " or by a roxygen tag (we match everything starting with @ but not @@ which is used as escape sequence for a literal @).
87cd5c8f82SBram Moolenaar  syn region rOBlock start="\%^\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
88cd5c8f82SBram Moolenaar  syn region rOBlock start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
89cd5c8f82SBram Moolenaar
90cd5c8f82SBram Moolenaar  " If a block contains an @rdname, @describeIn tag, it may have paragraph breaks, but does not have a title
91cd5c8f82SBram Moolenaar  syn region rOBlockNoTitle start="\%^\(\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 fold
92cd5c8f82SBram Moolenaar  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 fold
93cd5c8f82SBram Moolenaar  syn region rOBlockNoTitle start="\%^\(\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 fold
94cd5c8f82SBram Moolenaar  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 fold
95cd5c8f82SBram Moolenaar
96fc65cabbSBram Moolenaar  syn match rOCommentKey "^\s*#\{1,2}'" contained
97*11e3c5baSBram Moolenaar  syn region rOExamples start="^\s*#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold
98cd5c8f82SBram Moolenaar
99*11e3c5baSBram Moolenaar  " R6 classes may contain roxygen lines independent of roxygen blocks
100*11e3c5baSBram Moolenaar  syn region rOR6Class start=/R6Class(/ end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold
101*11e3c5baSBram Moolenaar  syn match rOR6Block "#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained
102*11e3c5baSBram Moolenaar  syn match rOR6Block "^\s*#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained
103*11e3c5baSBram Moolenaar
104*11e3c5baSBram Moolenaar  " rOTag list originally generated from the lists that were available in
105cd5c8f82SBram Moolenaar  " https://github.com/klutometis/roxygen/R/rd.R and
106cd5c8f82SBram Moolenaar  " https://github.com/klutometis/roxygen/R/namespace.R
107cd5c8f82SBram Moolenaar  " using s/^    \([A-Za-z0-9]*\) = .*/  syn match rOTag contained "@\1"/
108cd5c8f82SBram Moolenaar  " Plus we need the @include tag
109cd5c8f82SBram Moolenaar
110cd5c8f82SBram Moolenaar  " rd.R
111cd5c8f82SBram Moolenaar  syn match rOTag contained "@aliases"
112cd5c8f82SBram Moolenaar  syn match rOTag contained "@author"
113cd5c8f82SBram Moolenaar  syn match rOTag contained "@backref"
114cd5c8f82SBram Moolenaar  syn match rOTag contained "@concept"
115cd5c8f82SBram Moolenaar  syn match rOTag contained "@describeIn"
116cd5c8f82SBram Moolenaar  syn match rOTag contained "@description"
117cd5c8f82SBram Moolenaar  syn match rOTag contained "@details"
118cd5c8f82SBram Moolenaar  syn match rOTag contained "@docType"
119cd5c8f82SBram Moolenaar  syn match rOTag contained "@encoding"
120cd5c8f82SBram Moolenaar  syn match rOTag contained "@evalRd"
121cd5c8f82SBram Moolenaar  syn match rOTag contained "@example"
122cd5c8f82SBram Moolenaar  syn match rOTag contained "@examples"
123cd5c8f82SBram Moolenaar  syn match rOTag contained "@family"
124cd5c8f82SBram Moolenaar  syn match rOTag contained "@field"
125cd5c8f82SBram Moolenaar  syn match rOTag contained "@format"
126cd5c8f82SBram Moolenaar  syn match rOTag contained "@inherit"
127cd5c8f82SBram Moolenaar  syn match rOTag contained "@inheritParams"
128cd5c8f82SBram Moolenaar  syn match rOTag contained "@inheritDotParams"
129cd5c8f82SBram Moolenaar  syn match rOTag contained "@inheritSection"
130cd5c8f82SBram Moolenaar  syn match rOTag contained "@keywords"
131cd5c8f82SBram Moolenaar  syn match rOTag contained "@method"
132cd5c8f82SBram Moolenaar  syn match rOTag contained "@name"
133cd5c8f82SBram Moolenaar  syn match rOTag contained "@md"
134cd5c8f82SBram Moolenaar  syn match rOTag contained "@noMd"
135cd5c8f82SBram Moolenaar  syn match rOTag contained "@noRd"
136cd5c8f82SBram Moolenaar  syn match rOTag contained "@note"
137cd5c8f82SBram Moolenaar  syn match rOTag contained "@param"
138cd5c8f82SBram Moolenaar  syn match rOTag contained "@rdname"
139cd5c8f82SBram Moolenaar  syn match rOTag contained "@rawRd"
140cd5c8f82SBram Moolenaar  syn match rOTag contained "@references"
141cd5c8f82SBram Moolenaar  syn match rOTag contained "@return"
142cd5c8f82SBram Moolenaar  syn match rOTag contained "@section"
143cd5c8f82SBram Moolenaar  syn match rOTag contained "@seealso"
144cd5c8f82SBram Moolenaar  syn match rOTag contained "@slot"
145cd5c8f82SBram Moolenaar  syn match rOTag contained "@source"
146cd5c8f82SBram Moolenaar  syn match rOTag contained "@template"
147cd5c8f82SBram Moolenaar  syn match rOTag contained "@templateVar"
148cd5c8f82SBram Moolenaar  syn match rOTag contained "@title"
149cd5c8f82SBram Moolenaar  syn match rOTag contained "@usage"
150cd5c8f82SBram Moolenaar  " namespace.R
151cd5c8f82SBram Moolenaar  syn match rOTag contained "@export"
152cd5c8f82SBram Moolenaar  syn match rOTag contained "@exportClass"
153cd5c8f82SBram Moolenaar  syn match rOTag contained "@exportMethod"
154cd5c8f82SBram Moolenaar  syn match rOTag contained "@exportPattern"
155cd5c8f82SBram Moolenaar  syn match rOTag contained "@import"
156cd5c8f82SBram Moolenaar  syn match rOTag contained "@importClassesFrom"
157cd5c8f82SBram Moolenaar  syn match rOTag contained "@importFrom"
158cd5c8f82SBram Moolenaar  syn match rOTag contained "@importMethodsFrom"
159cd5c8f82SBram Moolenaar  syn match rOTag contained "@rawNamespace"
160cd5c8f82SBram Moolenaar  syn match rOTag contained "@S3method"
161cd5c8f82SBram Moolenaar  syn match rOTag contained "@useDynLib"
162cd5c8f82SBram Moolenaar  " other
163*11e3c5baSBram Moolenaar  syn match rOTag contained "@eval"
164cd5c8f82SBram Moolenaar  syn match rOTag contained "@include"
165*11e3c5baSBram Moolenaar  syn match rOTag contained "@includeRmd"
166*11e3c5baSBram Moolenaar  syn match rOTag contained "@order"
16777cdfd10SBram Moolenaarendif
168203d04d7SBram Moolenaar
169071d4279SBram Moolenaar
170662db673SBram Moolenaarif &filetype == "rhelp"
171662db673SBram Moolenaar  " string enclosed in double quotes
172662db673SBram Moolenaar  syn region rString contains=rSpecial,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
173662db673SBram Moolenaar  " string enclosed in single quotes
174662db673SBram Moolenaar  syn region rString contains=rSpecial,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
175662db673SBram Moolenaarelse
176071d4279SBram Moolenaar  " string enclosed in double quotes
177483c5d80SBram Moolenaar  syn region rString contains=rSpecial,rStrError,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
178071d4279SBram Moolenaar  " string enclosed in single quotes
179483c5d80SBram Moolenaar  syn region rString contains=rSpecial,rStrError,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
180662db673SBram Moolenaarendif
181071d4279SBram Moolenaar
182483c5d80SBram Moolenaarsyn match rStrError display contained "\\."
183483c5d80SBram Moolenaar
184662db673SBram Moolenaar
185483c5d80SBram Moolenaar" New line, carriage return, tab, backspace, bell, feed, vertical tab, backslash
186483c5d80SBram Moolenaarsyn match rSpecial display contained "\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\"
187483c5d80SBram Moolenaar
188483c5d80SBram Moolenaar" Hexadecimal and Octal digits
189483c5d80SBram Moolenaarsyn match rSpecial display contained "\\\(x\x\{1,2}\|[0-8]\{1,3}\)"
190483c5d80SBram Moolenaar
191483c5d80SBram Moolenaar" Unicode characters
192483c5d80SBram Moolenaarsyn match rSpecial display contained "\\u\x\{1,4}"
193483c5d80SBram Moolenaarsyn match rSpecial display contained "\\U\x\{1,8}"
194483c5d80SBram Moolenaarsyn match rSpecial display contained "\\u{\x\{1,4}}"
195483c5d80SBram Moolenaarsyn match rSpecial display contained "\\U{\x\{1,8}}"
196483c5d80SBram Moolenaar
197*11e3c5baSBram Moolenaar" Raw string
198*11e3c5baSBram Moolenaarsyn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)(/ end=/)\z2\z1/ keepend
199*11e3c5baSBram Moolenaarsyn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\){/ end=/}\z2\z1/ keepend
200*11e3c5baSBram Moolenaarsyn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)\[/ end=/\]\z2\z1/ keepend
201*11e3c5baSBram Moolenaar
202071d4279SBram Moolenaar" Statement
203071d4279SBram Moolenaarsyn keyword rStatement   break next return
204071d4279SBram Moolenaarsyn keyword rConditional if else
205071d4279SBram Moolenaarsyn keyword rRepeat      for in repeat while
206071d4279SBram Moolenaar
207483c5d80SBram Moolenaar" Constant (not really)
208203d04d7SBram Moolenaarsyn keyword rConstant T F LETTERS letters month.abb month.name pi
209483c5d80SBram Moolenaarsyn keyword rConstant R.version.string
210483c5d80SBram Moolenaar
211662db673SBram Moolenaarsyn keyword rNumber   NA_integer_ NA_real_ NA_complex_ NA_character_
212662db673SBram Moolenaar
213662db673SBram Moolenaar" Constants
214071d4279SBram Moolenaarsyn keyword rConstant NULL
215071d4279SBram Moolenaarsyn keyword rBoolean  FALSE TRUE
216662db673SBram Moolenaarsyn keyword rNumber   NA Inf NaN
217071d4279SBram Moolenaar
218483c5d80SBram Moolenaar" integer
219483c5d80SBram Moolenaarsyn match rInteger "\<\d\+L"
220483c5d80SBram Moolenaarsyn match rInteger "\<0x\([0-9]\|[a-f]\|[A-F]\)\+L"
221483c5d80SBram Moolenaarsyn match rInteger "\<\d\+[Ee]+\=\d\+L"
222483c5d80SBram Moolenaar
223483c5d80SBram Moolenaar" number with no fractional part or exponent
224483c5d80SBram Moolenaarsyn match rNumber "\<\d\+\>"
225483c5d80SBram Moolenaar" hexadecimal number
226483c5d80SBram Moolenaarsyn match rNumber "\<0x\([0-9]\|[a-f]\|[A-F]\)\+"
227483c5d80SBram Moolenaar
228483c5d80SBram Moolenaar" floating point number with integer and fractional parts and optional exponent
229483c5d80SBram Moolenaarsyn match rFloat "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\="
230483c5d80SBram Moolenaar" floating point number with no integer part and optional exponent
231483c5d80SBram Moolenaarsyn match rFloat "\<\.\d\+\([Ee][-+]\=\d\+\)\="
232483c5d80SBram Moolenaar" floating point number with no fractional part and optional exponent
233483c5d80SBram Moolenaarsyn match rFloat "\<\d\+[Ee][-+]\=\d\+"
234483c5d80SBram Moolenaar
235662db673SBram Moolenaar" complex number
236662db673SBram Moolenaarsyn match rComplex "\<\d\+i"
237662db673SBram Moolenaarsyn match rComplex "\<\d\++\d\+i"
238662db673SBram Moolenaarsyn match rComplex "\<0x\([0-9]\|[a-f]\|[A-F]\)\+i"
239662db673SBram Moolenaarsyn match rComplex "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=i"
240662db673SBram Moolenaarsyn match rComplex "\<\.\d\+\([Ee][-+]\=\d\+\)\=i"
241662db673SBram Moolenaarsyn match rComplex "\<\d\+[Ee][-+]\=\d\+i"
242662db673SBram Moolenaar
2438feef4ffSBram Moolenaarsyn match rAssign    '='
244662db673SBram Moolenaarsyn match rOperator    "&"
245662db673SBram Moolenaarsyn match rOperator    '-'
246e6ae6225SBram Moolenaarsyn match rOperator    '\*'
247662db673SBram Moolenaarsyn match rOperator    '+'
248203d04d7SBram Moolenaarif &filetype != "rmd" && &filetype != "rrst"
249203d04d7SBram Moolenaar  syn match rOperator    "[|!<>^~/:]"
250203d04d7SBram Moolenaarelse
251203d04d7SBram Moolenaar  syn match rOperator    "[|!<>^~`/:]"
252203d04d7SBram Moolenaarendif
253db6ea063SBram Moolenaarsyn match rOperator    "%\{2}\|%\S\{-}%"
2548feef4ffSBram Moolenaarsyn match rOperator '\([!><]\)\@<=='
2558feef4ffSBram Moolenaarsyn match rOperator '=='
256203d04d7SBram Moolenaarsyn match rOpError  '\*\{3}'
257662db673SBram Moolenaarsyn match rOpError  '//'
258662db673SBram Moolenaarsyn match rOpError  '&&&'
259662db673SBram Moolenaarsyn match rOpError  '|||'
260662db673SBram Moolenaarsyn match rOpError  '<<'
261662db673SBram Moolenaarsyn match rOpError  '>>'
262662db673SBram Moolenaar
2638feef4ffSBram Moolenaarsyn match rAssign "<\{1,2}-"
2648feef4ffSBram Moolenaarsyn match rAssign "->\{1,2}"
265071d4279SBram Moolenaar
266071d4279SBram Moolenaar" Special
267483c5d80SBram Moolenaarsyn match rDelimiter "[,;:]"
268071d4279SBram Moolenaar
269071d4279SBram Moolenaar" Error
270662db673SBram Moolenaarif exists("g:r_syntax_folding")
271662db673SBram Moolenaar  syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold
272662db673SBram Moolenaar  syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError fold
273662db673SBram Moolenaar  syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError fold
274fc65cabbSBram Moolenaar  syn region rSection matchgroup=Title start=/^#.*[-=#]\{4,}/ end=/^#.*[-=#]\{4,}/ms=s-2,me=s-1 transparent contains=ALL fold
275662db673SBram Moolenaarelse
276071d4279SBram Moolenaar  syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError
277071d4279SBram Moolenaar  syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError
278071d4279SBram Moolenaar  syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError
279662db673SBram Moolenaarendif
280662db673SBram Moolenaar
281483c5d80SBram Moolenaarsyn match rError      "[)\]}]"
282483c5d80SBram Moolenaarsyn match rBraceError "[)}]" contained
283483c5d80SBram Moolenaarsyn match rCurlyError "[)\]]" contained
284483c5d80SBram Moolenaarsyn match rParenError "[\]}]" contained
285483c5d80SBram Moolenaar
286cd5c8f82SBram Moolenaar" Use Nvim-R to highlight functions dynamically if it is installed
287cd5c8f82SBram Moolenaarif !exists("g:r_syntax_fun_pattern")
288cd5c8f82SBram Moolenaar  let s:ff = split(substitute(globpath(&rtp, "R/functions.vim"), "functions.vim", "", "g"), "\n")
289cd5c8f82SBram Moolenaar  if len(s:ff) > 0
290cd5c8f82SBram Moolenaar    let g:r_syntax_fun_pattern = 0
291cd5c8f82SBram Moolenaar  else
292cd5c8f82SBram Moolenaar    let g:r_syntax_fun_pattern = 1
293cd5c8f82SBram Moolenaar  endif
294cd5c8f82SBram Moolenaarendif
295cd5c8f82SBram Moolenaar
296cd5c8f82SBram Moolenaar" Only use Nvim-R to highlight functions if they should not be highlighted
297cd5c8f82SBram Moolenaar" according to a generic pattern
298cd5c8f82SBram Moolenaarif g:r_syntax_fun_pattern == 1
299cd5c8f82SBram Moolenaar  syn match rFunction '[0-9a-zA-Z_\.]\+\s*\ze('
300cd5c8f82SBram Moolenaarelse
30177cdfd10SBram Moolenaar  " Nvim-R:
3028feef4ffSBram Moolenaar  runtime R/functions.vim
3038feef4ffSBram Moolenaarendif
304662db673SBram Moolenaar
305662db673SBram Moolenaarsyn match rDollar display contained "\$"
306203d04d7SBram Moolenaarsyn match rDollar display contained "@"
307662db673SBram Moolenaar
308662db673SBram Moolenaar" List elements will not be highlighted as functions:
309662db673SBram Moolenaarsyn match rLstElmt "\$[a-zA-Z0-9\\._]*" contains=rDollar
310203d04d7SBram Moolenaarsyn match rLstElmt "@[a-zA-Z0-9\\._]*" contains=rDollar
311662db673SBram Moolenaar
312483c5d80SBram Moolenaar" Functions that may add new objects
313483c5d80SBram Moolenaarsyn keyword rPreProc     library require attach detach source
314483c5d80SBram Moolenaar
315662db673SBram Moolenaarif &filetype == "rhelp"
316662db673SBram Moolenaar  syn match rHelpIdent '\\method'
317662db673SBram Moolenaar  syn match rHelpIdent '\\S4method'
318662db673SBram Moolenaarendif
319662db673SBram Moolenaar
320483c5d80SBram Moolenaar" Type
321483c5d80SBram Moolenaarsyn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame
322071d4279SBram Moolenaar
323662db673SBram Moolenaar" Name of object with spaces
324203d04d7SBram Moolenaarif &filetype != "rmd" && &filetype != "rrst"
325fc65cabbSBram Moolenaar  syn region rNameWSpace start="`" end="`" contains=rSpaceFun
326203d04d7SBram Moolenaarendif
327662db673SBram Moolenaar
328662db673SBram Moolenaarif &filetype == "rhelp"
329662db673SBram Moolenaar  syn match rhPreProc "^#ifdef.*"
330662db673SBram Moolenaar  syn match rhPreProc "^#endif.*"
331662db673SBram Moolenaar  syn match rhSection "\\dontrun\>"
332662db673SBram Moolenaarendif
333662db673SBram Moolenaar
334cd5c8f82SBram Moolenaarif exists("r_syntax_minlines")
335cd5c8f82SBram Moolenaar  exe "syn sync minlines=" . r_syntax_minlines
3368feef4ffSBram Moolenaarelse
3378feef4ffSBram Moolenaar  syn sync minlines=40
3388feef4ffSBram Moolenaarendif
3398feef4ffSBram Moolenaar
340071d4279SBram Moolenaar" Define the default highlighting.
3418feef4ffSBram Moolenaarhi def link rAssign      Statement
342483c5d80SBram Moolenaarhi def link rBoolean     Boolean
343483c5d80SBram Moolenaarhi def link rBraceError  Error
344483c5d80SBram Moolenaarhi def link rComment     Comment
345fc65cabbSBram Moolenaarhi def link rTodoParen   Comment
346fc65cabbSBram Moolenaarhi def link rTodoInfo    SpecialComment
347db6ea063SBram Moolenaarhi def link rCommentTodo Todo
348fc65cabbSBram Moolenaarhi def link rTodoKeyw    Todo
349483c5d80SBram Moolenaarhi def link rComplex     Number
350483c5d80SBram Moolenaarhi def link rConditional Conditional
351483c5d80SBram Moolenaarhi def link rConstant    Constant
352483c5d80SBram Moolenaarhi def link rCurlyError  Error
353483c5d80SBram Moolenaarhi def link rDelimiter   Delimiter
354483c5d80SBram Moolenaarhi def link rDollar      SpecialChar
355483c5d80SBram Moolenaarhi def link rError       Error
356483c5d80SBram Moolenaarhi def link rFloat       Float
357662db673SBram Moolenaarhi def link rFunction    Function
358fc65cabbSBram Moolenaarhi def link rSpaceFun    Function
359662db673SBram Moolenaarhi def link rHelpIdent   Identifier
360662db673SBram Moolenaarhi def link rhPreProc    PreProc
361662db673SBram Moolenaarhi def link rhSection    PreCondit
362483c5d80SBram Moolenaarhi def link rInteger     Number
363662db673SBram Moolenaarhi def link rLstElmt     Normal
364662db673SBram Moolenaarhi def link rNameWSpace  Normal
365483c5d80SBram Moolenaarhi def link rNumber      Number
366483c5d80SBram Moolenaarhi def link rOperator    Operator
367662db673SBram Moolenaarhi def link rOpError     Error
368483c5d80SBram Moolenaarhi def link rParenError  Error
369483c5d80SBram Moolenaarhi def link rPreProc     PreProc
370*11e3c5baSBram Moolenaarhi def link rRawString   String
371*11e3c5baSBram Moolenaarhi def link rRawStrDelim Delimiter
372483c5d80SBram Moolenaarhi def link rRepeat      Repeat
373483c5d80SBram Moolenaarhi def link rSpecial     SpecialChar
374483c5d80SBram Moolenaarhi def link rStatement   Statement
375483c5d80SBram Moolenaarhi def link rString      String
376483c5d80SBram Moolenaarhi def link rStrError    Error
377483c5d80SBram Moolenaarhi def link rType        Type
378cd5c8f82SBram Moolenaarif g:r_syntax_hl_roxygen
379cd5c8f82SBram Moolenaar  hi def link rOTitleTag   Operator
380cd5c8f82SBram Moolenaar  hi def link rOTag        Operator
381cd5c8f82SBram Moolenaar  hi def link rOTitleBlock Title
3822c5e8e80SBram Moolenaar  hi def link rOBlock         Comment
383cd5c8f82SBram Moolenaar  hi def link rOBlockNoTitle  Comment
384*11e3c5baSBram Moolenaar  hi def link rOR6Block         Comment
3852c5e8e80SBram Moolenaar  hi def link rOTitle      Title
3862c5e8e80SBram Moolenaar  hi def link rOCommentKey Comment
3872c5e8e80SBram Moolenaar  hi def link rOExamples   SpecialComment
38877cdfd10SBram Moolenaarendif
3892c5e8e80SBram Moolenaar
390071d4279SBram Moolenaarlet b:current_syntax="r"
391071d4279SBram Moolenaar
392071d4279SBram Moolenaar" vim: ts=8 sw=2
393