Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim syntax file |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 2 | " Language: R (GNU S) |
Christian Brabandt | f9ca139 | 2024-02-19 20:37:11 +0100 | [diff] [blame] | 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> |
Bram Moolenaar | 2c5e8e8 | 2015-12-05 20:59:21 +0100 | [diff] [blame] | 7 | " Contributor: Johannes Ranke <jranke@uni-bremen.de> |
Christian Brabandt | f9ca139 | 2024-02-19 20:37:11 +0100 | [diff] [blame] | 8 | " Former Repository: https://github.com/jalvesaq/R-Vim-runtime |
| 9 | " Filenames: *.R *.r *.Rhistory *.Rt |
| 10 | " Last Change: 2023 Dec 24 08:05AM |
| 11 | " 2024 Feb 19 by Vim Project (announce adoption) |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 12 | " |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 13 | " NOTE: The highlighting of R functions might be defined in |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 14 | " runtime files created by a filetype plugin, if installed. |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 15 | " |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 16 | " CONFIGURATION: |
Bram Moolenaar | 77cdfd1 | 2016-03-12 12:57:59 +0100 | [diff] [blame] | 17 | " Syntax folding can be turned on by |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 18 | " |
| 19 | " let r_syntax_folding = 1 |
| 20 | " |
Bram Moolenaar | 77cdfd1 | 2016-03-12 12:57:59 +0100 | [diff] [blame] | 21 | " ROxygen highlighting can be turned off by |
| 22 | " |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 23 | " let r_syntax_hl_roxygen = 0 |
Bram Moolenaar | 77cdfd1 | 2016-03-12 12:57:59 +0100 | [diff] [blame] | 24 | " |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 25 | " Some lines of code were borrowed from Zhuojun Chen. |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 26 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 27 | if exists("b:current_syntax") |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 28 | finish |
| 29 | endif |
| 30 | |
Jakson Alves de Aquino | 9042bd8 | 2023-12-25 09:22:27 +0000 | [diff] [blame] | 31 | syn iskeyword @,48-57,_,. |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 32 | |
| 33 | " The variables g:r_hl_roxygen and g:r_syn_minlines were renamed on April 8, 2017. |
| 34 | if exists("g:r_hl_roxygen") |
| 35 | let g:r_syntax_hl_roxygen = g:r_hl_roxygen |
| 36 | endif |
| 37 | if exists("g:r_syn_minlines") |
| 38 | let g:r_syntax_minlines = g:r_syn_minlines |
| 39 | endif |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 40 | |
Bram Moolenaar | 77cdfd1 | 2016-03-12 12:57:59 +0100 | [diff] [blame] | 41 | if exists("g:r_syntax_folding") && g:r_syntax_folding |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 42 | setlocal foldmethod=syntax |
| 43 | endif |
Bram Moolenaar | fc65cab | 2018-08-28 22:58:02 +0200 | [diff] [blame] | 44 | |
| 45 | let g:r_syntax_hl_roxygen = get(g:, 'r_syntax_hl_roxygen', 1) |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 46 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 47 | syn case match |
| 48 | |
| 49 | " Comment |
Bram Moolenaar | db6ea06 | 2014-07-10 22:01:47 +0200 | [diff] [blame] | 50 | syn match rCommentTodo contained "\(BUG\|FIXME\|NOTE\|TODO\):" |
Bram Moolenaar | fc65cab | 2018-08-28 22:58:02 +0200 | [diff] [blame] | 51 | syn match rTodoParen contained "\(BUG\|FIXME\|NOTE\|TODO\)\s*(.\{-})\s*:" contains=rTodoKeyw,rTodoInfo transparent |
| 52 | syn keyword rTodoKeyw BUG FIXME NOTE TODO contained |
| 53 | syn match rTodoInfo "(\zs.\{-}\ze)" contained |
Bram Moolenaar | 11e3c5b | 2021-04-21 18:09:37 +0200 | [diff] [blame] | 54 | syn match rComment contains=@Spell,rCommentTodo,rTodoParen "#.*" |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 55 | |
| 56 | " Roxygen |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 57 | if g:r_syntax_hl_roxygen |
| 58 | " A roxygen block can start at the beginning of a file (first version) and |
Bram Moolenaar | 11e3c5b | 2021-04-21 18:09:37 +0200 | [diff] [blame] | 59 | " after a blank line (second version). It ends when a line appears that does not |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 60 | " contain a roxygen comment. In the following comments, any line containing |
| 61 | " a roxygen comment marker (one or two hash signs # followed by a single |
| 62 | " quote ' and preceded only by whitespace) is called a roxygen line. A |
| 63 | " roxygen line containing only a roxygen comment marker, optionally followed |
| 64 | " by whitespace is called an empty roxygen line. |
Bram Moolenaar | 2c5e8e8 | 2015-12-05 20:59:21 +0100 | [diff] [blame] | 65 | |
Bram Moolenaar | dd60c36 | 2023-02-27 15:49:53 +0000 | [diff] [blame] | 66 | syn match rOCommentKey "^\s*#\{1,2}'" contained |
| 67 | syn region rOExamples start="^\s*#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold |
| 68 | |
| 69 | " R6 classes may contain roxygen lines independent of roxygen blocks |
| 70 | syn region rOR6Class start=/R6Class(/ end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold |
| 71 | syn match rOR6Block "#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained |
| 72 | syn match rOR6Block "^\s*#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained |
| 73 | |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 74 | " First we match all roxygen blocks as containing only a title. In case an |
| 75 | " empty roxygen line ending the title or a tag is found, this will be |
Bram Moolenaar | fc65cab | 2018-08-28 22:58:02 +0200 | [diff] [blame] | 76 | " overridden later by the definitions of rOBlock. |
Bram Moolenaar | dd60c36 | 2023-02-27 15:49:53 +0000 | [diff] [blame] | 77 | syn match rOTitleBlock "\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag |
Bram Moolenaar | 2c5e8e8 | 2015-12-05 20:59:21 +0100 | [diff] [blame] | 78 | |
Bram Moolenaar | 11e3c5b | 2021-04-21 18:09:37 +0200 | [diff] [blame] | 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. |
Bram Moolenaar | dd60c36 | 2023-02-27 15:49:53 +0000 | [diff] [blame] | 81 | syn match rOTitle "\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag |
Bram Moolenaar | 11e3c5b | 2021-04-21 18:09:37 +0200 | [diff] [blame] | 82 | syn match rOTitleTag contained "@title" |
| 83 | |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 84 | " When a roxygen block has a title and additional content, the title |
| 85 | " consists of one or more roxygen lines (as little as possible are matched), |
| 86 | " followed either by an empty roxygen line |
Bram Moolenaar | dd60c36 | 2023-02-27 15:49:53 +0000 | [diff] [blame] | 87 | 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 |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 88 | |
| 89 | " or by a roxygen tag (we match everything starting with @ but not @@ which is used as escape sequence for a literal @). |
Bram Moolenaar | dd60c36 | 2023-02-27 15:49:53 +0000 | [diff] [blame] | 90 | syn region rOBlock start="\(\%^\|^\s*\n\)\@<=\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 91 | |
| 92 | " If a block contains an @rdname, @describeIn tag, it may have paragraph breaks, but does not have a title |
Bram Moolenaar | dd60c36 | 2023-02-27 15:49:53 +0000 | [diff] [blame] | 93 | 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 |
| 94 | 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 |
Bram Moolenaar | 11e3c5b | 2021-04-21 18:09:37 +0200 | [diff] [blame] | 95 | |
| 96 | " rOTag list originally generated from the lists that were available in |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 97 | " https://github.com/klutometis/roxygen/R/rd.R and |
| 98 | " https://github.com/klutometis/roxygen/R/namespace.R |
| 99 | " using s/^ \([A-Za-z0-9]*\) = .*/ syn match rOTag contained "@\1"/ |
| 100 | " Plus we need the @include tag |
| 101 | |
| 102 | " rd.R |
| 103 | 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.R |
| 143 | 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 | " other |
Bram Moolenaar | 11e3c5b | 2021-04-21 18:09:37 +0200 | [diff] [blame] | 155 | syn match rOTag contained "@eval" |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 156 | syn match rOTag contained "@include" |
Bram Moolenaar | 11e3c5b | 2021-04-21 18:09:37 +0200 | [diff] [blame] | 157 | syn match rOTag contained "@includeRmd" |
| 158 | syn match rOTag contained "@order" |
Bram Moolenaar | 77cdfd1 | 2016-03-12 12:57:59 +0100 | [diff] [blame] | 159 | endif |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 160 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 161 | |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 162 | if &filetype == "rhelp" |
| 163 | " string enclosed in double quotes |
| 164 | syn region rString contains=rSpecial,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/ |
| 165 | " string enclosed in single quotes |
| 166 | syn region rString contains=rSpecial,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/ |
| 167 | else |
| 168 | " string enclosed in double quotes |
| 169 | syn region rString contains=rSpecial,rStrError,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/ |
| 170 | " string enclosed in single quotes |
| 171 | syn region rString contains=rSpecial,rStrError,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/ |
| 172 | endif |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 173 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 174 | syn match rStrError display contained "\\." |
| 175 | |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 176 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 177 | " New line, carriage return, tab, backspace, bell, feed, vertical tab, backslash |
| 178 | syn match rSpecial display contained "\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\" |
| 179 | |
| 180 | " Hexadecimal and Octal digits |
| 181 | syn match rSpecial display contained "\\\(x\x\{1,2}\|[0-8]\{1,3}\)" |
| 182 | |
| 183 | " Unicode characters |
| 184 | syn match rSpecial display contained "\\u\x\{1,4}" |
| 185 | syn match rSpecial display contained "\\U\x\{1,8}" |
| 186 | syn match rSpecial display contained "\\u{\x\{1,4}}" |
| 187 | syn match rSpecial display contained "\\U{\x\{1,8}}" |
| 188 | |
Bram Moolenaar | 11e3c5b | 2021-04-21 18:09:37 +0200 | [diff] [blame] | 189 | " Raw string |
| 190 | syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)(/ end=/)\z2\z1/ keepend |
| 191 | syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\){/ end=/}\z2\z1/ keepend |
| 192 | syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)\[/ end=/\]\z2\z1/ keepend |
| 193 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 194 | " Statement |
| 195 | syn keyword rStatement break next return |
| 196 | syn keyword rConditional if else |
| 197 | syn keyword rRepeat for in repeat while |
| 198 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 199 | " Constant (not really) |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 200 | syn keyword rConstant T F LETTERS letters month.abb month.name pi |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 201 | syn keyword rConstant R.version.string |
| 202 | |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 203 | syn keyword rNumber NA_integer_ NA_real_ NA_complex_ NA_character_ |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 204 | |
| 205 | " Constants |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 206 | syn keyword rConstant NULL |
| 207 | syn keyword rBoolean FALSE TRUE |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 208 | syn keyword rNumber NA Inf NaN |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 209 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 210 | " integer |
| 211 | syn match rInteger "\<\d\+L" |
| 212 | syn match rInteger "\<0x\([0-9]\|[a-f]\|[A-F]\)\+L" |
| 213 | syn match rInteger "\<\d\+[Ee]+\=\d\+L" |
| 214 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 215 | " number with no fractional part or exponent |
| 216 | syn match rNumber "\<\d\+\>" |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 217 | " hexadecimal number |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 218 | syn match rNumber "\<0x\([0-9]\|[a-f]\|[A-F]\)\+" |
| 219 | |
| 220 | " floating point number with integer and fractional parts and optional exponent |
| 221 | syn match rFloat "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=" |
| 222 | " floating point number with no integer part and optional exponent |
| 223 | syn match rFloat "\<\.\d\+\([Ee][-+]\=\d\+\)\=" |
| 224 | " floating point number with no fractional part and optional exponent |
| 225 | syn match rFloat "\<\d\+[Ee][-+]\=\d\+" |
| 226 | |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 227 | " complex number |
| 228 | syn match rComplex "\<\d\+i" |
| 229 | syn match rComplex "\<\d\++\d\+i" |
| 230 | syn match rComplex "\<0x\([0-9]\|[a-f]\|[A-F]\)\+i" |
| 231 | syn match rComplex "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=i" |
| 232 | syn match rComplex "\<\.\d\+\([Ee][-+]\=\d\+\)\=i" |
| 233 | syn match rComplex "\<\d\+[Ee][-+]\=\d\+i" |
| 234 | |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 235 | syn match rAssign '=' |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 236 | syn match rOperator "&" |
| 237 | syn match rOperator '-' |
Bram Moolenaar | e6ae622 | 2013-05-21 21:01:10 +0200 | [diff] [blame] | 238 | syn match rOperator '\*' |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 239 | syn match rOperator '+' |
Bram Moolenaar | dd60c36 | 2023-02-27 15:49:53 +0000 | [diff] [blame] | 240 | if &filetype == "quarto" || &filetype == "rmd" || &filetype == "rrst" |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 241 | syn match rOperator "[|!<>^~`/:]" |
Bram Moolenaar | dd60c36 | 2023-02-27 15:49:53 +0000 | [diff] [blame] | 242 | else |
| 243 | syn match rOperator "[|!<>^~/:]" |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 244 | endif |
Bram Moolenaar | db6ea06 | 2014-07-10 22:01:47 +0200 | [diff] [blame] | 245 | syn match rOperator "%\{2}\|%\S\{-}%" |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 246 | syn match rOperator '\([!><]\)\@<==' |
| 247 | syn match rOperator '==' |
Bram Moolenaar | dd60c36 | 2023-02-27 15:49:53 +0000 | [diff] [blame] | 248 | syn match rOperator '|>' |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 249 | syn match rOpError '\*\{3}' |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 250 | syn match rOpError '//' |
| 251 | syn match rOpError '&&&' |
| 252 | syn match rOpError '|||' |
| 253 | syn match rOpError '<<' |
| 254 | syn match rOpError '>>' |
| 255 | |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 256 | syn match rAssign "<\{1,2}-" |
| 257 | syn match rAssign "->\{1,2}" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 258 | |
| 259 | " Special |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 260 | syn match rDelimiter "[,;:]" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 261 | |
| 262 | " Error |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 263 | if exists("g:r_syntax_folding") |
| 264 | syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold |
| 265 | syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError fold |
| 266 | syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError fold |
Bram Moolenaar | fc65cab | 2018-08-28 22:58:02 +0200 | [diff] [blame] | 267 | syn region rSection matchgroup=Title start=/^#.*[-=#]\{4,}/ end=/^#.*[-=#]\{4,}/ms=s-2,me=s-1 transparent contains=ALL fold |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 268 | else |
| 269 | syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError |
| 270 | syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError |
| 271 | syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError |
| 272 | endif |
| 273 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 274 | syn match rError "[)\]}]" |
| 275 | syn match rBraceError "[)}]" contained |
| 276 | syn match rCurlyError "[)\]]" contained |
| 277 | syn match rParenError "[\]}]" contained |
| 278 | |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 279 | " Use Nvim-R to highlight functions dynamically if it is installed |
| 280 | if !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) > 0 |
| 283 | let g:r_syntax_fun_pattern = 0 |
| 284 | else |
| 285 | let g:r_syntax_fun_pattern = 1 |
| 286 | endif |
Bram Moolenaar | 77cdfd1 | 2016-03-12 12:57:59 +0100 | [diff] [blame] | 287 | endif |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 288 | |
| 289 | " Only use Nvim-R to highlight functions if they should not be highlighted |
| 290 | " according to a generic pattern |
| 291 | if g:r_syntax_fun_pattern == 1 |
| 292 | syn match rFunction '[0-9a-zA-Z_\.]\+\s*\ze(' |
| 293 | else |
Bram Moolenaar | fc65cab | 2018-08-28 22:58:02 +0200 | [diff] [blame] | 294 | " Nvim-R: |
| 295 | runtime R/functions.vim |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 296 | endif |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 297 | |
| 298 | syn match rDollar display contained "\$" |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 299 | syn match rDollar display contained "@" |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 300 | |
| 301 | " List elements will not be highlighted as functions: |
| 302 | syn match rLstElmt "\$[a-zA-Z0-9\\._]*" contains=rDollar |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 303 | syn match rLstElmt "@[a-zA-Z0-9\\._]*" contains=rDollar |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 304 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 305 | " Functions that may add new objects |
| 306 | syn keyword rPreProc library require attach detach source |
| 307 | |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 308 | if &filetype == "rhelp" |
Bram Moolenaar | db6ea06 | 2014-07-10 22:01:47 +0200 | [diff] [blame] | 309 | syn match rHelpIdent '\\method' |
| 310 | syn match rHelpIdent '\\S4method' |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 311 | endif |
| 312 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 313 | " Type |
Bram Moolenaar | dd60c36 | 2023-02-27 15:49:53 +0000 | [diff] [blame] | 314 | syn match rType "\\" |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 315 | syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 316 | |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 317 | " Name of object with spaces |
Bram Moolenaar | dd60c36 | 2023-02-27 15:49:53 +0000 | [diff] [blame] | 318 | if &filetype == "rmd" || &filetype == "rrst" || &filetype == "quarto" |
| 319 | syn region rNameWSpace start="`" end="`" contains=rSpaceFun containedin=rmdrChunk |
| 320 | else |
Bram Moolenaar | fc65cab | 2018-08-28 22:58:02 +0200 | [diff] [blame] | 321 | syn region rNameWSpace start="`" end="`" contains=rSpaceFun |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 322 | endif |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 323 | |
| 324 | if &filetype == "rhelp" |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 325 | syn match rhPreProc "^#ifdef.*" |
| 326 | syn match rhPreProc "^#endif.*" |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 327 | syn match rhSection "\\dontrun\>" |
| 328 | endif |
| 329 | |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 330 | if exists("r_syntax_minlines") |
| 331 | exe "syn sync minlines=" . r_syntax_minlines |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 332 | else |
| 333 | syn sync minlines=40 |
| 334 | endif |
| 335 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 336 | " Define the default highlighting. |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 337 | hi def link rAssign Statement |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 338 | hi def link rBoolean Boolean |
| 339 | hi def link rBraceError Error |
| 340 | hi def link rComment Comment |
Bram Moolenaar | fc65cab | 2018-08-28 22:58:02 +0200 | [diff] [blame] | 341 | hi def link rTodoParen Comment |
| 342 | hi def link rTodoInfo SpecialComment |
Bram Moolenaar | db6ea06 | 2014-07-10 22:01:47 +0200 | [diff] [blame] | 343 | hi def link rCommentTodo Todo |
Bram Moolenaar | fc65cab | 2018-08-28 22:58:02 +0200 | [diff] [blame] | 344 | hi def link rTodoKeyw Todo |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 345 | hi def link rComplex Number |
| 346 | hi def link rConditional Conditional |
| 347 | hi def link rConstant Constant |
| 348 | hi def link rCurlyError Error |
| 349 | hi def link rDelimiter Delimiter |
| 350 | hi def link rDollar SpecialChar |
| 351 | hi def link rError Error |
| 352 | hi def link rFloat Float |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 353 | hi def link rFunction Function |
Bram Moolenaar | fc65cab | 2018-08-28 22:58:02 +0200 | [diff] [blame] | 354 | hi def link rSpaceFun Function |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 355 | hi def link rHelpIdent Identifier |
| 356 | hi def link rhPreProc PreProc |
| 357 | hi def link rhSection PreCondit |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 358 | hi def link rInteger Number |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 359 | hi def link rLstElmt Normal |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 360 | hi def link rNameWSpace Normal |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 361 | hi def link rNumber Number |
| 362 | hi def link rOperator Operator |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 363 | hi def link rOpError Error |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 364 | hi def link rParenError Error |
| 365 | hi def link rPreProc PreProc |
Bram Moolenaar | 11e3c5b | 2021-04-21 18:09:37 +0200 | [diff] [blame] | 366 | hi def link rRawString String |
| 367 | hi def link rRawStrDelim Delimiter |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 368 | hi def link rRepeat Repeat |
| 369 | hi def link rSpecial SpecialChar |
| 370 | hi def link rStatement Statement |
| 371 | hi def link rString String |
| 372 | hi def link rStrError Error |
| 373 | hi def link rType Type |
Bram Moolenaar | cd5c8f8 | 2017-04-09 20:11:58 +0200 | [diff] [blame] | 374 | if g:r_syntax_hl_roxygen |
| 375 | hi def link rOTitleTag Operator |
| 376 | hi def link rOTag Operator |
| 377 | hi def link rOTitleBlock Title |
| 378 | hi def link rOBlock Comment |
| 379 | hi def link rOBlockNoTitle Comment |
Bram Moolenaar | 11e3c5b | 2021-04-21 18:09:37 +0200 | [diff] [blame] | 380 | hi def link rOR6Block Comment |
Bram Moolenaar | 77cdfd1 | 2016-03-12 12:57:59 +0100 | [diff] [blame] | 381 | hi def link rOTitle Title |
| 382 | hi def link rOCommentKey Comment |
| 383 | hi def link rOExamples SpecialComment |
| 384 | endif |
Bram Moolenaar | 2c5e8e8 | 2015-12-05 20:59:21 +0100 | [diff] [blame] | 385 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 386 | let b:current_syntax="r" |
| 387 | |
| 388 | " vim: ts=8 sw=2 |