1<lexer>
2 <config>
3 <name>Terraform</name>
4 <alias>terraform</alias>
5 <alias>tf</alias>
6 <alias>hcl</alias>
7 <filename>*.tf</filename>
8 <filename>*.hcl</filename>
9 <mime_type>application/x-tf</mime_type>
10 <mime_type>application/x-terraform</mime_type>
11 </config>
12 <rules>
13 <state name="string">
14 <rule pattern=""">
15 <token type="LiteralStringDouble" />
16 <pop depth="1" />
17 </rule>
18 <rule pattern="\\\\"">
19 <token type="LiteralStringDouble" />
20 </rule>
21 <rule pattern="[^"\\\\$]+">
22 <token type="LiteralStringDouble" />
23 </rule>
24 <rule pattern="[^\\\\"$]+">
25 <token type="LiteralStringDouble" />
26 </rule>
27 <rule pattern="\$\{">
28 <token type="LiteralStringInterpol" />
29 <push state="interp-inside" />
30 </rule>
31 </state>
32 <state name="interp-inside">
33 <rule pattern="\}">
34 <token type="LiteralStringInterpol" />
35 <pop depth="1" />
36 </rule>
37 <rule>
38 <include state="root" />
39 </rule>
40 </state>
41 <state name="root">
42 <rule pattern="[\[\](),.{}]">
43 <token type="Punctuation" />
44 </rule>
45 <rule pattern=""">
46 <token type="LiteralStringDouble" />
47 <push state="string" />
48 </rule>
49 <rule pattern="-?[0-9]+">
50 <token type="LiteralNumber" />
51 </rule>
52 <rule pattern="=>">
53 <token type="Punctuation" />
54 </rule>
55 <rule pattern="(false|true)\b">
56 <token type="KeywordConstant" />
57 </rule>
58 <rule pattern="/(?s)\*(((?!\*/).)*)\*/">
59 <token type="CommentMultiline" />
60 </rule>
61 <rule pattern="\s*(#|//).*\n">
62 <token type="CommentSingle" />
63 </rule>
64 <rule pattern="(?!\s*)(variable)(\s*)">
65 <bygroups>
66 <token type="Name" />
67 <token type="Text" />
68 </bygroups>
69 </rule>
70 <rule pattern="^(provisioner|variable|resource|provider|module|output|data)(?!\.)\b">
71 <token type="KeywordReserved" />
72 </rule>
73 <rule pattern="(for|in)\b">
74 <token type="Keyword" />
75 </rule>
76 <rule pattern="(module|count|data|each|var)\b">
77 <token type="NameBuiltin" />
78 </rule>
79 <rule pattern="(parseint|signum|floor|ceil|log|max|min|abs|pow)\b">
80 <token type="NameBuiltin" />
81 </rule>
82 <rule
83 pattern="(trimsuffix|formatlist|trimprefix|trimspace|regexall|replace|indent|strrev|format|substr|chomp|split|title|regex|lower|upper|trim|join)\b"
84 >
85 <token type="NameBuiltin" />
86 </rule>
87 <rule
88 pattern="[^.](setintersection|coalescelist|setsubtract|setproduct|matchkeys|chunklist|transpose|contains|distinct|coalesce|setunion|reverse|flatten|element|compact|lookup|length|concat|values|zipmap|range|merge|slice|index|list|sort|keys|map)\b"
89 >
90 <token type="NameBuiltin" />
91 </rule>
92 <rule
93 pattern="[^.](base64decode|base64encode|base64gzip|jsondecode|jsonencode|yamldecode|yamlencode|csvdecode|urlencode)\b"
94 >
95 <token type="NameBuiltin" />
96 </rule>
97 <rule pattern="(templatefile|filebase64|fileexists|pathexpand|basename|abspath|fileset|dirname|file)\b">
98 <token type="NameBuiltin" />
99 </rule>
100 <rule pattern="(formatdate|timestamp|timeadd)\b">
101 <token type="NameBuiltin" />
102 </rule>
103 <rule
104 pattern="(filebase64sha256|filebase64sha512|base64sha512|base64sha256|filesha256|rsadecrypt|filesha512|filesha1|filemd5|uuidv5|bcrypt|sha256|sha512|sha1|uuid|md5)\b"
105 >
106 <token type="NameBuiltin" />
107 </rule>
108 <rule pattern="(cidrnetmask|cidrsubnet|cidrhost)\b">
109 <token type="NameBuiltin" />
110 </rule>
111 <rule pattern="(tostring|tonumber|tobool|tolist|tomap|toset|can|try)\b">
112 <token type="NameBuiltin" />
113 </rule>
114 <rule pattern="(^|[^.\w])(name|x|default|type|description|value)(_[a-zA-Z]\w*)*">
115 <token type="NameAttribute" />
116 </rule>
117 <rule pattern="=(?!>)|\+|-|\*|\/|:|!|%|>|<(?!<)|>=|<=|==|!=|&&|\||\?">
118 <token type="Operator" />
119 </rule>
120 <rule pattern="\n|\s+|\\\n">
121 <token type="Text" />
122 </rule>
123 <rule pattern="[a-zA-Z]\w*">
124 <token type="NameOther" />
125 </rule>
126 <rule pattern="(?s)(<<-?)(\w+)(\n\s*(?:(?!\2).)*\s*\n\s*)(\2)">
127 <bygroups>
128 <token type="Operator" />
129 <token type="Operator" />
130 <token type="LiteralString" />
131 <token type="Operator" />
132 </bygroups>
133 </rule>
134 </state>
135 <state name="declaration">
136 <rule pattern="(\s*)("(?:\\\\|\\"|[^"])*")(\s*)">
137 <bygroups>
138 <token type="Text" />
139 <token type="NameAttribute" />
140 <token type="Text" />
141 </bygroups>
142 </rule>
143 <rule pattern="\{">
144 <token type="Punctuation" />
145 <pop depth="1" />
146 </rule>
147 </state>
148 </rules>
149</lexer>