xref: /vim-8.2.3635/runtime/syntax/cabal.vim (revision 23515b4e)
100a927d6SBram Moolenaar" Vim syntax file
200a927d6SBram Moolenaar" Language:     Haskell Cabal Build file
37c63fbc4SBram Moolenaar" Author:	Vincent Berthoux <[email protected]>
47c63fbc4SBram Moolenaar" Maintainer:   Marcin Szamotulski <[email protected]>
57c63fbc4SBram Moolenaar" Previous Maintainer:	Vincent Berthoux <[email protected]>
600a927d6SBram Moolenaar" File Types:   .cabal
7*23515b4eSBram Moolenaar" Last Change:  21 Nov 2020
87c63fbc4SBram Moolenaar" v1.5: Incorporated changes from
97c63fbc4SBram Moolenaar"       https://github.com/sdiehl/haskell-vim-proto/blob/master/vim/syntax/cabal.vim
107c63fbc4SBram Moolenaar"       Use `syn keyword` instead of `syn match`.
117c63fbc4SBram Moolenaar"       Added cabalStatementRegion to limit matches of keywords, which fixes
127c63fbc4SBram Moolenaar"       the highlighting of description's value.
137c63fbc4SBram Moolenaar"       Added cabalVersionRegion to limit the scope of cabalVersionOperator
147c63fbc4SBram Moolenaar"       and cabalVersion matches.
157c63fbc4SBram Moolenaar"       Added cabalLanguage keyword.
167c63fbc4SBram Moolenaar"       Added calbalTitle, cabalAuthor and cabalMaintainer syntax groups.
177c63fbc4SBram Moolenaar"       Added ! and ^>= operators (calbal 2.0)
187c63fbc4SBram Moolenaar"       Added build-type keywords
197c63fbc4SBram Moolenaar" v1.4: Add benchmark support, thanks to Simon Meier
2000a927d6SBram Moolenaar" v1.3: Updated to the last version of cabal
2100a927d6SBram Moolenaar"       Added more highlighting for cabal function, true/false
2200a927d6SBram Moolenaar"       and version number. Also added missing comment highlighting.
2300a927d6SBram Moolenaar"       Cabal known compiler are highlighted too.
2400a927d6SBram Moolenaar"
2500a927d6SBram Moolenaar" V1.2: Added cpp-options which was missing. Feature implemented
2600a927d6SBram Moolenaar"       by GHC, found with a GHC warning, but undocumented.
2700a927d6SBram Moolenaar"       Whatever...
2800a927d6SBram Moolenaar"
2900a927d6SBram Moolenaar" v1.1: Fixed operator problems and added ftdetect file
3000a927d6SBram Moolenaar"       (thanks to Sebastian Schwarz)
3100a927d6SBram Moolenaar"
3200a927d6SBram Moolenaar" v1.0: Cabal syntax in vimball format
3300a927d6SBram Moolenaar"       (thanks to Magnus Therning)
3400a927d6SBram Moolenaar
3589bcfda6SBram Moolenaar" quit when a syntax file was already loaded
3689bcfda6SBram Moolenaarif exists("b:current_syntax")
3700a927d6SBram Moolenaar  finish
3800a927d6SBram Moolenaarendif
3900a927d6SBram Moolenaar
407c63fbc4SBram Moolenaar" this file uses line continuation
417c63fbc4SBram Moolenaarlet s:cpo_save = &cpo
427c63fbc4SBram Moolenaarset cpo&vim
437c63fbc4SBram Moolenaar
447c63fbc4SBram Moolenaar" set iskeyword for this syntax script
457c63fbc4SBram Moolenaarsyn iskeyword @,48-57,192-255,-
467c63fbc4SBram Moolenaar
477c63fbc4SBram Moolenaar" Case sensitive matches
487c63fbc4SBram Moolenaarsyn case match
4900a927d6SBram Moolenaar
5000a927d6SBram Moolenaarsyn keyword cabalConditional	if else
5100a927d6SBram Moolenaarsyn keyword cabalFunction	os arche impl flag
5200a927d6SBram Moolenaarsyn match cabalComment		/--.*$/
5300a927d6SBram Moolenaar
547c63fbc4SBram Moolenaar" Case insensitive matches
557c63fbc4SBram Moolenaarsyn case ignore
5600a927d6SBram Moolenaar
577c63fbc4SBram Moolenaarsyn keyword cabalCategory contained
587c63fbc4SBram Moolenaar	\ executable
597c63fbc4SBram Moolenaar	\ library
607c63fbc4SBram Moolenaar	\ benchmark
617c63fbc4SBram Moolenaar	\ test-suite
627c63fbc4SBram Moolenaar	\ source-repository
637c63fbc4SBram Moolenaar	\ flag
647c63fbc4SBram Moolenaar	\ custom-setup
654f4d51a9SBram Moolenaar	\ common
667c63fbc4SBram Moolenaarsyn match cabalCategoryTitle contained /[^{]*\ze{\?/
677c63fbc4SBram Moolenaarsyn match cabalCategoryRegion
687c63fbc4SBram Moolenaar	\ contains=cabalCategory,cabalCategoryTitle
697c63fbc4SBram Moolenaar	\ nextgroup=cabalCategory skipwhite
704f4d51a9SBram Moolenaar	\ /^\c\s*\(contained\|executable\|library\|benchmark\|test-suite\|source-repository\|flag\|custom-setup\|common\)\+\s*\%(.*$\|$\)/
717c63fbc4SBram Moolenaarsyn keyword cabalTruth true false
7200a927d6SBram Moolenaar
737c63fbc4SBram Moolenaar" cabalStatementRegion which limits the scope of cabalStatement keywords, this
747c63fbc4SBram Moolenaar" way they are not highlighted in description.
757c63fbc4SBram Moolenaarsyn region cabalStatementRegion start=+^\s*\(--\)\@<!\k\+\s*:+ end=+:+
767c63fbc4SBram Moolenaarsyn keyword cabalStatement contained containedin=cabalStatementRegion
777c63fbc4SBram Moolenaar	\ default-language
787c63fbc4SBram Moolenaar	\ default-extensions
797c63fbc4SBram Moolenaar	\ author
804f4d51a9SBram Moolenaar        \ autogen-modules
81*23515b4eSBram Moolenaar        \ asm-sources
82*23515b4eSBram Moolenaar        \ asm-options
837c63fbc4SBram Moolenaar	\ branch
847c63fbc4SBram Moolenaar	\ bug-reports
857c63fbc4SBram Moolenaar	\ build-depends
867c63fbc4SBram Moolenaar	\ build-tools
87*23515b4eSBram Moolenaar        \ build-tools-depends
887c63fbc4SBram Moolenaar	\ build-type
897c63fbc4SBram Moolenaar	\ buildable
907c63fbc4SBram Moolenaar	\ c-sources
917c63fbc4SBram Moolenaar	\ cabal-version
927c63fbc4SBram Moolenaar	\ category
937c63fbc4SBram Moolenaar	\ cc-options
947c63fbc4SBram Moolenaar	\ copyright
95*23515b4eSBram Moolenaar        \ cmm-sources
96*23515b4eSBram Moolenaar        \ cmm-options
977c63fbc4SBram Moolenaar	\ cpp-options
98*23515b4eSBram Moolenaar        \ cxx-sources
997c63fbc4SBram Moolenaar	\ data-dir
1007c63fbc4SBram Moolenaar	\ data-files
1017c63fbc4SBram Moolenaar	\ default
102*23515b4eSBram Moolenaar        \ default-extensions
1037c63fbc4SBram Moolenaar	\ description
1047c63fbc4SBram Moolenaar	\ executable
1057c63fbc4SBram Moolenaar	\ exposed-modules
1067c63fbc4SBram Moolenaar	\ exposed
1077c63fbc4SBram Moolenaar	\ extensions
108*23515b4eSBram Moolenaar        \ extra-bundled-libraries
1097c63fbc4SBram Moolenaar	\ extra-doc-files
110*23515b4eSBram Moolenaar	\ extra-dynamic-library-flavours
111*23515b4eSBram Moolenaar        \ extra-framework-dirs
112*23515b4eSBram Moolenaar        \ extra-ghci-libraries
1137c63fbc4SBram Moolenaar	\ extra-lib-dirs
1147c63fbc4SBram Moolenaar	\ extra-libraries
115*23515b4eSBram Moolenaar	\ extra-library-flavours
1167c63fbc4SBram Moolenaar	\ extra-source-files
117*23515b4eSBram Moolenaar	\ extra-tmp-files
1187c63fbc4SBram Moolenaar	\ for example
1197c63fbc4SBram Moolenaar	\ frameworks
1207c63fbc4SBram Moolenaar	\ ghc-options
1217c63fbc4SBram Moolenaar	\ ghc-prof-options
1227c63fbc4SBram Moolenaar	\ ghc-shared-options
123*23515b4eSBram Moolenaar        \ ghcjs-options
124*23515b4eSBram Moolenaar        \ ghcjs-prof-options
125*23515b4eSBram Moolenaar        \ ghcjs-shared-options
1267c63fbc4SBram Moolenaar	\ homepage
127*23515b4eSBram Moolenaar        \ hs-source-dir
1287c63fbc4SBram Moolenaar	\ hs-source-dirs
1297c63fbc4SBram Moolenaar	\ hugs-options
1304f4d51a9SBram Moolenaar	\ import
1317c63fbc4SBram Moolenaar	\ include-dirs
1327c63fbc4SBram Moolenaar	\ includes
1337c63fbc4SBram Moolenaar	\ install-includes
134*23515b4eSBram Moolenaar        \ js-sources
1357c63fbc4SBram Moolenaar	\ ld-options
1367c63fbc4SBram Moolenaar	\ license
1377c63fbc4SBram Moolenaar	\ license-file
1387c63fbc4SBram Moolenaar	\ location
1397c63fbc4SBram Moolenaar	\ main-is
1407c63fbc4SBram Moolenaar	\ maintainer
1417c63fbc4SBram Moolenaar	\ manual
142*23515b4eSBram Moolenaar        \ mixins
1437c63fbc4SBram Moolenaar	\ module
1447c63fbc4SBram Moolenaar	\ name
1457c63fbc4SBram Moolenaar	\ nhc98-options
1467c63fbc4SBram Moolenaar	\ other-extensions
147*23515b4eSBram Moolenaar        \ other-language
148*23515b4eSBram Moolenaar        \ other-languages
1497c63fbc4SBram Moolenaar	\ other-modules
1507c63fbc4SBram Moolenaar	\ package-url
1517c63fbc4SBram Moolenaar	\ pkgconfig-depends
1527c63fbc4SBram Moolenaar	\ setup-depends
1537c63fbc4SBram Moolenaar	\ stability
1547c63fbc4SBram Moolenaar	\ subdir
1557c63fbc4SBram Moolenaar	\ synopsis
1567c63fbc4SBram Moolenaar	\ tag
1577c63fbc4SBram Moolenaar	\ tested-with
1587c63fbc4SBram Moolenaar	\ type
1597c63fbc4SBram Moolenaar	\ version
1607c63fbc4SBram Moolenaar	\ virtual-modules
16100a927d6SBram Moolenaar
1627c63fbc4SBram Moolenaar" operators and version operators
1637c63fbc4SBram Moolenaarsyn match cabalOperator /&&\|||\|!/
1647c63fbc4SBram Moolenaarsyn match cabalVersionOperator contained
1657c63fbc4SBram Moolenaar	\ /!\|==\|\^\?>=\|<=\|<\|>/
1667c63fbc4SBram Moolenaar" match version: `[%]\@<!` is to exclude `%20` in http addresses.
1677c63fbc4SBram Moolenaarsyn match cabalVersion contained
1687c63fbc4SBram Moolenaar	\ /[%$_-]\@<!\<\d\+\%(\.\d\+\)*\%(\.\*\)\?\>/
1697c63fbc4SBram Moolenaar" cabalVersionRegion which limits the scope of cabalVersion pattern.
1707c63fbc4SBram Moolenaarsyn match cabalVersionRegionA
1717c63fbc4SBram Moolenaar	\ contains=cabalVersionOperator,cabalVersion
1727c63fbc4SBram Moolenaar	\ keepend
1737c63fbc4SBram Moolenaar	\ /\%(==\|\^\?>=\|<=\|<\|>\)\s*\d\+\%(\.\d\+\)*\%(\.\*\)\?\>/
1747c63fbc4SBram Moolenaar" version inside `version: ...`
1757c63fbc4SBram Moolenaarsyn match cabalVersionRegionB
1767c63fbc4SBram Moolenaar	\ contains=cabalStatementRegion,cabalVersionOperator,cabalVersion
1777c63fbc4SBram Moolenaar	\ /^\s*\%(cabal-\)\?version\s*:.*$/
1787c63fbc4SBram Moolenaar
1797c63fbc4SBram Moolenaarsyn keyword cabalLanguage Haskell98 Haskell2010
1807c63fbc4SBram Moolenaar
1817c63fbc4SBram Moolenaar" title region
1827c63fbc4SBram Moolenaarsyn match cabalName contained /:\@<=.*/
1837c63fbc4SBram Moolenaarsyn match cabalNameRegion
1847c63fbc4SBram Moolenaar	\ contains=cabalStatementRegion,cabalName
1857c63fbc4SBram Moolenaar	\ nextgroup=cabalStatementRegion
1867c63fbc4SBram Moolenaar	\ oneline
1877c63fbc4SBram Moolenaar	\ /^\c\s*name\s*:.*$/
1887c63fbc4SBram Moolenaar
1897c63fbc4SBram Moolenaar" author region
1907c63fbc4SBram Moolenaarsyn match cabalAuthor contained /:\@<=.*/
1917c63fbc4SBram Moolenaarsyn match cabalAuthorRegion
1927c63fbc4SBram Moolenaar	\ contains=cabalStatementRegion,cabalStatement,cabalAuthor
1937c63fbc4SBram Moolenaar	\ nextgroup=cabalStatementRegion
1947c63fbc4SBram Moolenaar	\ oneline
1957c63fbc4SBram Moolenaar	\ /^\c\s*author\s*:.*$/
1967c63fbc4SBram Moolenaar
1977c63fbc4SBram Moolenaar" maintainer region
1987c63fbc4SBram Moolenaarsyn match cabalMaintainer contained /:\@<=.*/
1997c63fbc4SBram Moolenaarsyn match cabalMaintainerRegion
2007c63fbc4SBram Moolenaar	\ contains=cabalStatementRegion,cabalStatement,cabalMaintainer
2017c63fbc4SBram Moolenaar	\ nextgroup=cabalStatementRegion
2027c63fbc4SBram Moolenaar	\ oneline
2037c63fbc4SBram Moolenaar	\ /^\c\s*maintainer\s*:.*$/
2047c63fbc4SBram Moolenaar
2057c63fbc4SBram Moolenaar" license region
2067c63fbc4SBram Moolenaarsyn match cabalLicense contained /:\@<=.*/
2077c63fbc4SBram Moolenaarsyn match cabalLicenseRegion
2087c63fbc4SBram Moolenaar	\ contains=cabalStatementRegion,cabalStatement,cabalLicense
2097c63fbc4SBram Moolenaar	\ nextgroup=cabalStatementRegion
2107c63fbc4SBram Moolenaar	\ oneline
2117c63fbc4SBram Moolenaar	\ /^\c\s*license\s*:.*$/
2127c63fbc4SBram Moolenaar
2137c63fbc4SBram Moolenaar" license-file region
2147c63fbc4SBram Moolenaarsyn match cabalLicenseFile contained /:\@<=.*/
2157c63fbc4SBram Moolenaarsyn match cabalLicenseFileRegion
2167c63fbc4SBram Moolenaar	\ contains=cabalStatementRegion,cabalStatement,cabalLicenseFile
2177c63fbc4SBram Moolenaar	\ nextgroup=cabalStatementRegion
2187c63fbc4SBram Moolenaar	\ oneline
2197c63fbc4SBram Moolenaar	\ /^\c\s*license-file\s*:.*$/
2207c63fbc4SBram Moolenaar
2217c63fbc4SBram Moolenaar" tested-with region with compilers and versions
2227c63fbc4SBram Moolenaarsyn keyword cabalCompiler contained ghc nhc yhc hugs hbc helium jhc lhc
2237c63fbc4SBram Moolenaarsyn match cabalTestedWithRegion
2247c63fbc4SBram Moolenaar	\ contains=cabalStatementRegion,cabalStatement,cabalCompiler,cabalVersionRegionA
2257c63fbc4SBram Moolenaar	\ nextgroup=cabalStatementRegion
2267c63fbc4SBram Moolenaar	\ oneline
2277c63fbc4SBram Moolenaar	\ /^\c\s*tested-with\s*:.*$/
2287c63fbc4SBram Moolenaar
2297c63fbc4SBram Moolenaar" build type keywords
2307c63fbc4SBram Moolenaarsyn keyword cabalBuildType contained
2317c63fbc4SBram Moolenaar	\ simple custom configure
2327c63fbc4SBram Moolenaarsyn match cabalBuildTypeRegion
2337c63fbc4SBram Moolenaar	\ contains=cabalStatementRegion,cabalStatement,cabalBuildType
2347c63fbc4SBram Moolenaar	\ nextgroup=cabalStatementRegion
2357c63fbc4SBram Moolenaar	\ /^\c\s*build-type\s*:.*$/
23600a927d6SBram Moolenaar
23700a927d6SBram Moolenaar" Define the default highlighting.
23889bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
2397c63fbc4SBram Moolenaarhi def link cabalName	      Title
2407c63fbc4SBram Moolenaarhi def link cabalAuthor	      Normal
2417c63fbc4SBram Moolenaarhi def link cabalMaintainer   Normal
2427c63fbc4SBram Moolenaarhi def link cabalCategoryTitle Title
2437c63fbc4SBram Moolenaarhi def link cabalLicense      Normal
2447c63fbc4SBram Moolenaarhi def link cabalLicenseFile  Normal
2457c63fbc4SBram Moolenaarhi def link cabalBuildType    Keyword
246f37506f6SBram Moolenaarhi def link cabalVersion      Number
247f37506f6SBram Moolenaarhi def link cabalTruth        Boolean
248f37506f6SBram Moolenaarhi def link cabalComment      Comment
249f37506f6SBram Moolenaarhi def link cabalStatement    Statement
2507c63fbc4SBram Moolenaarhi def link cabalLanguage     Type
251f37506f6SBram Moolenaarhi def link cabalCategory     Type
252f37506f6SBram Moolenaarhi def link cabalFunction     Function
253f37506f6SBram Moolenaarhi def link cabalConditional  Conditional
254f37506f6SBram Moolenaarhi def link cabalOperator     Operator
2557c63fbc4SBram Moolenaarhi def link cabalVersionOperator Operator
256f37506f6SBram Moolenaarhi def link cabalCompiler     Constant
25700a927d6SBram Moolenaar
25800a927d6SBram Moolenaarlet b:current_syntax = "cabal"
25900a927d6SBram Moolenaar
2607c63fbc4SBram Moolenaarlet &cpo = s:cpo_save
2617c63fbc4SBram Moolenaarunlet! s:cpo_save
2627c63fbc4SBram Moolenaar
26300a927d6SBram Moolenaar" vim: ts=8
264