diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 02:44:24 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 02:44:24 +0000 |
commit | 8baab3c8d7a6f22888bd581cd5c6098fd2e4b5a8 (patch) | |
tree | 3537e168b860f2742f6029d70501b5ed7d15d345 /runtime/syntax/cabal.vim | |
parent | Initial commit. (diff) | |
download | vim-8baab3c8d7a6f22888bd581cd5c6098fd2e4b5a8.tar.xz vim-8baab3c8d7a6f22888bd581cd5c6098fd2e4b5a8.zip |
Adding upstream version 2:8.1.0875.upstream/2%8.1.0875upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'runtime/syntax/cabal.vim')
-rw-r--r-- | runtime/syntax/cabal.vim | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/runtime/syntax/cabal.vim b/runtime/syntax/cabal.vim new file mode 100644 index 0000000..8af47d4 --- /dev/null +++ b/runtime/syntax/cabal.vim @@ -0,0 +1,241 @@ +" 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 |