Skip to content

Commit 6bac309

Browse files
authored
Improve ACL highlighting (#76)
This commit... 1. adds ACL highlighting support to JSON values. 2. fixes string interpolation scopes within ACL variables. - remove string but not variable scope.
1 parent 4797c7c commit 6bac309

File tree

3 files changed

+44
-16
lines changed

3 files changed

+44
-16
lines changed

JSON (Terraform).sublime-syntax

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ contexts:
1414
double-quoted-string-body:
1515
- meta_prepend: true
1616
- include: Packages/Terraform/Terraform.sublime-syntax#string_interpolation
17+
- include: Packages/Terraform/Terraform.sublime-syntax#aws_acl

Terraform.sublime-syntax

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -285,23 +285,36 @@ contexts:
285285
- match: '"'
286286
scope: punctuation.definition.string.end.terraform
287287
pop: true
288-
- include: string_interpolation
289288
- match: '{{char_escapes}}'
290289
comment: Character Escapes
291290
scope: constant.character.escape.terraform
292-
- match: (?=\barn:aws:)
293-
push: aws_acl
291+
- include: string_interpolation
292+
- include: aws_acl
294293

295294
aws_acl:
295+
- match: (?=\barn:aws:)
296+
push: aws_acl_body
297+
298+
aws_acl_body:
299+
- clear_scopes: 1 # Clear the string.* scope.
296300
- meta_scope: variable.language.acl.terraform
297-
- include: string_interpolation
301+
- match: ([$%]\{)(~)?
302+
captures:
303+
1: punctuation.section.interpolation.begin.terraform
304+
2: keyword.operator.template.trim.left.terraform
305+
push: acl_interpolation_body
298306
- match: :|/
299307
scope: punctuation.separator.sequence.terraform
300308
- match: \*
301309
scope: constant.other.wildcard.asterisk.terraform
302310
- match: (?![\w-])
303311
pop: true
304312

313+
acl_interpolation_body:
314+
- meta_scope: meta.interpolation.terraform
315+
- meta_content_scope: source.terraform
316+
- include: string_interpolation_body
317+
305318
# String Interpolation: ("${" | "${~") Expression ("}" | "~}"
306319
#
307320
# https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#templates
@@ -313,9 +326,9 @@ contexts:
313326
push: string_interpolation_body
314327

315328
string_interpolation_body:
329+
- clear_scopes: 1 # Clear the string.* scope.
316330
- meta_scope: meta.interpolation.terraform
317331
- meta_content_scope: source.terraform
318-
- clear_scopes: 1 # Clear the string.* scope.
319332
- match: (~)?(\})
320333
captures:
321334
1: keyword.operator.template.trim.right.terraform
@@ -411,7 +424,7 @@ contexts:
411424
pop: true
412425

413426
literal_label_body:
414-
- meta_scope: string.quoted.double.terraform
427+
- meta_scope: meta.string.terraform string.quoted.double.terraform
415428
- match: \"
416429
scope: punctuation.definition.string.end.terraform
417430
pop: true
@@ -683,7 +696,7 @@ contexts:
683696
set: block_body
684697

685698
block_name_body:
686-
- meta_scope: string.quoted.double.terraform
699+
- meta_scope: meta.string.terraform string.quoted.double.terraform
687700
- match: \"
688701
scope: punctuation.definition.string.end.terraform
689702
pop: true

tests/syntax_test_scope.tf

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3183,6 +3183,19 @@
31833183
resource "aws_iam_role_policy" "attach-inline-policy-1" {
31843184
name = "xxx"
31853185
role = aws_iam_role.execution-role.name
3186+
3187+
res_arn = "arn:aws:lambda:*:*:function:${var.environment}-xxx"
3188+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.terraform meta.string.terraform
3189+
# ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform - variable
3190+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ variable.language.acl.terraform
3191+
# ^^ punctuation.section.interpolation.begin.terraform
3192+
# ^^^^^^^^^^^^^^^ source.terraform source.terraform
3193+
# ^^^ variable.language.terraform
3194+
# ^ punctuation.accessor.dot.terraform
3195+
# ^^^^^^^^^^^ variable.other.member.terraform
3196+
# ^ punctuation.section.interpolation.end.terraform
3197+
# ^ string.quoted.double.terraform punctuation.definition.string.end.terraform - variable
3198+
31863199
policy = jsonencode({
31873200
Version = "2012-10-17"
31883201
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.terraform meta.function-call.terraform meta.braces.terraform
@@ -3209,23 +3222,24 @@ resource "aws_iam_role_policy" "attach-inline-policy-1" {
32093222
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.terraform meta.function-call.terraform meta.mapping.value.json meta.sequence.json
32103223
#^^^^^^^^^^^^^^^ meta.mapping.json
32113224
# ^^^^^^^^^^ meta.mapping.key.json string.quoted.double.json
3225+
# ^^ meta.mapping.json
3226+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.mapping.value.json meta.string.json - meta.interpolation
3227+
# ^^^^^^^^^^^^^^^^^^ meta.mapping.value.json meta.string.json meta.interpolation.terraform - string
3228+
# ^^^^^ meta.mapping.value.json meta.string.json - meta.interpolation
3229+
# ^ meta.mapping.json
32123230
# ^ punctuation.definition.string.begin.json
32133231
# ^ punctuation.definition.string.end.json
3214-
# ^^ meta.mapping.json
32153232
# ^ punctuation.separator.key-value.json
3216-
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.mapping.value.json meta.string.json
3217-
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.json
3218-
# ^ punctuation.definition.string.begin.json
3219-
# ^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
3233+
# ^ string.quoted.double.json punctuation.definition.string.begin.json - variable
3234+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ variable.language.acl.terraform
32203235
# ^^ punctuation.section.interpolation.begin.terraform
3221-
# ^^^^^^^^^^^^^^^ source.terraform
3236+
# ^^^^^^^^^^^^^^^ source.terraform source.terraform
32223237
# ^^^ variable.language.terraform
32233238
# ^ punctuation.accessor.dot.terraform
32243239
# ^^^^^^^^^^^ variable.other.member.terraform
32253240
# ^ punctuation.section.interpolation.end.terraform
3226-
# ^^^^^ string.quoted.double.json
3227-
# ^ punctuation.definition.string.end.json
3228-
# ^ meta.mapping.json punctuation.separator.sequence.json
3241+
# ^ string.quoted.double.json punctuation.definition.string.end.json - variable
3242+
# ^ punctuation.separator.sequence.json
32293243
"Effect": "Allow"
32303244
}
32313245
]

0 commit comments

Comments
 (0)