summaryrefslogtreecommitdiff
path: root/runtime/syntax
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-05-17 13:15:23 +0200
committerBram Moolenaar <Bram@vim.org>2018-05-17 13:15:23 +0200
commit7c63fbc46e218cad266641a743a6c1353c2f00d4 (patch)
treecec7073dadf82926cadedd1e8fa967643cde2baf /runtime/syntax
parent0b39464f69ae8ca9acf6e5bff4435fd0693e22f6 (diff)
downloadvim-git-7c63fbc46e218cad266641a743a6c1353c2f00d4.tar.gz
Updated runtime files.
Diffstat (limited to 'runtime/syntax')
-rw-r--r--runtime/syntax/cabal.vim304
1 files changed, 213 insertions, 91 deletions
diff --git a/runtime/syntax/cabal.vim b/runtime/syntax/cabal.vim
index 6641294a3..8af47d404 100644
--- a/runtime/syntax/cabal.vim
+++ b/runtime/syntax/cabal.vim
@@ -1,8 +1,22 @@
" Vim syntax file
-" Language: Haskell Cabal Build file
-" Maintainer: Vincent Berthoux <twinside@gmail.com>
-" File Types: .cabal
-" Last Change: 2010 May 18
+" Language: Haskell Cabal Build file
+" Author: Vincent Berthoux <twinside@gmail.com>
+" Maintainer: Marcin Szamotulski <profunctor@pm.me>
+" Previous Maintainer: Vincent Berthoux <twinside@gmail.com>
+" File Types: .cabal
+" Last Change: 15 May 2018
+" v1.5: Incorporated changes from
+" https://github.com/sdiehl/haskell-vim-proto/blob/master/vim/syntax/cabal.vim
+" Use `syn keyword` instead of `syn match`.
+" Added cabalStatementRegion to limit matches of keywords, which fixes
+" the highlighting of description's value.
+" Added cabalVersionRegion to limit the scope of cabalVersionOperator
+" and cabalVersion matches.
+" Added cabalLanguage keyword.
+" Added calbalTitle, cabalAuthor and cabalMaintainer syntax groups.
+" Added ! and ^>= operators (calbal 2.0)
+" Added build-type keywords
+" v1.4: Add benchmark support, thanks to Simon Meier
" v1.3: Updated to the last version of cabal
" Added more highlighting for cabal function, true/false
" and version number. Also added missing comment highlighting.
@@ -23,97 +37,205 @@ if exists("b:current_syntax")
finish
endif
-syn keyword cabalCategory Library library Executable executable Flag flag
-syn keyword cabalCategory source-repository Source-Repository
-
-syn keyword cabalConditional if else
-syn match cabalOperator "&&\|||\|!\|==\|>=\|<="
-syn keyword cabalFunction os arche impl flag
-syn match cabalComment /--.*$/
-syn match cabalVersion "\d\+\(.\(\d\)\+\)\+"
-
-syn match cabalTruth "\ctrue"
-syn match cabalTruth "\cfalse"
-
-syn match cabalCompiler "\cghc"
-syn match cabalCompiler "\cnhc"
-syn match cabalCompiler "\cyhc"
-syn match cabalCompiler "\chugs"
-syn match cabalCompiler "\chbc"
-syn match cabalCompiler "\chelium"
-syn match cabalCompiler "\cjhc"
-syn match cabalCompiler "\clhc"
-
-
-syn match cabalStatement "\cauthor"
-syn match cabalStatement "\cbranch"
-syn match cabalStatement "\cbug-reports"
-syn match cabalStatement "\cbuild-depends"
-syn match cabalStatement "\cbuild-tools"
-syn match cabalStatement "\cbuild-type"
-syn match cabalStatement "\cbuildable"
-syn match cabalStatement "\cc-sources"
-syn match cabalStatement "\ccabal-version"
-syn match cabalStatement "\ccategory"
-syn match cabalStatement "\ccc-options"
-syn match cabalStatement "\ccopyright"
-syn match cabalStatement "\ccpp-options"
-syn match cabalStatement "\cdata-dir"
-syn match cabalStatement "\cdata-files"
-syn match cabalStatement "\cdefault"
-syn match cabalStatement "\cdescription"
-syn match cabalStatement "\cexecutable"
-syn match cabalStatement "\cexposed-modules"
-syn match cabalStatement "\cexposed"
-syn match cabalStatement "\cextensions"
-syn match cabalStatement "\cextra-lib-dirs"
-syn match cabalStatement "\cextra-libraries"
-syn match cabalStatement "\cextra-source-files"
-syn match cabalStatement "\cextra-tmp-files"
-syn match cabalStatement "\cfor example"
-syn match cabalStatement "\cframeworks"
-syn match cabalStatement "\cghc-options"
-syn match cabalStatement "\cghc-prof-options"
-syn match cabalStatement "\cghc-shared-options"
-syn match cabalStatement "\chomepage"
-syn match cabalStatement "\chs-source-dirs"
-syn match cabalStatement "\chugs-options"
-syn match cabalStatement "\cinclude-dirs"
-syn match cabalStatement "\cincludes"
-syn match cabalStatement "\cinstall-includes"
-syn match cabalStatement "\cld-options"
-syn match cabalStatement "\clicense-file"
-syn match cabalStatement "\clicense"
-syn match cabalStatement "\clocation"
-syn match cabalStatement "\cmain-is"
-syn match cabalStatement "\cmaintainer"
-syn match cabalStatement "\cmodule"
-syn match cabalStatement "\cname"
-syn match cabalStatement "\cnhc98-options"
-syn match cabalStatement "\cother-modules"
-syn match cabalStatement "\cpackage-url"
-syn match cabalStatement "\cpkgconfig-depends"
-syn match cabalStatement "\cstability"
-syn match cabalStatement "\csubdir"
-syn match cabalStatement "\csynopsis"
-syn match cabalStatement "\ctag"
-syn match cabalStatement "\ctested-with"
-syn match cabalStatement "\ctype"
-syn match cabalStatement "\cversion"
+" this file uses line continuation
+let s:cpo_save = &cpo
+set cpo&vim
+
+" set iskeyword for this syntax script
+syn iskeyword @,48-57,192-255,-
+
+" Case sensitive matches
+syn case match
+
+syn keyword cabalConditional if else
+syn keyword cabalFunction os arche impl flag
+syn match cabalComment /--.*$/
+
+" Case insensitive matches
+syn case ignore
+
+syn keyword cabalCategory contained
+ \ executable
+ \ library
+ \ benchmark
+ \ test-suite
+ \ source-repository
+ \ flag
+ \ custom-setup
+syn match cabalCategoryTitle contained /[^{]*\ze{\?/
+syn match cabalCategoryRegion
+ \ contains=cabalCategory,cabalCategoryTitle
+ \ nextgroup=cabalCategory skipwhite
+ \ /^\c\s*\(contained\|executable\|library\|benchmark\|test-suite\|source-repository\|flag\|custom-setup\)\+\s*\%(.*$\|$\)/
+syn keyword cabalTruth true false
+
+" cabalStatementRegion which limits the scope of cabalStatement keywords, this
+" way they are not highlighted in description.
+syn region cabalStatementRegion start=+^\s*\(--\)\@<!\k\+\s*:+ end=+:+
+syn keyword cabalStatement contained containedin=cabalStatementRegion
+ \ default-language
+ \ default-extensions
+ \ author
+ \ branch
+ \ bug-reports
+ \ build-depends
+ \ build-tools
+ \ build-type
+ \ buildable
+ \ c-sources
+ \ cabal-version
+ \ category
+ \ cc-options
+ \ copyright
+ \ cpp-options
+ \ data-dir
+ \ data-files
+ \ default
+ \ description
+ \ executable
+ \ exposed-modules
+ \ exposed
+ \ extensions
+ \ extra-tmp-files
+ \ extra-doc-files
+ \ extra-lib-dirs
+ \ extra-libraries
+ \ extra-source-files
+ \ exta-tmp-files
+ \ for example
+ \ frameworks
+ \ ghc-options
+ \ ghc-prof-options
+ \ ghc-shared-options
+ \ homepage
+ \ hs-source-dirs
+ \ hugs-options
+ \ include-dirs
+ \ includes
+ \ install-includes
+ \ ld-options
+ \ license
+ \ license-file
+ \ location
+ \ main-is
+ \ maintainer
+ \ manual
+ \ module
+ \ name
+ \ nhc98-options
+ \ other-extensions
+ \ other-modules
+ \ package-url
+ \ pkgconfig-depends
+ \ setup-depends
+ \ stability
+ \ subdir
+ \ synopsis
+ \ tag
+ \ tested-with
+ \ type
+ \ version
+ \ virtual-modules
+
+" operators and version operators
+syn match cabalOperator /&&\|||\|!/
+syn match cabalVersionOperator contained
+ \ /!\|==\|\^\?>=\|<=\|<\|>/
+" match version: `[%]\@<!` is to exclude `%20` in http addresses.
+syn match cabalVersion contained
+ \ /[%$_-]\@<!\<\d\+\%(\.\d\+\)*\%(\.\*\)\?\>/
+" cabalVersionRegion which limits the scope of cabalVersion pattern.
+syn match cabalVersionRegionA
+ \ contains=cabalVersionOperator,cabalVersion
+ \ keepend
+ \ /\%(==\|\^\?>=\|<=\|<\|>\)\s*\d\+\%(\.\d\+\)*\%(\.\*\)\?\>/
+" version inside `version: ...`
+syn match cabalVersionRegionB
+ \ contains=cabalStatementRegion,cabalVersionOperator,cabalVersion
+ \ /^\s*\%(cabal-\)\?version\s*:.*$/
+
+syn keyword cabalLanguage Haskell98 Haskell2010
+
+" title region
+syn match cabalName contained /:\@<=.*/
+syn match cabalNameRegion
+ \ contains=cabalStatementRegion,cabalName
+ \ nextgroup=cabalStatementRegion
+ \ oneline
+ \ /^\c\s*name\s*:.*$/
+
+" author region
+syn match cabalAuthor contained /:\@<=.*/
+syn match cabalAuthorRegion
+ \ contains=cabalStatementRegion,cabalStatement,cabalAuthor
+ \ nextgroup=cabalStatementRegion
+ \ oneline
+ \ /^\c\s*author\s*:.*$/
+
+" maintainer region
+syn match cabalMaintainer contained /:\@<=.*/
+syn match cabalMaintainerRegion
+ \ contains=cabalStatementRegion,cabalStatement,cabalMaintainer
+ \ nextgroup=cabalStatementRegion
+ \ oneline
+ \ /^\c\s*maintainer\s*:.*$/
+
+" license region
+syn match cabalLicense contained /:\@<=.*/
+syn match cabalLicenseRegion
+ \ contains=cabalStatementRegion,cabalStatement,cabalLicense
+ \ nextgroup=cabalStatementRegion
+ \ oneline
+ \ /^\c\s*license\s*:.*$/
+
+" license-file region
+syn match cabalLicenseFile contained /:\@<=.*/
+syn match cabalLicenseFileRegion
+ \ contains=cabalStatementRegion,cabalStatement,cabalLicenseFile
+ \ nextgroup=cabalStatementRegion
+ \ oneline
+ \ /^\c\s*license-file\s*:.*$/
+
+" tested-with region with compilers and versions
+syn keyword cabalCompiler contained ghc nhc yhc hugs hbc helium jhc lhc
+syn match cabalTestedWithRegion
+ \ contains=cabalStatementRegion,cabalStatement,cabalCompiler,cabalVersionRegionA
+ \ nextgroup=cabalStatementRegion
+ \ oneline
+ \ /^\c\s*tested-with\s*:.*$/
+
+" build type keywords
+syn keyword cabalBuildType contained
+ \ simple custom configure
+syn match cabalBuildTypeRegion
+ \ contains=cabalStatementRegion,cabalStatement,cabalBuildType
+ \ nextgroup=cabalStatementRegion
+ \ /^\c\s*build-type\s*:.*$/
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
-
-hi def link cabalVersion Number
-hi def link cabalTruth Boolean
-hi def link cabalComment Comment
-hi def link cabalStatement Statement
-hi def link cabalCategory Type
-hi def link cabalFunction Function
-hi def link cabalConditional Conditional
-hi def link cabalOperator Operator
-hi def link cabalCompiler Constant
+hi def link cabalName Title
+hi def link cabalAuthor Normal
+hi def link cabalMaintainer Normal
+hi def link cabalCategoryTitle Title
+hi def link cabalLicense Normal
+hi def link cabalLicenseFile Normal
+hi def link cabalBuildType Keyword
+hi def link cabalVersion Number
+hi def link cabalTruth Boolean
+hi def link cabalComment Comment
+hi def link cabalStatement Statement
+hi def link cabalLanguage Type
+hi def link cabalCategory Type
+hi def link cabalFunction Function
+hi def link cabalConditional Conditional
+hi def link cabalOperator Operator
+hi def link cabalVersionOperator Operator
+hi def link cabalCompiler Constant
let b:current_syntax = "cabal"
+let &cpo = s:cpo_save
+unlet! s:cpo_save
+
" vim: ts=8