diff runtime/syntax/r.vim @ 11347:4aae8146c21f

Update runtime files. commit https://github.com/vim/vim/commit/cd5c8f82507822467232ab71e1ebbaae19595916 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Apr 9 20:11:58 2017 +0200 Update runtime files.
author Christian Brabandt <cb@256bit.org>
date Sun, 09 Apr 2017 20:15:03 +0200
parents 03fa8a51e9dc
children 0ecb909e3249
line wrap: on
line diff
--- a/runtime/syntax/r.vim
+++ b/runtime/syntax/r.vim
@@ -5,10 +5,10 @@
 " 		      Tom Payne <tom@tompayne.org>
 " Contributor:        Johannes Ranke <jranke@uni-bremen.de>
 " Homepage:           https://github.com/jalvesaq/R-Vim-runtime
-" Last Change:	      Thu Aug 25, 2016  08:52PM
+" Last Change:	      Sat Apr 08, 2017  07:01PM
 " Filenames:	      *.R *.r *.Rhistory *.Rt
 "
-" NOTE: The highlighting of R functions is defined in
+" NOTE: The highlighting of R functions might be defined in
 " runtime files created by a filetype plugin, if installed.
 "
 " CONFIGURATION:
@@ -18,7 +18,7 @@
 "
 "   ROxygen highlighting can be turned off by
 "
-"      let r_hl_roxygen = 0
+"      let r_syntax_hl_roxygen = 0
 "
 " Some lines of code were borrowed from Zhuojun Chen.
 
@@ -26,13 +26,25 @@ if exists("b:current_syntax")
   finish
 endif
 
-syn iskeyword @,48-57,_,.
+if has("patch-7.4.1142")
+  syn iskeyword @,48-57,_,.
+else
+  setlocal iskeyword=@,48-57,_,.
+endif
+
+" The variables g:r_hl_roxygen and g:r_syn_minlines were renamed on April 8, 2017.
+if exists("g:r_hl_roxygen")
+  let g:r_syntax_hl_roxygen = g:r_hl_roxygen
+endif
+if exists("g:r_syn_minlines")
+  let g:r_syntax_minlines = g:r_syn_minlines
+endif
 
 if exists("g:r_syntax_folding") && g:r_syntax_folding
   setlocal foldmethod=syntax
 endif
-if !exists("g:r_hl_roxygen")
-  let g:r_hl_roxygen = 1
+if !exists("g:r_syntax_hl_roxygen")
+  let g:r_syntax_hl_roxygen = 1
 endif
 
 syn case match
@@ -42,19 +54,106 @@ syn match rCommentTodo contained "\(BUG\
 syn match rComment contains=@Spell,rCommentTodo,rOBlock "#.*"
 
 " Roxygen
-if g:r_hl_roxygen
-  syn region rOBlock start="^\s*\n#\{1,2}' " start="\%^#\{1,2}' " end="^\(#\{1,2}'\)\@!" contains=rOTitle,rOKeyword,rOExamples,@Spell keepend
-  syn region rOTitle start="^\s*\n#\{1,2}' " start="\%^#\{1,2}' " end="^\(#\{1,2}'\s*$\)\@=" contained contains=rOCommentKey
-  syn match rOCommentKey "#\{1,2}'" containedin=rOTitle contained
+if g:r_syntax_hl_roxygen
+  " A roxygen block can start at the beginning of a file (first version) and
+  " after a blank line (second version). It ends when a line that does not
+  " contain a roxygen comment. In the following comments, any line containing
+  " a roxygen comment marker (one or two hash signs # followed by a single
+  " quote ' and preceded only by whitespace) is called a roxygen line. A
+  " roxygen line containing only a roxygen comment marker, optionally followed
+  " by whitespace is called an empty roxygen line.
+
+  " First we match all roxygen blocks as containing only a title. In case an
+  " empty roxygen line ending the title or a tag is found, this will be
+  " overriden later by the definitions of rOBlock.
+  syn match rOTitleBlock "\%^\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag
+  syn match rOTitleBlock "^\s*\n\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag
+
+  " When a roxygen block has a title and additional content, the title
+  " consists of one or more roxygen lines (as little as possible are matched),
+  " followed either by an empty roxygen line
+  syn region rOBlock start="\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
+  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
 
-  syn region rOExamples start="^#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOKeyword
+  " or by a roxygen tag (we match everything starting with @ but not @@ which is used as escape sequence for a literal @).
+  syn region rOBlock start="\%^\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
+  syn region rOBlock start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
+
+  " If a block contains an @rdname, @describeIn tag, it may have paragraph breaks, but does not have a title
+  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
+  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
+  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
+  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
+
+  " A title as part of a block is always at the beginning of the block, i.e.
+  " either at the start of a file or after a completely empty line.
+  syn match rOTitle "\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag
+  syn match rOTitle "^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag
+  syn match rOTitleTag contained "@title"
+
+  syn match rOCommentKey "#\{1,2}'" contained
+  syn region rOExamples start="^#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold
+
+  " rOTag list generated from the lists in
+  " https://github.com/klutometis/roxygen/R/rd.R and
+  " https://github.com/klutometis/roxygen/R/namespace.R
+  " using s/^    \([A-Za-z0-9]*\) = .*/  syn match rOTag contained "@\1"/
+  " Plus we need the @include tag
 
-  syn match rOKeyword contained "@\(param\|return\|name\|rdname\|examples\|example\|include\|docType\)"
-  syn match rOKeyword contained "@\(S3method\|TODO\|aliases\|alias\|assignee\|author\|callGraphDepth\|callGraph\)"
-  syn match rOKeyword contained "@\(callGraphPrimitives\|concept\|exportClass\|exportMethod\|exportPattern\|export\|formals\)"
-  syn match rOKeyword contained "@\(format\|importClassesFrom\|importFrom\|importMethodsFrom\|import\|keywords\|useDynLib\)"
-  syn match rOKeyword contained "@\(method\|noRd\|note\|references\|seealso\|setClass\|slot\|source\|title\|usage\)"
-  syn match rOKeyword contained "@\(family\|template\|templateVar\|description\|details\|inheritParams\|field\)"
+  " rd.R
+  syn match rOTag contained "@aliases"
+  syn match rOTag contained "@author"
+  syn match rOTag contained "@backref"
+  syn match rOTag contained "@concept"
+  syn match rOTag contained "@describeIn"
+  syn match rOTag contained "@description"
+  syn match rOTag contained "@details"
+  syn match rOTag contained "@docType"
+  syn match rOTag contained "@encoding"
+  syn match rOTag contained "@evalRd"
+  syn match rOTag contained "@example"
+  syn match rOTag contained "@examples"
+  syn match rOTag contained "@family"
+  syn match rOTag contained "@field"
+  syn match rOTag contained "@format"
+  syn match rOTag contained "@inherit"
+  syn match rOTag contained "@inheritParams"
+  syn match rOTag contained "@inheritDotParams"
+  syn match rOTag contained "@inheritSection"
+  syn match rOTag contained "@keywords"
+  syn match rOTag contained "@method"
+  syn match rOTag contained "@name"
+  syn match rOTag contained "@md"
+  syn match rOTag contained "@noMd"
+  syn match rOTag contained "@noRd"
+  syn match rOTag contained "@note"
+  syn match rOTag contained "@param"
+  syn match rOTag contained "@rdname"
+  syn match rOTag contained "@rawRd"
+  syn match rOTag contained "@references"
+  syn match rOTag contained "@return"
+  syn match rOTag contained "@section"
+  syn match rOTag contained "@seealso"
+  syn match rOTag contained "@slot"
+  syn match rOTag contained "@source"
+  syn match rOTag contained "@template"
+  syn match rOTag contained "@templateVar"
+  syn match rOTag contained "@title"
+  syn match rOTag contained "@usage"
+  " namespace.R
+  syn match rOTag contained "@export"
+  syn match rOTag contained "@exportClass"
+  syn match rOTag contained "@exportMethod"
+  syn match rOTag contained "@exportPattern"
+  syn match rOTag contained "@import"
+  syn match rOTag contained "@importClassesFrom"
+  syn match rOTag contained "@importFrom"
+  syn match rOTag contained "@importMethodsFrom"
+  syn match rOTag contained "@rawNamespace"
+  syn match rOTag contained "@S3method"
+  syn match rOTag contained "@useDynLib"
+  " other
+  syn match rOTag contained "@include"
 endif
 
 
@@ -168,12 +267,28 @@ syn match rBraceError "[)}]" contained
 syn match rCurlyError "[)\]]" contained
 syn match rParenError "[\]}]" contained
 
-if !exists("g:R_hi_fun")
-  let g:R_hi_fun = 1
+" Use Nvim-R to highlight functions dynamically if it is installed
+if !exists("g:r_syntax_fun_pattern")
+  let s:ff = split(substitute(globpath(&rtp, "R/functions.vim"), "functions.vim", "", "g"), "\n")
+  if len(s:ff) > 0
+    let g:r_syntax_fun_pattern = 0
+  else
+    let g:r_syntax_fun_pattern = 1
+  endif
 endif
-if g:R_hi_fun
-  " Nvim-R:
-  runtime R/functions.vim
+
+" Only use Nvim-R to highlight functions if they should not be highlighted
+" according to a generic pattern
+if g:r_syntax_fun_pattern == 1
+  syn match rFunction '[0-9a-zA-Z_\.]\+\s*\ze('
+else
+  if !exists("g:R_hi_fun")
+    let g:R_hi_fun = 1
+  endif
+  if g:R_hi_fun
+    " Nvim-R:
+    runtime R/functions.vim
+  endif
 endif
 
 syn match rDollar display contained "\$"
@@ -205,8 +320,8 @@ if &filetype == "rhelp"
   syn match rhSection "\\dontrun\>"
 endif
 
-if exists("r_syn_minlines")
-  exe "syn sync minlines=" . r_syn_minlines
+if exists("r_syntax_minlines")
+  exe "syn sync minlines=" . r_syntax_minlines
 else
   syn sync minlines=40
 endif
@@ -243,15 +358,17 @@ hi def link rStatement   Statement
 hi def link rString      String
 hi def link rStrError    Error
 hi def link rType        Type
-if g:r_hl_roxygen
-  hi def link rOKeyword    Title
-  hi def link rOBlock      Comment
+if g:r_syntax_hl_roxygen
+  hi def link rOTitleTag   Operator
+  hi def link rOTag        Operator
+  hi def link rOTitleBlock Title
+  hi def link rOBlock         Comment
+  hi def link rOBlockNoTitle  Comment
   hi def link rOTitle      Title
   hi def link rOCommentKey Comment
   hi def link rOExamples   SpecialComment
 endif
 
-
 let b:current_syntax="r"
 
 " vim: ts=8 sw=2