package h import ( . "github.com/alecthomas/chroma" // nolint "github.com/alecthomas/chroma/lexers/internal" ) // HCL lexer. var HCL = internal.Register(MustNewLazyLexer( &Config{ Name: "HCL", Aliases: []string{"hcl"}, Filenames: []string{"*.hcl"}, MimeTypes: []string{"application/x-hcl"}, }, hclRules, )) func hclRules() Rules { return Rules{ "root": { Include("string"), Include("punctuation"), Include("curly"), Include("basic"), Include("whitespace"), {`[0-9]+`, LiteralNumber, nil}, }, "basic": { {Words(`\b`, `\b`, `true`, `false`), KeywordType, nil}, {`\s*/\*`, CommentMultiline, Push("comment")}, {`\s*#.*\n`, CommentSingle, nil}, {`(.*?)(\s*)(=)`, ByGroups(Name, Text, Operator), nil}, {`\d+`, Number, nil}, {`\b\w+\b`, Keyword, nil}, {`\$\{`, LiteralStringInterpol, Push("var_builtin")}, }, "function": { {`(\s+)(".*")(\s+)`, ByGroups(Text, LiteralString, Text), nil}, Include("punctuation"), Include("curly"), }, "var_builtin": { {`\$\{`, LiteralStringInterpol, Push()}, {Words(`\b`, `\b`, `concat`, `file`, `join`, `lookup`, `element`), NameBuiltin, nil}, Include("string"), Include("punctuation"), {`\s+`, Text, nil}, {`\}`, LiteralStringInterpol, Pop(1)}, }, "string": { {`(".*")`, ByGroups(LiteralStringDouble), nil}, }, "punctuation": { {`[\[\](),.]`, Punctuation, nil}, }, "curly": { {`\{`, TextPunctuation, nil}, {`\}`, TextPunctuation, nil}, }, "comment": { {`[^*/]`, CommentMultiline, nil}, {`/\*`, CommentMultiline, Push()}, {`\*/`, CommentMultiline, Pop(1)}, {`[*/]`, CommentMultiline, nil}, }, "whitespace": { {`\n`, Text, nil}, {`\s+`, Text, nil}, {`\\\n`, Text, nil}, }, } }