summaryrefslogtreecommitdiffstats
path: root/syntax/scala.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2013-12-13 01:37:01 +0100
committerAdam Stankiewicz <sheerun@sher.pl>2013-12-13 01:37:01 +0100
commitedd5ee63e66d9ef166034d9ac5bed132f501ecb9 (patch)
treefba293d90821eea5e067c7b5eea3526df0f26254 /syntax/scala.vim
parent8a255002df1f6d02ef7ca9503be1a7d7234acef8 (diff)
downloadvim-polyglot-edd5ee63e66d9ef166034d9ac5bed132f501ecb9.tar.gz
vim-polyglot-edd5ee63e66d9ef166034d9ac5bed132f501ecb9.zip
Updatev1.4.2
Diffstat (limited to 'syntax/scala.vim')
-rw-r--r--syntax/scala.vim264
1 files changed, 88 insertions, 176 deletions
diff --git a/syntax/scala.vim b/syntax/scala.vim
index a6191148..3c43a894 100644
--- a/syntax/scala.vim
+++ b/syntax/scala.vim
@@ -1,192 +1,104 @@
-" Vim syntax file
-" Language : Scala (http://scala-lang.org/)
-" Maintainers: Stefan Matthias Aust, Julien Wetterwald
-" Last Change: 2007 June 13
-
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
-syn case match
-syn sync minlines=50 maxlines=100
-
-" most Scala keywords
-syn keyword scalaKeyword case
-syn keyword scalaKeyword catch
-syn keyword scalaKeyword do
-syn keyword scalaKeyword else
-syn keyword scalaKeyword extends
-syn keyword scalaKeyword final
-syn keyword scalaKeyword finally
-syn keyword scalaKeyword for
-syn keyword scalaKeyword forSome
-syn keyword scalaKeyword if
-syn keyword scalaKeyword match
-syn keyword scalaKeyword new
-syn keyword scalaKeyword null
-syn keyword scalaKeyword require
-syn keyword scalaKeyword return
-syn keyword scalaKeyword super
-syn keyword scalaKeyword this
-syn keyword scalaKeyword throw
-syn keyword scalaKeyword try
-syn keyword scalaKeyword type
-syn keyword scalaKeyword while
-syn keyword scalaKeyword with
-syn keyword scalaKeyword yield
-syn keyword scalaKeywordModifier abstract
-syn keyword scalaKeywordModifier override
-syn keyword scalaKeywordModifier final
-syn keyword scalaKeywordModifier implicit
-syn keyword scalaKeywordModifier lazy
-syn keyword scalaKeywordModifier private
-syn keyword scalaKeywordModifier protected
-syn keyword scalaKeywordModifier sealed
-syn match scalaKeyword "=>"
-syn match scalaKeyword "<-"
-syn match scalaKeyword "\<_\>"
-
-syn match scalaOperator ":\{2,\}" "this is not a type
-
-" package and import statements
-syn keyword scalaPackage package nextgroup=scalaFqn skipwhite
-syn keyword scalaImport import nextgroup=scalaFqn skipwhite
-syn match scalaFqn "\<[._$a-zA-Z0-9,]*" contained nextgroup=scalaFqnSet
-syn region scalaFqnSet start="{" end="}" contained
-
-" boolean literals
-syn keyword scalaBoolean true false
-
-" definitions
-syn keyword scalaDef def nextgroup=scalaDefName skipwhite
-syn keyword scalaVal val nextgroup=scalaValName skipwhite
-syn keyword scalaVar var nextgroup=scalaVarName skipwhite
-syn keyword scalaClass class nextgroup=scalaClassName skipwhite
-syn keyword scalaObject object nextgroup=scalaClassName skipwhite
-syn keyword scalaTrait trait nextgroup=scalaClassName skipwhite
-syn match scalaDefName "[^ =:;([]\+" contained nextgroup=scalaDefSpecializer skipwhite
-syn match scalaValName "[^ =:;([]\+" contained
-syn match scalaVarName "[^ =:;([]\+" contained
-syn match scalaClassName "[^ =:;(\[]\+" contained nextgroup=scalaClassSpecializer skipwhite
-syn region scalaDefSpecializer start="\[" end="\]" contained contains=scalaDefSpecializer
-syn region scalaClassSpecializer start="\[" end="\]" contained contains=scalaClassSpecializer
-syn match scalaBackTick "`[^`]\+`"
-
-" type constructor (actually anything with an uppercase letter)
-syn match scalaConstructor "\<[A-Z][_$a-zA-Z0-9]*\>" nextgroup=scalaConstructorSpecializer
-syn region scalaConstructorSpecializer start="\[" end="\]" contained contains=scalaConstructorSpecializer
-
-" method call
-syn match scalaRoot "\<[a-zA-Z][_$a-zA-Z0-9]*\."me=e-1
-syn match scalaMethodCall "\.[a-z][_$a-zA-Z0-9]*"ms=s+1
-
-" type declarations in val/var/def
-syn match scalaType ":\s*\%(=>\s*\)\?\%([\._$a-zA-Z0-9]\+\|([^)]\{-1,})\)\%(\[[^\]]\{-1,}\]\+\%([^)]*)\]\+\)\?\)\?\%(\s*\%(<:\|>:\|#\|=>\|⇒\)\s*\%([\._$a-zA-Z0-9]\+\|([^)]\{-1,})\)\%(\[[^\]]\{-1,}\]\+\%([^)]*)\]\+\)\?\)*\)*"ms=s+1
-" type declarations in case statements
-syn match scalaCaseType "\(case\s\+[_a-zA-Z0-9]\+\)\@<=:\s*[\._$a-zA-Z0-9]\+\(\[[^:]\{-1,}\]\+\)\?"ms=s+1
-
-" comments
-syn match scalaTodo "[tT][oO][dD][oO]" contained
-syn match scalaLineComment "//.*" contains=scalaTodo
-syn region scalaComment start="/\*" end="\*/" contains=scalaTodo
-syn case ignore
-syn include @scalaHtml syntax/html.vim
-syn case match
-syn region scalaDocComment start="/\*\*" end="\*/" contains=scalaDocTags,scalaTodo,@scalaHtml keepend
-syn region scalaDocTags start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}" contained
-syn match scalaDocTags "@[a-z]\+" contained
-
-" annotations
-syn match scalaAnnotation "@[a-zA-Z]\+"
-
-syn match scalaEmptyString "\"\""
+let b:current_syntax = "scala"
-" multi-line string literals
-syn region scalaMultiLineString start="\"\"\"" end="\"\"\"\"\@!" contains=scalaUnicode
-syn match scalaUnicode "\\u[0-9a-fA-F]\{4}" contained
+syn case match
+syn sync minlines=200 maxlines=1000
+
+syn keyword scalaKeyword catch do else final finally for forSome if
+syn keyword scalaKeyword match return throw try while yield
+syn keyword scalaKeyword class trait object extends with type nextgroup=scalaInstanceDeclaration skipwhite
+syn keyword scalaKeyword case nextgroup=scalaCaseFollowing skipwhite
+syn keyword scalaKeyword val nextgroup=scalaNameDefinition,scalaQuasiQuotes skipwhite
+syn keyword scalaKeyword def var nextgroup=scalaNameDefinition skipwhite
+hi link scalaKeyword Keyword
-" string literals with escapes
-syn region scalaString start="\"[^"]" skip="\\\"" end="\"" contains=scalaStringEscape " TODO end \n or not?
-syn match scalaStringEscape "\\u[0-9a-fA-F]\{4}" contained
-syn match scalaStringEscape "\\[nrfvb\\\"]" contained
+syn match scalaNameDefinition /\<[_A-Za-z0-9$]\+\>/ contained
+syn match scalaNameDefinition /`[^`]\+`/ contained
+hi link scalaNameDefinition Function
-" symbol and character literals
-syn match scalaSymbol "'[_a-zA-Z0-9][_a-zA-Z0-9]*\>"
-syn match scalaChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'"
+syn match scalaInstanceDeclaration /\<[_\.A-Za-z0-9$]\+\>/ contained
+syn match scalaInstanceDeclaration /`[^`]\+`/ contained
+hi link scalaInstanceDeclaration Special
-" number literals
-syn match scalaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
-syn match scalaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
-syn match scalaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
-syn match scalaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
+syn match scalaCaseFollowing /\<[_\.A-Za-z0-9$]*\>/ contained
+syn match scalaCaseFollowing /`[^`]\+`/ contained
+hi link scalaCaseFollowing Special
-" xml literals
-syn match scalaXmlTag "<[a-zA-Z]\_[^>]*/>" contains=scalaXmlQuote,scalaXmlEscape,scalaXmlString
-syn region scalaXmlString start="\"" end="\"" contained
-syn match scalaXmlStart "<[a-zA-Z]\_[^>]*>" contained contains=scalaXmlQuote,scalaXmlEscape,scalaXmlString
-syn region scalaXml start="<\([a-zA-Z]\_[^>]*\_[^/]\|[a-zA-Z]\)>" matchgroup=scalaXmlStart end="</\_[^>]\+>" contains=scalaXmlEscape,scalaXmlQuote,scalaXml,scalaXmlStart,scalaXmlComment
-syn region scalaXmlEscape matchgroup=scalaXmlEscapeSpecial start="{" matchgroup=scalaXmlEscapeSpecial end="}" contained contains=TOP
-syn match scalaXmlQuote "&[^;]\+;" contained
-syn match scalaXmlComment "<!--\_[^>]*-->" contained
+syn keyword scalaKeywordModifier abstract override final implicit lazy private protected sealed null require super
+hi link scalaKeywordModifier Function
-" REPL
-syn match scalaREPLCmdLine "\<scala>\>"
+syn keyword scalaSpecial this true false package import
+syn keyword scalaSpecial new nextgroup=scalaInstanceDeclaration skipwhite
+syn match scalaSpecial "\%(=>\|⇒\|<-\|←\|->\|→\)"
+syn match scalaSpecial /`[^`]*`/ " Backtick literals
+hi link scalaSpecial PreProc
-" map Scala groups to standard groups
-hi link scalaKeyword Keyword
-hi link scalaKeywordModifier Function
-hi link scalaAnnotation Include
-hi link scalaPackage Include
-hi link scalaImport Include
-hi link scalaREPLCmdLine Include
-hi link scalaDocTags Include
-hi link scalaBackTick Include
-hi link scalaBoolean Boolean
-hi link scalaOperator Normal
-hi link scalaNumber Number
-hi link scalaEmptyString String
+syn region scalaString start=/"/ skip=/\\"/ end=/"/
hi link scalaString String
-hi link scalaChar String
-hi link scalaMultiLineString String
-hi link scalaStringEscape Special
-hi link scalaSymbol Special
-hi link scalaUnicode Special
-hi link scalaComment Comment
-hi link scalaLineComment Comment
-hi link scalaDocComment Comment
-hi link scalaTodo Todo
-hi link scalaType Type
-hi link scalaCaseType Type
-hi link scalaTypeSpecializer scalaType
-hi link scalaXml String
-hi link scalaXmlTag Include
-hi link scalaXmlString String
-hi link scalaXmlStart Include
-hi link scalaXmlEscape Normal
-hi link scalaXmlEscapeSpecial Special
-hi link scalaXmlQuote Special
-hi link scalaXmlComment Comment
-hi link scalaDef Keyword
-hi link scalaVar Keyword
-hi link scalaVal Keyword
-hi link scalaClass Keyword
-hi link scalaObject Keyword
-hi link scalaTrait Keyword
-hi link scalaDefName Function
-hi link scalaDefSpecializer Function
-hi link scalaClassName Special
-hi link scalaClassSpecializer Special
-hi link scalaConstructor Special
-hi link scalaConstructorSpecializer scalaConstructor
-let b:current_syntax = "scala"
+syn region scalaSString matchgroup=Special start=/s"/ skip=/\\"/ end=/"/ contains=scalaInterpolation
+syn match scalaInterpolation /\$[a-zA-Z0-9_$]\+/ contained
+syn match scalaInterpolation /\${[^}]\+}/ contained
+hi link scalaSString String
+hi link scalaInterpolation Function
+
+syn region scalaFString matchgroup=Special start=/f"/ skip=/\\"/ end=/"/ contains=scalaInterpolation,scalaFInterpolation
+syn match scalaFInterpolation /\$[a-zA-Z0-9_$]\+%[-A-Za-z0-9\.]\+/ contained
+syn match scalaFInterpolation /\${[^}]\+}%[-A-Za-z0-9\.]\+/ contained
+hi link scalaFString String
+hi link scalaFInterpolation Function
+
+syn region scalaQuasiQuotes matchgroup=Type start=/\<q"/ skip=/\\"/ end=/"/ contains=scalaInterpolation
+syn region scalaQuasiQuotes matchgroup=Type start=/\<[tcp]q"/ skip=/\\"/ end=/"/ contains=scalaInterpolation
+hi link scalaQuasiQuotes String
+
+syn region scalaTripleQuasiQuotes matchgroup=Type start=/\<q"""/ end=/"""/ contains=scalaInterpolation
+syn region scalaTripleQuasiQuotes matchgroup=Type start=/\<[tcp]q"""/ end=/"""/ contains=scalaInterpolation
+hi link scalaTripleQuasiQuotes String
+
+syn region scalaTripleString start=/"""/ end=/"""/
+syn region scalaTripleSString matchgroup=PreProc start=/s"""/ end=/"""/
+syn region scalaTripleFString matchgroup=PreProc start=/f"""/ end=/"""/
+hi link scalaTripleString String
+hi link scalaTripleSString String
+hi link scalaTripleFString String
+
+syn match scalaNumber /\<0[dDfFlL]\?\>/
+syn match scalaNumber /\<[1-9]\d*[dDfFlL]\?\>/
+syn match scalaNumber /\<0[xX][0-9a-fA-F]\+[dDfFlL]\?\>/
+syn match scalaNumber "\%(\<\d\+\.\d*\|\.\d\+\)\%([eE][-+]\=\d\+\)\=[fFdD]\="
+syn match scalaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
+syn match scalaNumber "\<\d\+\%([eE][-+]\=\d\+\)\=[fFdD]\>"
+hi link scalaNumber Number
-" you might like to put these lines in your .vimrc
-"
-" customize colors a little bit (should be a different file)
-" hi scalaNew gui=underline
-" hi scalaMethodCall gui=italic
-" hi scalaValName gui=underline
-" hi scalaVarName gui=underline
+syn region scalaSquareBrackets matchgroup=Type start="\[" end="\]" contains=scalaSpecial,scalaTypeParameter,scalaSquareBrackets,scalaTypeOperator
+syn match scalaTypeAnnotation /\%(:\s*\)\@<=[_\.A-Za-z0-9$]\+/
+syn match scalaTypeParameter /[_\.A-Za-z0-9$]\+/ contained
+syn match scalaTypeOperator /[=:<>]\+/ contained
+hi link scalaTypeAnnotation Type
+hi link scalaTypeParameter Type
+hi link scalaTypeOperator Type
+
+syn region scalaMultilineComment start="/\*" end="\*/" contains=scalaMultilineComment,scalaDocLinks,scalaParameterAnnotation,scalaCommentAnnotation,scalaCommentCodeBlock,@scalaHtml keepend
+syn match scalaCommentAnnotation "@[_A-Za-z0-9$]\+" contained
+syn match scalaParameterAnnotation "@param" nextgroup=scalaParamAnnotationValue skipwhite contained
+syn match scalaParamAnnotationValue /[`_A-Za-z0-9$]\+/ contained
+syn region scalaDocLinks start="\[\[" end="\]\]" contained
+syn region scalaCommentCodeBlock matchgroup=Keyword start="{{{" end="}}}" contained
+hi link scalaMultilineComment Comment
+hi link scalaDocLinks Function
+hi link scalaParameterAnnotation Function
+hi link scalaParamAnnotationValue Keyword
+hi link scalaCommentAnnotation Function
+hi link scalaCommentCodeBlock String
+
+syn match scalaAnnotation /@\<[`_A-Za-z0-9$]\+\>/
+hi link scalaAnnotation PreProc
+
+syn match scalaTrailingComment "//.*$"
+hi link scalaTrailingComment Comment