blob: 5dc1b5f6f5230adf7e4b9df876d6b9d909af83ce [file] [log] [blame] [edit]
" Vim syntax file
" Language: Debian autopkgtest control files
" Maintainer: Debian Vim Maintainers
" Last Change: 2025 Jul 05
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/autopkgtest.vim
"
" Specification of the autopkgtest format is available at:
" https://www.debian.org/doc/debian-policy/autopkgtest.txt
" Standard syntax initialization
if exists('b:current_syntax')
finish
endif
let s:cpo_save = &cpo
set cpo&vim
" Must call this first, because it will clear other settings
syn sync clear
syn sync match autopkgtestSync grouphere NONE '^$'
" Should match case except for the keys of each field
syn case match
syn iskeyword @,48-57,-
" #-Comments
syn match autopkgtestComment "#.*" contains=@Spell
syn match autopkgtestTests contained "[a-z0-9][a-z0-9+.-]\+\%(,\=\s*[a-z0-9][a-z0-9+.-]\+\)*,\="
syn match autopkgtestArbitrary contained "[^#]*"
syn keyword autopkgtestRestrictions contained
\ allow-stderr
\ breaks-testbe
\ build-neede
\ flaky
\ hint-testsuite-trigger
\ isolation-container
\ isolation-machine
\ needs-internet
\ needs-reboot
\ needs-root
\ needs-sudo
\ rw-build-tree
\ skip-foreign-architecture
\ skip-not-installable
\ skippable
\ superficial
syn keyword autopkgtestDeprecatedRestrictions contained needs-recommends
syn match autopkgtestFeatures contained 'test-name=[^, ]*\%([, ]*[^, #]\)*,\='
syn match autopkgtestDepends contained '\%(@builddeps@\|@recommends@\|@\)'
runtime! syntax/shared/debarchitectures.vim
syn keyword autopkgtestArchitecture contained any
exe 'syn keyword autopkgtestArchitecture contained '. join(g:debArchitectureKernelAnyArch)
exe 'syn keyword autopkgtestArchitecture contained '. join(g:debArchitectureAnyKernelArch)
exe 'syn keyword autopkgtestArchitecture contained '. join(g:debArchitectureArchs)
syn case ignore
" Catch-all for the legal fields
syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Tests: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestTests,autopkgtestComment
syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Restrictions: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestRestrictions,autopkgtestDeprecatedRestrictions,autopkgtestComment
syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Features: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestFeatures,autopkgtestComment
syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Depends: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestDepends,autopkgtestComment
syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Classes: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestComment
syn region autopkgtestMultiField matchgroup=autopkgtestKey start="^Architecture: *" skip="^[ \t]" end="^$"me=s-1 end="^[^ \t#]"me=s-1 contains=autopkgtestArchitecture,autopkgtestComment
" Fields for which we do strict syntax checking
syn region autopkgtestStrictField matchgroup=autopkgtestKey start="^Test-Command: *" end="$" end='#'me=s-1 contains=autopkgtestArbitrary,autopkgtestComment oneline
syn region autopkgtestStrictField matchgroup=autopkgtestKey start="^Tests-Directory: *" end="$" end='#'me=s-1 contains=autopkgtestArbitrary,autopkgtestComment oneline
syn match autopkgtestError '^\%(\%(Architecture\|Classes\|Depends\|Features\|Restrictions\|Test-Command\|Tests-Directory\|Tests\)\@![^ #]*:\)'
" Associate our matches and regions with pretty colours
hi def link autopkgtestKey Keyword
hi def link autopkgtestRestrictions Identifier
hi def link autopkgtestFeatures Keyword
hi def link autopkgtestDepends Identifier
hi def link autopkgtestArchitecture Identifier
hi def link autopkgtestStrictField Error
hi def link autopkgtestDeprecatedRestrictions Error
hi def link autopkgtestMultiField Normal
hi def link autopkgtestArbitrary Normal
hi def link autopkgtestTests Normal
hi def link autopkgtestComment Comment
hi def link autopkgtestError Error
let b:current_syntax = 'autopkgtest'
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: ts=8 sw=2