123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- " Vim syntax file
- " 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.
- " Cabal known compiler are highlighted too.
- "
- " V1.2: Added cpp-options which was missing. Feature implemented
- " by GHC, found with a GHC warning, but undocumented.
- " Whatever...
- "
- " v1.1: Fixed operator problems and added ftdetect file
- " (thanks to Sebastian Schwarz)
- "
- " v1.0: Cabal syntax in vimball format
- " (thanks to Magnus Therning)
- " quit when a syntax file was already loaded
- if exists("b:current_syntax")
- finish
- endif
- " 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 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
|