Skip to content

Commit 9077658

Browse files
authored
fix: properly tokenizes default_tags attribute (#1068)
In the current version `default_tags` was getting processed like ```json {"type":"NameAttribute","value":"default"}, {"type":"Error","value":"_"}, {"type":"NameOther","value":"tags"} ``` but `default_tags` is a valid attribute or parameter here and doesn't need parsed as such. This matches `default_tags` properly Here is the before ![default_tags_2_16_capture](https://github.com/user-attachments/assets/fccf327a-82d5-4cc0-842e-acc2a605dce7) And the after with this change ![fixed-default_tags-capture](https://github.com/user-attachments/assets/8c8f11cb-4e46-469e-bdce-6ddfc9a2d600) Hopefully I did this correctly. I fixed #988 but it's been a minute. Thanks!
1 parent e4ce323 commit 9077658

File tree

3 files changed

+181
-18
lines changed

3 files changed

+181
-18
lines changed

lexers/embedded/terraform.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
<rule pattern="(for|in)\b">
7575
<token type="Keyword"/>
7676
</rule>
77-
<rule pattern="(module|count|data|each|var)">
77+
<rule pattern="(module|count|data|each|var)\b">
7878
<token type="NameBuiltin"/>
7979
</rule>
8080
<rule pattern="(parseint|signum|floor|ceil|log|max|min|abs|pow)\b">
@@ -104,7 +104,7 @@
104104
<rule pattern="(tostring|tonumber|tobool|tolist|tomap|toset|can|try)\b">
105105
<token type="NameBuiltin"/>
106106
</rule>
107-
<rule pattern="(name|x|default|type|description|value)">
107+
<rule pattern="(^|[^.\w])(name|x|default|type|description|value)(_[a-zA-Z]\w*)*">
108108
<token type="NameAttribute"/>
109109
</rule>
110110
<rule pattern="=(?!&gt;)|\+|-|\*|\/|:|!|%|&gt;|&lt;(?!&lt;)|&gt;=|&lt;=|==|!=|&amp;&amp;|\||\?">

lexers/testdata/terraform.actual

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,35 @@ data "aws_iam_policy_document" "example" {
8585
]
8686
}
8787
}
88+
89+
# the _ in default_tags gets identified as `err` and shouldn't
90+
provider "aws" {
91+
default_tags {
92+
tags = {
93+
name = "My Awesome AWS Environment"
94+
environment = var.app.environment
95+
application = var.app.name
96+
owner = var.app.owner
97+
contact = var.app.contact
98+
}
99+
}
100+
}
101+
102+
# name here is NameAttribute
103+
resource "aws_lb" "web" {
104+
name = "my fancy lb"
105+
port = 80
106+
}
107+
108+
# The first name is NameAttribute the second is not
109+
resource "aws_s3_bucket" "my_bucket" {
110+
name = var.name
111+
112+
}
113+
114+
# type, description, default are all NameAttribute
115+
variable "my_variable" {
116+
type = number
117+
description = "The port the application listens on"
118+
default = 80
119+
}

lexers/testdata/terraform.expected

Lines changed: 147 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
{"type":"Text","value":" "},
66
{"type":"Punctuation","value":"{"},
77
{"type":"Text","value":"\n "},
8-
{"type":"NameAttribute","value":"default"},
8+
{"type":"NameOther","value":"default"},
99
{"type":"Text","value":" "},
1010
{"type":"Operator","value":"="},
1111
{"type":"Text","value":" "},
@@ -21,21 +21,21 @@
2121
{"type":"Text","value":" "},
2222
{"type":"Punctuation","value":"{"},
2323
{"type":"Text","value":"\n "},
24-
{"type":"NameAttribute","value":"name"},
24+
{"type":"NameOther","value":"name"},
2525
{"type":"Text","value":" "},
2626
{"type":"Operator","value":"="},
2727
{"type":"Text","value":" "},
2828
{"type":"LiteralStringDouble","value":"\"hello\""},
2929
{"type":"Text","value":"\n "},
30-
{"type":"NameAttribute","value":"value"},
30+
{"type":"NameOther","value":"value"},
3131
{"type":"Text","value":" "},
3232
{"type":"Operator","value":"="},
3333
{"type":"Text","value":" "},
3434
{"type":"NameBuiltin","value":"var"},
3535
{"type":"Punctuation","value":"."},
3636
{"type":"NameOther","value":"some_var"},
3737
{"type":"Text","value":"\n "},
38-
{"type":"NameAttribute","value":"x"},
38+
{"type":"NameOther","value":"x"},
3939
{"type":"Text","value":" "},
4040
{"type":"Operator","value":"="},
4141
{"type":"Text","value":" "},
@@ -117,36 +117,35 @@
117117
{"type":"Text","value":" "},
118118
{"type":"Punctuation","value":"{"},
119119
{"type":"Text","value":"\n "},
120-
{"type":"NameAttribute","value":"name"},
121-
{"type":"NameOther","value":"space"},
120+
{"type":"NameOther","value":"namespace"},
122121
{"type":"Text","value":" "},
123122
{"type":"Operator","value":"="},
124123
{"type":"Text","value":" "},
125124
{"type":"NameOther","value":"setting"},
126125
{"type":"Punctuation","value":"."},
127-
{"type":"NameAttribute","value":"value"},
126+
{"type":"NameOther","value":"value"},
128127
{"type":"Punctuation","value":"["},
129128
{"type":"LiteralStringDouble","value":"\"namespace\""},
130129
{"type":"Punctuation","value":"]"},
131130
{"type":"Text","value":"\n "},
132-
{"type":"NameAttribute","value":"name"},
131+
{"type":"NameOther","value":"name"},
133132
{"type":"Text","value":" "},
134133
{"type":"Operator","value":"="},
135134
{"type":"Text","value":" "},
136135
{"type":"NameOther","value":"setting"},
137136
{"type":"Punctuation","value":"."},
138-
{"type":"NameAttribute","value":"value"},
137+
{"type":"NameOther","value":"value"},
139138
{"type":"Punctuation","value":"["},
140139
{"type":"LiteralStringDouble","value":"\"name\""},
141140
{"type":"Punctuation","value":"]"},
142141
{"type":"Text","value":"\n "},
143-
{"type":"NameAttribute","value":"value"},
142+
{"type":"NameOther","value":"value"},
144143
{"type":"Text","value":" "},
145144
{"type":"Operator","value":"="},
146145
{"type":"Text","value":" "},
147146
{"type":"NameOther","value":"setting"},
148147
{"type":"Punctuation","value":"."},
149-
{"type":"NameAttribute","value":"value"},
148+
{"type":"NameOther","value":"value"},
150149
{"type":"Punctuation","value":"["},
151150
{"type":"LiteralStringDouble","value":"\"value\""},
152151
{"type":"Punctuation","value":"]"},
@@ -171,7 +170,7 @@
171170
{"type":"Text","value":" "},
172171
{"type":"LiteralNumber","value":"3"},
173172
{"type":"Text","value":"\n "},
174-
{"type":"NameAttribute","value":"name"},
173+
{"type":"NameOther","value":"name"},
175174
{"type":"Text","value":" "},
176175
{"type":"Operator","value":"="},
177176
{"type":"Text","value":" "},
@@ -308,15 +307,13 @@
308307
{"type":"Text","value":" "},
309308
{"type":"LiteralStringDouble","value":"\"StringLike\""},
310309
{"type":"Text","value":"\n "},
311-
{"type":"NameBuiltin","value":"var"},
312-
{"type":"NameOther","value":"iable"},
310+
{"type":"NameOther","value":"variable"},
313311
{"type":"Text","value":" "},
314312
{"type":"Operator","value":"="},
315313
{"type":"Text","value":" "},
316314
{"type":"LiteralStringDouble","value":"\"s3:prefix\""},
317315
{"type":"Text","value":"\n "},
318-
{"type":"NameAttribute","value":"value"},
319-
{"type":"NameOther","value":"s"},
316+
{"type":"NameOther","value":"values"},
320317
{"type":"Text","value":" "},
321318
{"type":"Operator","value":"="},
322319
{"type":"Text","value":" "},
@@ -381,5 +378,139 @@
381378
{"type":"Punctuation","value":"}"},
382379
{"type":"Text","value":"\n"},
383380
{"type":"Punctuation","value":"}"},
381+
{"type":"CommentSingle","value":"\n\n# the _ in default_tags gets identified as `err` and shouldn't\n"},
382+
{"type":"KeywordReserved","value":"provider"},
383+
{"type":"Text","value":" "},
384+
{"type":"LiteralStringDouble","value":"\"aws\""},
385+
{"type":"Text","value":" "},
386+
{"type":"Punctuation","value":"{"},
387+
{"type":"Text","value":"\n "},
388+
{"type":"NameOther","value":"default_tags"},
389+
{"type":"Text","value":" "},
390+
{"type":"Punctuation","value":"{"},
391+
{"type":"Text","value":"\n "},
392+
{"type":"NameOther","value":"tags"},
393+
{"type":"Text","value":" "},
394+
{"type":"Operator","value":"="},
395+
{"type":"Text","value":" "},
396+
{"type":"Punctuation","value":"{"},
397+
{"type":"Text","value":"\n "},
398+
{"type":"NameOther","value":"name"},
399+
{"type":"Text","value":" "},
400+
{"type":"Operator","value":"="},
401+
{"type":"Text","value":" "},
402+
{"type":"LiteralStringDouble","value":"\"My Awesome AWS Environment\""},
403+
{"type":"Text","value":"\n "},
404+
{"type":"NameOther","value":"environment"},
405+
{"type":"Text","value":" "},
406+
{"type":"Operator","value":"="},
407+
{"type":"Text","value":" "},
408+
{"type":"NameBuiltin","value":"var"},
409+
{"type":"Punctuation","value":"."},
410+
{"type":"NameOther","value":"app"},
411+
{"type":"Punctuation","value":"."},
412+
{"type":"NameOther","value":"environment"},
413+
{"type":"Text","value":"\n "},
414+
{"type":"NameOther","value":"application"},
415+
{"type":"Text","value":" "},
416+
{"type":"Operator","value":"="},
417+
{"type":"Text","value":" "},
418+
{"type":"NameBuiltin","value":"var"},
419+
{"type":"Punctuation","value":"."},
420+
{"type":"NameOther","value":"app"},
421+
{"type":"Punctuation","value":"."},
422+
{"type":"NameOther","value":"name"},
423+
{"type":"Text","value":"\n "},
424+
{"type":"NameOther","value":"owner"},
425+
{"type":"Text","value":" "},
426+
{"type":"Operator","value":"="},
427+
{"type":"Text","value":" "},
428+
{"type":"NameBuiltin","value":"var"},
429+
{"type":"Punctuation","value":"."},
430+
{"type":"NameOther","value":"app"},
431+
{"type":"Punctuation","value":"."},
432+
{"type":"NameOther","value":"owner"},
433+
{"type":"Text","value":"\n "},
434+
{"type":"NameOther","value":"contact"},
435+
{"type":"Text","value":" "},
436+
{"type":"Operator","value":"="},
437+
{"type":"Text","value":" "},
438+
{"type":"NameBuiltin","value":"var"},
439+
{"type":"Punctuation","value":"."},
440+
{"type":"NameOther","value":"app"},
441+
{"type":"Punctuation","value":"."},
442+
{"type":"NameOther","value":"contact"},
443+
{"type":"Text","value":"\n "},
444+
{"type":"Punctuation","value":"}"},
445+
{"type":"Text","value":"\n "},
446+
{"type":"Punctuation","value":"}"},
447+
{"type":"Text","value":"\n"},
448+
{"type":"Punctuation","value":"}"},
449+
{"type":"CommentSingle","value":"\n\n# name here is NameAttribute\n"},
450+
{"type":"KeywordReserved","value":"resource"},
451+
{"type":"Text","value":" "},
452+
{"type":"LiteralStringDouble","value":"\"aws_lb\""},
453+
{"type":"Text","value":" "},
454+
{"type":"LiteralStringDouble","value":"\"web\""},
455+
{"type":"Text","value":" "},
456+
{"type":"Punctuation","value":"{"},
457+
{"type":"Text","value":"\n"},
458+
{"type":"NameAttribute","value":"\tname"},
459+
{"type":"Text","value":" "},
460+
{"type":"Operator","value":"="},
461+
{"type":"Text","value":" "},
462+
{"type":"LiteralStringDouble","value":"\"my fancy lb\""},
463+
{"type":"Text","value":"\n\t"},
464+
{"type":"NameOther","value":"port"},
465+
{"type":"Text","value":" "},
466+
{"type":"Operator","value":"="},
467+
{"type":"Text","value":" "},
468+
{"type":"LiteralNumber","value":"80"},
469+
{"type":"Text","value":"\n"},
470+
{"type":"Punctuation","value":"}"},
471+
{"type":"CommentSingle","value":"\n\n# The first name is NameAttribute the second is not\n"},
472+
{"type":"KeywordReserved","value":"resource"},
473+
{"type":"Text","value":" "},
474+
{"type":"LiteralStringDouble","value":"\"aws_s3_bucket\""},
475+
{"type":"Text","value":" "},
476+
{"type":"LiteralStringDouble","value":"\"my_bucket\""},
477+
{"type":"Text","value":" "},
478+
{"type":"Punctuation","value":"{"},
479+
{"type":"Text","value":"\n"},
480+
{"type":"NameAttribute","value":"\tname"},
481+
{"type":"Text","value":" "},
482+
{"type":"Operator","value":"="},
483+
{"type":"Text","value":" "},
484+
{"type":"NameBuiltin","value":"var"},
485+
{"type":"Punctuation","value":"."},
486+
{"type":"NameOther","value":"name"},
487+
{"type":"Text","value":"\n\n"},
488+
{"type":"Punctuation","value":"}"},
489+
{"type":"CommentSingle","value":"\n\n# type, description, default are all NameAttribute\n"},
490+
{"type":"KeywordReserved","value":"variable"},
491+
{"type":"Text","value":" "},
492+
{"type":"LiteralStringDouble","value":"\"my_variable\""},
493+
{"type":"Text","value":" "},
494+
{"type":"Punctuation","value":"{"},
495+
{"type":"Text","value":"\n"},
496+
{"type":"NameAttribute","value":"\ttype"},
497+
{"type":"Text","value":" "},
498+
{"type":"Operator","value":"="},
499+
{"type":"Text","value":" "},
500+
{"type":"NameOther","value":"number"},
501+
{"type":"Text","value":"\n"},
502+
{"type":"NameAttribute","value":"\tdescription"},
503+
{"type":"Text","value":" "},
504+
{"type":"Operator","value":"="},
505+
{"type":"Text","value":" "},
506+
{"type":"LiteralStringDouble","value":"\"The port the application listens on\""},
507+
{"type":"Text","value":"\n"},
508+
{"type":"NameAttribute","value":"\tdefault"},
509+
{"type":"Text","value":" "},
510+
{"type":"Operator","value":"="},
511+
{"type":"Text","value":" "},
512+
{"type":"LiteralNumber","value":"80"},
513+
{"type":"Text","value":"\n"},
514+
{"type":"Punctuation","value":"}"},
384515
{"type":"Text","value":"\n"}
385516
]

0 commit comments

Comments
 (0)