docker.go

 1package d
 2
 3import (
 4	. "github.com/alecthomas/chroma" // nolint
 5	"github.com/alecthomas/chroma/lexers/b"
 6	"github.com/alecthomas/chroma/lexers/internal"
 7	"github.com/alecthomas/chroma/lexers/j"
 8)
 9
10// Docker lexer.
11var Docker = internal.Register(MustNewLexer(
12	&Config{
13		Name:            "Docker",
14		Aliases:         []string{"docker", "dockerfile"},
15		Filenames:       []string{"Dockerfile", "*.docker"},
16		MimeTypes:       []string{"text/x-dockerfile-config"},
17		CaseInsensitive: true,
18	},
19	Rules{
20		"root": {
21			{`#.*`, Comment, nil},
22			{`(ONBUILD)((?:\s*\\?\s*))`, ByGroups(Keyword, Using(b.Bash)), nil},
23			{`(HEALTHCHECK)(((?:\s*\\?\s*)--\w+=\w+(?:\s*\\?\s*))*)`, ByGroups(Keyword, Using(b.Bash)), nil},
24			{`(VOLUME|ENTRYPOINT|CMD|SHELL)((?:\s*\\?\s*))(\[.*?\])`, ByGroups(Keyword, Using(b.Bash), Using(j.JSON)), nil},
25			{`(LABEL|ENV|ARG)((?:(?:\s*\\?\s*)\w+=\w+(?:\s*\\?\s*))*)`, ByGroups(Keyword, Using(b.Bash)), nil},
26			{`((?:FROM|MAINTAINER|EXPOSE|WORKDIR|USER|STOPSIGNAL)|VOLUME)\b(.*)`, ByGroups(Keyword, LiteralString), nil},
27			{`((?:RUN|CMD|ENTRYPOINT|ENV|ARG|LABEL|ADD|COPY))`, Keyword, nil},
28			{`(.*\\\n)*.+`, Using(b.Bash), nil},
29		},
30	},
31))