134401ccaSBram Moolenaar" dockerfile.vim - Syntax highlighting for Dockerfiles
209521313SBram Moolenaar" Maintainer:   Honza Pokorny <https://honza.ca>
3*ebdf3c96SBram Moolenaar" Last Change:  2020 Feb 11
434401ccaSBram Moolenaar" License:      BSD
534401ccaSBram Moolenaar
6560979edSBram Moolenaar" https://docs.docker.com/engine/reference/builder/
734401ccaSBram Moolenaar
834401ccaSBram Moolenaarif exists("b:current_syntax")
934401ccaSBram Moolenaar    finish
1034401ccaSBram Moolenaarendif
1134401ccaSBram Moolenaar
12560979edSBram Moolenaarsyntax include @JSON syntax/json.vim
13560979edSBram Moolenaarunlet b:current_syntax
14560979edSBram Moolenaar
15560979edSBram Moolenaarsyntax include @Shell syntax/sh.vim
16560979edSBram Moolenaarunlet b:current_syntax
1734401ccaSBram Moolenaar
1834401ccaSBram Moolenaarsyntax case ignore
19560979edSBram Moolenaarsyntax match dockerfileLinePrefix /\v^\s*(ONBUILD\s+)?\ze\S/ contains=dockerfileKeyword nextgroup=dockerfileInstruction skipwhite
20560979edSBram Moolenaarsyntax region dockerfileFrom matchgroup=dockerfileKeyword start=/\v^\s*(FROM)\ze(\s|$)/ skip=/\v\\\_./ end=/\v((^|\s)AS(\s|$)|$)/ contains=dockerfileOption
2134401ccaSBram Moolenaar
22560979edSBram Moolenaarsyntax keyword dockerfileKeyword contained ADD ARG CMD COPY ENTRYPOINT ENV EXPOSE HEALTHCHECK LABEL MAINTAINER ONBUILD RUN SHELL STOPSIGNAL USER VOLUME WORKDIR
23560979edSBram Moolenaarsyntax match dockerfileOption contained /\v(^|\s)\zs--\S+/
2434401ccaSBram Moolenaar
25*ebdf3c96SBram Moolenaarsyntax match dockerfileInstruction contained /\v<(\S+)>(\s+--\S+)*/             contains=dockerfileKeyword,dockerfileOption skipwhite nextgroup=dockerfileValue
26*ebdf3c96SBram Moolenaarsyntax match dockerfileInstruction contained /\v<(ADD|COPY)>(\s+--\S+)*/        contains=dockerfileKeyword,dockerfileOption skipwhite nextgroup=dockerfileJSON
27*ebdf3c96SBram Moolenaarsyntax match dockerfileInstruction contained /\v<(HEALTHCHECK)>(\s+--\S+)*/     contains=dockerfileKeyword,dockerfileOption skipwhite nextgroup=dockerfileInstruction
28*ebdf3c96SBram Moolenaarsyntax match dockerfileInstruction contained /\v<(CMD|ENTRYPOINT|RUN)>/         contains=dockerfileKeyword skipwhite nextgroup=dockerfileShell
29*ebdf3c96SBram Moolenaarsyntax match dockerfileInstruction contained /\v<(CMD|ENTRYPOINT|RUN)>\ze\s+\[/ contains=dockerfileKeyword skipwhite nextgroup=dockerfileJSON
30*ebdf3c96SBram Moolenaarsyntax match dockerfileInstruction contained /\v<(SHELL|VOLUME)>/               contains=dockerfileKeyword skipwhite nextgroup=dockerfileJSON
3156c860c3SBram Moolenaar
32560979edSBram Moolenaarsyntax region dockerfileString contained start=/\v"/ skip=/\v\\./ end=/\v"/
33560979edSBram Moolenaarsyntax region dockerfileJSON   contained keepend start=/\v\[/ skip=/\v\\\_./ end=/\v$/ contains=@JSON
34560979edSBram Moolenaarsyntax region dockerfileShell  contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=@Shell
35560979edSBram Moolenaarsyntax region dockerfileValue  contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=dockerfileString
3634401ccaSBram Moolenaar
37560979edSBram Moolenaarsyntax region dockerfileComment start=/\v^\s*#/ end=/\v$/
38560979edSBram Moolenaarset commentstring=#\ %s
3934401ccaSBram Moolenaar
4034401ccaSBram Moolenaarhi def link dockerfileString String
4134401ccaSBram Moolenaarhi def link dockerfileKeyword Keyword
4234401ccaSBram Moolenaarhi def link dockerfileComment Comment
43560979edSBram Moolenaarhi def link dockerfileOption Special
44560979edSBram Moolenaar
45560979edSBram Moolenaarlet b:current_syntax = "dockerfile"
46