From 0ba7c5a93cecd0f91da09da99991db16dbe52510 Mon Sep 17 00:00:00 2001
From: FichteFoll <fichtefoll2@googlemail.com>
Date: Wed, 24 Jul 2024 16:47:29 +0200
Subject: [PATCH 01/11] Remove duplicate "hcl" file extension

It's already in the HCL syntax definition alias.

Was likely incorrectly resolved during
1576c26c2ac215f9bed5e1f8a061f123bf63e6b2 after it had been removed in
5d4c9f07c597785493048754aef72ab11166e53d.
---
 Terraform.sublime-syntax | 1 -
 1 file changed, 1 deletion(-)

diff --git a/Terraform.sublime-syntax b/Terraform.sublime-syntax
index bb7e10d..77c03c0 100644
--- a/Terraform.sublime-syntax
+++ b/Terraform.sublime-syntax
@@ -21,7 +21,6 @@ name: Terraform
 #   https://www.terraform.io/docs/language/index.html
 file_extensions:
   - tf
-  - hcl
   - nomad
 
 scope: source.terraform

From 8f48a170862ff3262a27fdec72e075f25a7f6532 Mon Sep 17 00:00:00 2001
From: FichteFoll <fichtefoll2@googlemail.com>
Date: Wed, 24 Jul 2024 16:48:06 +0200
Subject: [PATCH 02/11] Remove capturing group

---
 Terraform.sublime-syntax | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Terraform.sublime-syntax b/Terraform.sublime-syntax
index 77c03c0..621f307 100644
--- a/Terraform.sublime-syntax
+++ b/Terraform.sublime-syntax
@@ -519,10 +519,10 @@ contexts:
   #
   # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#structural-elements
   block:
-    - match: '(\b({{terraform_known_blocks}})\b|({{identifer}}))(?=[\s\"\-[:word:]]*(\{))'
+    - match: (?:\b({{terraform_known_blocks}})\b|({{identifer}}))(?=[\s\"\-[:word:]]*(\{))
       captures:
-        2: storage.type.terraform
-        3: entity.name.type.terraform
+        1: storage.type.terraform
+        2: entity.name.type.terraform
       push:
         - meta_scope: meta.type.terraform
         - match: \"

From 71ee807b31af3df08da523f6611a2fdf12916b99 Mon Sep 17 00:00:00 2001
From: FichteFoll <fichtefoll2@googlemail.com>
Date: Wed, 24 Jul 2024 16:49:52 +0200
Subject: [PATCH 03/11] Use punctuation scope for accessor

---
 Terraform.sublime-syntax |   2 +-
 syntax_test_terraform.tf | 209 +++++++++++++++++++--------------------
 2 files changed, 105 insertions(+), 106 deletions(-)

diff --git a/Terraform.sublime-syntax b/Terraform.sublime-syntax
index 621f307..2d1294e 100644
--- a/Terraform.sublime-syntax
+++ b/Terraform.sublime-syntax
@@ -411,7 +411,7 @@ contexts:
   # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#attribute-access-operator
   attribute_access:
     - match: \.
-      scope: keyword.operator.accessor.terraform
+      scope: punctuation.accessor.dot.terraform
       push:
         - match: "{{identifer}}"
           comment: Attribute access
diff --git a/syntax_test_terraform.tf b/syntax_test_terraform.tf
index 7bea6a2..482cbbb 100644
--- a/syntax_test_terraform.tf
+++ b/syntax_test_terraform.tf
@@ -152,10 +152,10 @@
 /////
 
     aws_route53_zone.main.zone_id
-#   ^^^^^^^^^^^^^^^^ -numeric -constant 
-#                   ^ keyword.operator.accessor.terraform
+#   ^^^^^^^^^^^^^^^^ -numeric -constant
+#                   ^ punctuation.accessor.dot.terraform
 #                    ^^^^ variable.other.member.terraform
-#                        ^ keyword.operator.accessor.terraform
+#                        ^ punctuation.accessor.dot.terraform
 #                         ^^^^^^^ variable.other.member.terraform
 
 /////////////////////////////////////////////////////////////////////
@@ -315,7 +315,7 @@
 #   ^^^^^^^ string.quoted.double.terraform
 #          ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #            ^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
-#                        ^ meta.interpolation.terraform keyword.operator.accessor.terraform
+#                        ^ meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                         ^^^^^^ meta.interpolation.terraform variable.other.member.terraform
 #                               ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
 #                                ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
@@ -399,7 +399,7 @@
 #   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #    ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #      ^^^ meta.interpolation.terraform support.constant.terraform
-#         ^ meta.interpolation.terraform keyword.operator.accessor.terraform
+#         ^ meta.interpolation.terraform punctuation.accessor.dot.terraform
 #          ^^^^^^^^^ meta.interpolation.terraform variable.other.member.terraform
 #                   ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
 #                    ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
@@ -445,7 +445,7 @@
 #           ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #            ^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #              ^^^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                  ^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
+#                  ^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                   ^^^^^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                         ^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
 #                          ^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform
@@ -474,7 +474,7 @@
 #                         ^ source.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
 #                           ^ keyword.other.interpolation.end.terraform
 #                            ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                  ^ keyword.other.interpolation.end.terraform 
+#                                  ^ keyword.other.interpolation.end.terraform
 #                                   ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #                                      ^^^^^ meta.interpolation.terraform keyword.control.terraform
 #                                            ^ meta.interpolation.terraform keyword.operator.template.right.trim.terraform
@@ -498,7 +498,7 @@
 #                         ^ source.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
 #                           ^ keyword.other.interpolation.end.terraform
 #                            ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                  ^ keyword.other.interpolation.end.terraform 
+#                                  ^ keyword.other.interpolation.end.terraform
 #                                   ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #                                      ^^^^ meta.interpolation.terraform keyword.control.terraform
 #                                           ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
@@ -519,14 +519,14 @@
 /////
 
       "%{ for name in var.names ~}${name}%{ endfor ~}"
-#   ^ -string -punctuation      
+#   ^ -string -punctuation
 #     ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #      ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #         ^^^ keyword.control.terraform
 #      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
 #                  ^^ keyword.control.terraform
 #                     ^^^ meta.interpolation.terraform support.constant.terraform
-#                        ^ meta.interpolation.terraform keyword.operator.accessor.terraform
+#                        ^ meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                         ^^^^^ meta.interpolation.terraform variable.other.member.terraform
 #                               ^ keyword.operator.template.right.trim.terraform
 #                                ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
@@ -550,12 +550,12 @@
     a == b
 #   ^ -keyword -operator
 #     ^^ keyword.operator.terraform
-#         ^ -keyword -operator 
+#         ^ -keyword -operator
 
     a != b
 #   ^ -keyword -operator
 #     ^^ keyword.operator.terraform
-#         ^ -keyword -operator 
+#         ^ -keyword -operator
 
     a < b
 #    ^ -keyword -operator
@@ -568,7 +568,7 @@
 #       ^ -keyword -operator
 
     a > b
-#    ^ -keyword -operator 
+#    ^ -keyword -operator
 #     ^ keyword.operator.terraform
 #      ^ -keyword -operator
 
@@ -608,8 +608,8 @@
 
     -a
 #  ^ -keyword -operator
-#   ^ keyword.operator.arithmetic.terraform 
-#    ^ -keyword -operator 
+#   ^ keyword.operator.arithmetic.terraform
+#    ^ -keyword -operator
 
 /////
 // Logic
@@ -661,7 +661,7 @@
 #                ^ punctuation.separator.terraform
 #                  ^ constant.numeric.integer.terraform
 #                   ^ punctuation.section.brackets.end.terraform
-#                    ^^^ keyword.operator.terraform 
+#                    ^^^ keyword.operator.terraform
 #                       ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 
 /////////////////////////////////////////////////////////////////////
@@ -673,7 +673,7 @@
 /////
 
     thing[1]
-#       ^ -punctuation 
+#       ^ -punctuation
 #        ^ punctuation.section.brackets.begin.terraform
 #         ^ constant.numeric.integer.terraform
 #          ^ punctuation.section.brackets.end.terraform
@@ -745,9 +745,9 @@
 #        ^ punctuation.section.brackets.begin.terraform
 #         ^ punctuation.section.brackets.end.terraform keyword.operator.splat.terraform
 #          ^ punctuation.section.brackets.end.terraform
-#           ^ keyword.operator.accessor.terraform
+#           ^ punctuation.accessor.dot.terraform
 #            ^^^ variable.other.member.terraform
-#               ^ keyword.operator.accessor.terraform
+#               ^ punctuation.accessor.dot.terraform
 #                ^^^ variable.other.member.terraform
 #                   ^ punctuation.section.brackets.begin.terraform
 #                    ^ constant.numeric.integer.terraform
@@ -784,17 +784,17 @@
 
     [ aws_instance.ubuntu, aws_instance.freebsd ]
 #   ^ punctuation.section.brackets.begin.terraform
-#                 ^ keyword.operator.accessor.terraform 
+#                 ^ punctuation.accessor.dot.terraform
 #                  ^^^^^^ variable.other.member.terraform
 #                        ^ punctuation.separator.terraform
-#                                      ^ keyword.operator.accessor.terraform 
+#                                      ^ punctuation.accessor.dot.terraform
 #                                       ^^^^^^^ variable.other.member.terraform
 #                                               ^ punctuation.section.brackets.end.terraform
 
 /////
 // Includes functions.
 /////
-    
+
     [ upper("ggh") ]
 #   ^ punctuation.section.brackets.begin.terraform
 #     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
@@ -821,7 +821,7 @@
 #                ^ meta.braces.terraform keyword.operator.terraform
 #                  ^ meta.braces.terraform constant.numeric.integer.terraform
 #                   ^ meta.braces.terraform punctuation.section.braces.end.terraform
-#                    ^ punctuation.section.brackets.end.terraform 
+#                    ^ punctuation.section.brackets.end.terraform
 
 /////
 // Includes named values
@@ -830,11 +830,11 @@
     [local.thing1, local.thing2]
 #   ^ punctuation.section.brackets.begin.terraform
 #    ^^^^^ support.constant.terraform
-#         ^ keyword.operator.accessor.terraform
+#         ^ punctuation.accessor.dot.terraform
 #          ^^^^^^ variable.other.member.terraform
 #                ^ punctuation.separator.terraform
 #                  ^^^^^ support.constant.terraform
-#                       ^ keyword.operator.accessor.terraform
+#                       ^ punctuation.accessor.dot.terraform
 #                        ^^^^^^ variable.other.member.terraform
 #                              ^ punctuation.section.brackets.end.terraform
 
@@ -959,7 +959,7 @@
 #     ^^^^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
 #            ^ meta.braces.terraform keyword.operator.terraform
 #              ^^^ meta.braces.terraform support.constant.terraform
-#                 ^ meta.braces.terraform keyword.operator.accessor.terraform
+#                 ^ meta.braces.terraform punctuation.accessor.dot.terraform
 #                  ^^^^^^ meta.braces.terraform variable.other.member.terraform
 #                         ^ meta.braces.terraform punctuation.section.braces.end.terraform
 #                          ^ -meta
@@ -1018,7 +1018,7 @@
 #   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
 #    ^ meta.braces.terraform meta.mapping.key.terraform punctuation.section.parens.begin.terraform
 #     ^^^ meta.braces.terraform meta.mapping.key.terraform support.constant.terraform
-#        ^ meta.braces.terraform meta.mapping.key.terraform keyword.operator.accessor.terraform
+#        ^ meta.braces.terraform meta.mapping.key.terraform punctuation.accessor.dot.terraform
 #         ^^^^ meta.braces.terraform meta.mapping.key.terraform variable.other.member.terraform
 #             ^ meta.braces.terraform meta.mapping.key.terraform punctuation.section.parens.end.terraform
 #               ^ meta.braces.terraform keyword.operator.terraform
@@ -1034,14 +1034,14 @@
 /////
 
     aws_instance.ubuntu[*].private_dns
-#               ^ keyword.operator.accessor.terraform
+#               ^ punctuation.accessor.dot.terraform
 #                ^^^^^^ variable.other.member.terraform
 #                      ^ punctuation.section.brackets.begin.terraform
 #                       ^ punctuation.section.brackets.end.terraform keyword.operator.splat.terraform
 #                        ^ punctuation.section.brackets.end.terraform
-#                         ^ keyword.operator.accessor.terraform
+#                         ^ punctuation.accessor.dot.terraform
 #                          ^^^^^^^^^^^ variable.other.member.terraform
-#                                     ^ -variable -punctuation 
+#                                     ^ -variable -punctuation
 
 /////
 // Ignores dot-access in string literals
@@ -1062,7 +1062,7 @@
 #       ^ variable.other.readwrite.terraform
 #         ^^ keyword.operator.word.terraform
 #            ^^^ support.constant.terraform
-#               ^ keyword.operator.accessor.terraform
+#               ^ punctuation.accessor.dot.terraform
 #                ^^^^^^^ variable.other.member.terraform
 #                       ^ keyword.operator.terraform
 #                         ^^^^^ meta.function-call.terraform support.function.builtin.terraform
@@ -1076,11 +1076,11 @@
 /////
 
     tuple.*.foo.bar[0]
-#        ^ keyword.operator.accessor.terraform
+#        ^ punctuation.accessor.dot.terraform
 #         ^ keyword.operator.splat.terraform
-#          ^ keyword.operator.accessor.terraform
+#          ^ punctuation.accessor.dot.terraform
 #           ^^^ variable.other.member.terraform
-#              ^ keyword.operator.accessor.terraform
+#              ^ punctuation.accessor.dot.terraform
 #               ^^^ variable.other.member.terraform
 #                  ^ punctuation.section.brackets.begin.terraform
 #                   ^ constant.numeric.integer.terraform
@@ -1091,11 +1091,11 @@
 /////
 
     aws_route53_zone.project.name_servers.1
-#                   ^ keyword.operator.accessor.terraform
+#                   ^ punctuation.accessor.dot.terraform
 #                    ^^^^^^^ variable.other.member.terraform
-#                           ^ keyword.operator.accessor.terraform
+#                           ^ punctuation.accessor.dot.terraform
 #                            ^^^^^^^^^^^^ variable.other.member.terraform
-#                                        ^ keyword.operator.accessor.terraform
+#                                        ^ punctuation.accessor.dot.terraform
 #                                         ^ constant.numeric.integer.terraform
 #                                          ^ -constant -punctuation -variable
 
@@ -1113,7 +1113,7 @@
 #           ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #                 ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                  ^^^ meta.function-call.terraform support.constant.terraform
-#                     ^ meta.function-call.terraform keyword.operator.accessor.terraform
+#                     ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                      ^^^^^^^^^^^^^^^^^^ meta.function-call.terraform variable.other.member.terraform
 #                                        ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 
@@ -1128,7 +1128,7 @@
 #         ^ variable.declaration.terraform keyword.operator.assignment.terraform
 #           ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #           ^^^^^ string.quoted.double.terraform
-#               ^ string.quoted.double.terraform punctuation.definition.string.end.terraform 
+#               ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 
 /////////////////////////////////////////////////////////////////////
 // Function Calls
@@ -1152,15 +1152,15 @@
 #   ^^^^^^^^^^ meta.function-call.terraform variable.function.terraform
 #             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #              ^^^^^^^ meta.function-call.terraform
-#                     ^ meta.function-call.terraform keyword.operator.accessor.terraform
+#                     ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                      ^^^^ meta.function-call.terraform variable.other.member.terraform
-#                          ^ meta.function-call.terraform keyword.operator.accessor.terraform
+#                          ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                           ^^^^^^^^^^ meta.function-call.terraform variable.other.member.terraform
 #                                     ^ meta.function-call.terraform punctuation.separator.terraform
 #                                       ^ meta.function-call.terraform constant.numeric.integer.terraform
 #                                        ^ meta.function-call.terraform punctuation.separator.terraform
 #                                          ^^^^^ meta.function-call.terraform
-#                                               ^ meta.function-call.terraform keyword.operator.accessor.terraform
+#                                               ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                                                ^^^^^ meta.function-call.terraform variable.other.member.terraform
 #                                                     ^ meta.function-call.terraform keyword.operator.arithmetic.terraform
 #                                                      ^ meta.function-call.terraform constant.numeric.integer.terraform
@@ -1205,7 +1205,7 @@
 #                    ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                     ^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
 #                       ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                        ^ meta.function-call.terraform punctuation.section.parens.end.terraform 
+#                        ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 
 /////
 // Nested function calls.
@@ -1285,7 +1285,7 @@
 #                            ^ meta.function-call.terraform keyword.operator.terraform
 #                              ^ meta.function-call.terraform variable.other.readwrite.terraform
 #                               ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                ^ meta.function-call.terraform punctuation.section.parens.end.terraform 
+#                                ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 
 /////////////////////////////////////////////////////////////////////
 // Built-in Terraform Functions
@@ -1425,7 +1425,7 @@
 #                                ^^^^ meta.function-call.terraform string.quoted.double.terraform
 #                                    ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
 #                                     ^ meta.function-call.terraform punctuation.section.parens.end.terraform
- 
+
       lower("HELLO")
 #     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
@@ -1452,7 +1452,7 @@
 #                        ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                         ^^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
 #                                           ^ meta.function-call.terraform punctuation.section.parens.end.terraform
- 
+
       replace("1 + 2 + 3", "+", "-")
 #     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
@@ -1584,7 +1584,7 @@
 #                     ^^ meta.function-call.terraform string.quoted.double.terraform
 #                       ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
 #                        ^ meta.function-call.terraform punctuation.section.parens.end.terraform
- 
+
       contains(["a"], "a")
 #     ^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
@@ -1667,7 +1667,7 @@
 #                 ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
 #                  ^ meta.function-call.terraform meta.braces.terraform constant.numeric.integer.terraform
 #                   ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                    ^ meta.function-call.terraform punctuation.section.parens.end.terraform 
+#                    ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 
       length([])
 #     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
@@ -2016,7 +2016,7 @@
 #     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #             ^^^^ meta.function-call.terraform support.constant.terraform
-#                 ^ meta.function-call.terraform keyword.operator.accessor.terraform
+#                 ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                  ^^^^ meta.function-call.terraform variable.other.member.terraform
 #                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 
@@ -2047,7 +2047,7 @@
 #          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #           ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #             ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                 ^ meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
+#                 ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                  ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                        ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
 #                         ^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
@@ -2059,7 +2059,7 @@
 #                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                 ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #                   ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                       ^ meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
+#                       ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                        ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                              ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
 #                               ^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
@@ -2069,7 +2069,7 @@
 #     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #             ^^^^ meta.function-call.terraform support.constant.terraform
-#                 ^ meta.function-call.terraform keyword.operator.accessor.terraform
+#                 ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                  ^^^^^^ meta.function-call.terraform variable.other.member.terraform
 #                        ^ meta.function-call.terraform punctuation.separator.terraform
 #                          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
@@ -2082,7 +2082,7 @@
 #                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                 ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #                   ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                       ^ meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
+#                       ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                        ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                              ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
 #                               ^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
@@ -2094,7 +2094,7 @@
 #                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                   ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #                     ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                         ^ meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
+#                         ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                          ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                                ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
 #                                 ^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
@@ -2133,7 +2133,7 @@
 #                                         ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                                          ^^^^^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
 #                                                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
- 
+
       timeadd("2017-11-22T00:00:00Z", "10m")
 #     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
@@ -2238,7 +2238,7 @@
 #                               ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
 #                                ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 #                                 ^ -function
- 
+
       md5("hello world")
 #     ^^^ meta.function-call.terraform support.function.builtin.terraform
 #        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
@@ -2254,7 +2254,7 @@
 #                           ^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                            ^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #                              ^^^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                                  ^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
+#                                  ^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                                   ^^^^^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                                         ^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
 #                                          ^^^^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform
@@ -2379,7 +2379,7 @@
 #             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #              ^ meta.function-call.terraform constant.numeric.integer.terraform
 #               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
- 
+
       toset(["a", "b", "c"])
 #     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
@@ -2416,7 +2416,7 @@
 #        ^ variable.other.readwrite.terraform
 #          ^^ keyword.operator.word.terraform
 #             ^^^ support.constant.terraform
-#                ^ keyword.operator.accessor.terraform
+#                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
 #                      ^ keyword.operator.terraform
 #                        ^^^^^ meta.function-call.terraform support.function.builtin.terraform
@@ -2437,7 +2437,7 @@
 #           ^ variable.other.readwrite.terraform
 #             ^^ keyword.operator.word.terraform
 #                ^^^ support.constant.terraform
-#                   ^ keyword.operator.accessor.terraform
+#                   ^ punctuation.accessor.dot.terraform
 #                    ^^^ variable.other.member.terraform
 #                        ^ keyword.operator.terraform
 #                          ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
@@ -2461,16 +2461,16 @@
 #        ^ variable.other.readwrite.terraform
 #          ^^ keyword.operator.word.terraform
 #             ^^^ support.constant.terraform
-#                ^ keyword.operator.accessor.terraform
+#                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
 #                      ^ keyword.operator.terraform
 #                        ^ variable.other.readwrite.terraform
-#                         ^ keyword.operator.accessor.terraform
+#                         ^ punctuation.accessor.dot.terraform
 #                          ^^^^^^^^^^ variable.other.member.terraform
 #                                    ^ punctuation.section.brackets.begin.terraform
 #                                     ^ constant.numeric.integer.terraform
 #                                      ^ punctuation.section.brackets.end.terraform
-#                                       ^ keyword.operator.accessor.terraform
+#                                       ^ punctuation.accessor.dot.terraform
 #                                        ^^^^ variable.other.member.terraform
 #                                            ^ punctuation.section.brackets.end.terraform
 
@@ -2484,17 +2484,17 @@
 #        ^ variable.other.readwrite.terraform
 #          ^^ keyword.operator.word.terraform
 #             ^^^ support.constant.terraform
-#                ^ keyword.operator.accessor.terraform
+#                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
 #                      ^ keyword.operator.terraform
 #                        ^ variable.other.readwrite.terraform
-#                         ^ keyword.operator.accessor.terraform
+#                         ^ punctuation.accessor.dot.terraform
 #                          ^^^^^^^^^^ variable.other.member.terraform
 #                                    ^ punctuation.section.brackets.end.terraform
 #                                     ^ punctuation.section.brackets.begin.terraform
 #                                      ^ constant.numeric.integer.terraform
 #                                       ^ punctuation.section.brackets.end.terraform
-#                                        ^ keyword.operator.accessor.terraform
+#                                        ^ punctuation.accessor.dot.terraform
 #                                         ^^^^ variable.other.member.terraform
 
 /////
@@ -2510,12 +2510,12 @@
 #         ^^^^^^^^ variable.other.readwrite.terraform
 #                  ^^ keyword.operator.word.terraform
 #                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
-#                                 ^ keyword.operator.accessor.terraform
+#                                 ^ punctuation.accessor.dot.terraform
 #                                  ^^^^^^ variable.other.member.terraform
 #                                        ^ keyword.operator.terraform
       instance.private_dns
 #     ^^^^^^^^ variable.other.readwrite.terraform
-#             ^ keyword.operator.accessor.terraform
+#             ^ punctuation.accessor.dot.terraform
 #              ^^^^^^^^^^^ variable.other.member.terraform
     ]
 #   ^ punctuation.section.brackets.end.terraform
@@ -2533,13 +2533,13 @@
 #         ^^^^^^^^ variable.other.readwrite.terraform
 #                  ^^ keyword.operator.word.terraform
 #                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
-#                                 ^ keyword.operator.accessor.terraform
+#                                 ^ punctuation.accessor.dot.terraform
 #                                  ^^^^^^ variable.other.member.terraform
-#                                        ^ keyword.operator.terraform 
+#                                        ^ keyword.operator.terraform
       (instance.public_ip != "" ? list(instance.private_ip, instance.public_ip) : list(instance.private_ip))
 #     ^ punctuation.section.parens.begin.terraform
 #      ^^^^^^^^ variable.other.readwrite.terraform
-#              ^ keyword.operator.accessor.terraform
+#              ^ punctuation.accessor.dot.terraform
 #               ^^^^^^^^^ variable.other.member.terraform
 #                         ^^ keyword.operator.terraform
 #                            ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
@@ -2548,20 +2548,20 @@
 #                                 ^^^^ meta.function-call.terraform support.function.builtin.terraform
 #                                     ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                                      ^^^^^^^^ meta.function-call.terraform
-#                                              ^ meta.function-call.terraform keyword.operator.accessor.terraform
+#                                              ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                                               ^^^^^^^^^^ meta.function-call.terraform variable.other.member.terraform
 #                                                         ^ meta.function-call.terraform punctuation.separator.terraform
 #                                                           ^^^^^^^^ meta.function-call.terraform
-#                                                                   ^ meta.function-call.terraform keyword.operator.accessor.terraform
+#                                                                   ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                                                                    ^^^^^^^^^ meta.function-call.terraform variable.other.member.terraform
 #                                                                             ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 #                                                                               ^ keyword.operator.terraform
 #                                                                                 ^^^^ meta.function-call.terraform support.function.builtin.terraform
 #                                                                                     ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                                                                                      ^^^^^^^^ meta.function-call.terraform
-#                                                                                              ^ meta.function-call.terraform keyword.operator.accessor.terraform
+#                                                                                              ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                                                                                               ^^^^^^^^^^ meta.function-call.terraform variable.other.member.terraform
-#                                                                                                         ^ meta.function-call.terraform punctuation.section.parens.end.terraform 
+#                                                                                                         ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 #                                                                                                          ^ punctuation.section.parens.end.terraform
     ]
 #   ^ punctuation.section.brackets.end.terraform
@@ -2573,37 +2573,37 @@
     value = [
 #   ^^^^^ variable.declaration.terraform variable.other.readwrite.terraform
 #         ^^ variable.declaration.terraform keyword.operator.assignment.terraform
-#           ^ punctuation.section.brackets.begin.terraform 
+#           ^ punctuation.section.brackets.begin.terraform
       for instance in aws_instance.ubuntu:
 #     ^^^ keyword.control.terraform
 #         ^^^^^^^^ variable.other.readwrite.terraform
 #                  ^^ keyword.operator.word.terraform
 #                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
-#                                 ^ keyword.operator.accessor.terraform
+#                                 ^ punctuation.accessor.dot.terraform
 #                                  ^^^^^^ variable.other.member.terraform
-#                                        ^ keyword.operator.terraform 
+#                                        ^ keyword.operator.terraform
       (instance.public_ip != "" ? [instance.private_ip, instance.public_ip] : [instance.private_ip])
 #     ^ punctuation.section.parens.begin.terraform
 #      ^^^^^^^^ variable.other.readwrite.terraform
-#              ^ keyword.operator.accessor.terraform
+#              ^ punctuation.accessor.dot.terraform
 #               ^^^^^^^^^ variable.other.member.terraform
 #                         ^^ keyword.operator.terraform
 #                            ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                             ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 #                               ^ keyword.operator.terraform
 #                                 ^ punctuation.section.brackets.begin.terraform
-#                                          ^ keyword.operator.accessor.terraform
+#                                          ^ punctuation.accessor.dot.terraform
 #                                           ^^^^^^^^^^ variable.other.member.terraform
 #                                                     ^ punctuation.separator.terraform
-#                                                               ^ keyword.operator.accessor.terraform 
-#                                                                ^^^^^^^^^ variable.other.member.terraform  
+#                                                               ^ punctuation.accessor.dot.terraform
+#                                                                ^^^^^^^^^ variable.other.member.terraform
 #                                                                         ^ punctuation.section.brackets.end.terraform
 #                                                                           ^ keyword.operator.terraform
 #                                                                             ^ punctuation.section.brackets.begin.terraform
-#                                                                                      ^ keyword.operator.accessor.terraform
+#                                                                                      ^ punctuation.accessor.dot.terraform
 #                                                                                       ^^^^^^^^^^ variable.other.member.terraform
-#                                                                                                 ^ punctuation.section.brackets.end.terraform  
-#                                                                                                  ^ punctuation.section.parens.end.terraform 
+#                                                                                                 ^ punctuation.section.brackets.end.terraform
+#                                                                                                  ^ punctuation.section.parens.end.terraform
     ]
 #   ^ punctuation.section.brackets.end.terraform
 
@@ -2617,7 +2617,7 @@
 #        ^ variable.other.readwrite.terraform
 #          ^^ keyword.operator.word.terraform
 #             ^^^ support.constant.terraform
-#                ^ keyword.operator.accessor.terraform
+#                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
 #                      ^ keyword.operator.terraform
 #                        ^^^^^ meta.function-call.terraform support.function.builtin.terraform
@@ -2721,7 +2721,7 @@
 #        ^ variable.other.readwrite.terraform
 #          ^^ keyword.operator.word.terraform
 #             ^^^ support.constant.terraform
-#                ^ keyword.operator.accessor.terraform
+#                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
 #                      ^ keyword.operator.terraform
 #                        ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
@@ -2755,7 +2755,7 @@
 #         ^ variable.other.readwrite.terraform
 #           ^^ keyword.operator.word.terraform
 #              ^^^ support.constant.terraform
-#                 ^ keyword.operator.accessor.terraform
+#                 ^ punctuation.accessor.dot.terraform
 #                  ^^^^^^^ variable.other.member.terraform
 #                         ^ keyword.operator.terraform
 #                           ^ variable.other.readwrite.terraform
@@ -2764,7 +2764,7 @@
 #       ^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #             ^ meta.function-call.terraform
-#              ^ meta.function-call.terraform punctuation.section.parens.end.terraform 
+#              ^ meta.function-call.terraform punctuation.section.parens.end.terraform
     }
 #   ^ punctuation.section.braces.end.terraform
 
@@ -2825,7 +2825,7 @@
 #          ^^ meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
 #            ^ meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #             ^^^^^^^^ meta.block.terraform string.quoted.double.terraform
-    
+
       dynamic "ingress" {
 #     ^^^^^^^ meta.block.terraform meta.type.terraform entity.name.type.terraform
 #             ^ meta.block.terraform meta.type.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
@@ -2835,7 +2835,7 @@
 #       ^^^^^^^^ meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
 #                ^^ meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
 #                  ^^^ meta.block.terraform meta.block.terraform support.constant.terraform
-#                     ^ meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform
+#                     ^ meta.block.terraform meta.block.terraform punctuation.accessor.dot.terraform
 #                      ^^^^^^^^^^^^^ meta.block.terraform meta.block.terraform variable.other.member.terraform
         content {
 #       ^^^^^^^ meta.block.terraform meta.block.terraform meta.type.terraform entity.name.type.terraform
@@ -2843,12 +2843,12 @@
           from_port = ingress.value
 #         ^^^^^^^^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
 #                   ^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
-#                            ^ meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform
+#                            ^ meta.block.terraform meta.block.terraform meta.block.terraform punctuation.accessor.dot.terraform
 #                             ^^^^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform
           to_port   = ingress.value
 #         ^^^^^^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
 #                   ^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
-#                            ^ meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform
+#                            ^ meta.block.terraform meta.block.terraform meta.block.terraform punctuation.accessor.dot.terraform
           protocol  = "tcp" + "IP"
 #         ^^^^^^^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
 #                   ^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
@@ -2909,36 +2909,36 @@
 
     var.something
 #   ^^^ support.constant.terraform
-#      ^ keyword.operator.accessor.terraform
+#      ^ punctuation.accessor.dot.terraform
 #       ^^^^^^^^^ variable.other.member.terraform
 
     local.something
 #   ^^^^^ support.constant.terraform
-#        ^ keyword.operator.accessor.terraform
+#        ^ punctuation.accessor.dot.terraform
 #         ^^^^^^^^^ variable.other.member.terraform
 
     module.name.output_name
 #   ^^^^^^ support.constant.terraform
-#         ^ keyword.operator.accessor.terraform
+#         ^ punctuation.accessor.dot.terraform
 #          ^^^^ variable.other.member.terraform
-#              ^ keyword.operator.accessor.terraform
+#              ^ punctuation.accessor.dot.terraform
 #               ^^^^^^^^^^^ variable.other.member.terraform
 
     data.data_type.name
 #   ^^^^ support.constant.terraform
-#       ^ keyword.operator.accessor.terraform
+#       ^ punctuation.accessor.dot.terraform
 #        ^^^^^^^^^ variable.other.member.terraform
-#                 ^ keyword.operator.accessor.terraform
+#                 ^ punctuation.accessor.dot.terraform
 #                  ^^^^ variable.other.member.terraform
 
     path.module
 #   ^^^^ support.constant.terraform
-#       ^ keyword.operator.accessor.terraform
+#       ^ punctuation.accessor.dot.terraform
 #        ^^^^^^ variable.other.member.terraform
 
     terraform.workspace
 #   ^^^^^^^^^ support.constant.terraform
-#            ^ keyword.operator.accessor.terraform
+#            ^ punctuation.accessor.dot.terraform
 #             ^^^^^^^^^ variable.other.member.terraform
 
 /////////////////////////////////////////////////////////////////////
@@ -3041,7 +3041,7 @@
 #   ^^^^^^^ string.unquoted.heredoc.terraform
 #          ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
 #            ^^^ meta.interpolation.terraform support.constant.terraform
-#               ^ meta.interpolation.terraform keyword.operator.accessor.terraform
+#               ^ meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                ^^^^ meta.interpolation.terraform variable.other.member.terraform
 #                    ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
     END
@@ -3059,7 +3059,7 @@
 #   ^^^^^^^^^ support.constant.terraform
 #             ^^^^^^ keyword.control.import.terraform
 #                    ^^^^^^^^^^^^ entity.name.label.terraform
-#                                ^ keyword.operator.accessor.terraform
+#                                ^ punctuation.accessor.dot.terraform
 #                                 ^^^^^^^ variable.other.member.terraform
 #                                         ^^^^^^^^^^ entity.name.label.terraform
 
@@ -3071,7 +3071,6 @@
 #   ^^^^^^^^^ support.constant.terraform
 #             ^^^^^^ keyword.control.import.terraform
 #                    ^^^^^^^^^^^^^^^^^^^^ entity.name.label.terraform
-#                                        ^ keyword.operator.accessor.terraform
+#                                        ^ punctuation.accessor.dot.terraform
 #                                         ^^^^^ variable.other.member.terraform
 #                                               ^^^^^^ constant.numeric.integer.terraform
- 
\ No newline at end of file

From 99b61e725e7db7e329efe620bfddf2c92bd8d856 Mon Sep 17 00:00:00 2001
From: FichteFoll <fichtefoll2@googlemail.com>
Date: Wed, 24 Jul 2024 16:51:57 +0200
Subject: [PATCH 04/11] Use `keyword.declaration` scope

---
 Terraform.sublime-syntax |  2 +-
 syntax_test_terraform.tf | 18 +++++++++---------
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/Terraform.sublime-syntax b/Terraform.sublime-syntax
index 2d1294e..a5dd5fb 100644
--- a/Terraform.sublime-syntax
+++ b/Terraform.sublime-syntax
@@ -521,7 +521,7 @@ contexts:
   block:
     - match: (?:\b({{terraform_known_blocks}})\b|({{identifer}}))(?=[\s\"\-[:word:]]*(\{))
       captures:
-        1: storage.type.terraform
+        1: keyword.declaration.terraform
         2: entity.name.type.terraform
       push:
         - meta_scope: meta.type.terraform
diff --git a/syntax_test_terraform.tf b/syntax_test_terraform.tf
index 482cbbb..9d6e073 100644
--- a/syntax_test_terraform.tf
+++ b/syntax_test_terraform.tf
@@ -2814,7 +2814,7 @@
 /////
 
     resource "aws_security_group" "example" {
-#   ^^^^^^^^ meta.type.terraform storage.type.terraform
+#   ^^^^^^^^ meta.type.terraform keyword.declaration.terraform
 #            ^ meta.type.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #             ^^^^^^^^^^^^^^^^^^^ meta.type.terraform string.quoted.double.terraform
 #                                 ^ meta.type.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
@@ -2946,42 +2946,42 @@
 /////////////////////////////////////////////////////////////////////
 
     resource {}
-#   ^^^^^^^^ meta.type.terraform storage.type.terraform
+#   ^^^^^^^^ meta.type.terraform keyword.declaration.terraform
 #            ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
 #             ^ meta.block.terraform punctuation.section.block.end.terraform
 
     provider {}
-#   ^^^^^^^^ meta.type.terraform storage.type.terraform
+#   ^^^^^^^^ meta.type.terraform keyword.declaration.terraform
 #            ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
 #             ^ meta.block.terraform punctuation.section.block.end.terraform
 
     variable {}
-#   ^^^^^^^^ meta.type.terraform storage.type.terraform
+#   ^^^^^^^^ meta.type.terraform keyword.declaration.terraform
 #            ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
 #             ^ meta.block.terraform punctuation.section.block.end.terraform
 
     output {}
-#   ^^^^^^ meta.type.terraform storage.type.terraform
+#   ^^^^^^ meta.type.terraform keyword.declaration.terraform
 #          ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
 #           ^ meta.block.terraform punctuation.section.block.end.terraform
 
     locals {}
-#   ^^^^^^ meta.type.terraform storage.type.terraform
+#   ^^^^^^ meta.type.terraform keyword.declaration.terraform
 #          ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
 #           ^ meta.block.terraform punctuation.section.block.end.terraform
 
     module {}
-#   ^^^^^^ meta.type.terraform storage.type.terraform
+#   ^^^^^^ meta.type.terraform keyword.declaration.terraform
 #          ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
 #           ^ meta.block.terraform punctuation.section.block.end.terraform
 
     data {}
-#   ^^^^ meta.type.terraform storage.type.terraform
+#   ^^^^ meta.type.terraform keyword.declaration.terraform
 #        ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
 #         ^ meta.block.terraform punctuation.section.block.end.terraform
 
     terraform {}
-#   ^^^^^^^^^ meta.type.terraform storage.type.terraform
+#   ^^^^^^^^^ meta.type.terraform keyword.declaration.terraform
 #             ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
 #              ^ meta.block.terraform punctuation.section.block.end.terraform
 

From 7d41a4fbf2cc4bad8e387682621723bbf58fe391 Mon Sep 17 00:00:00 2001
From: FichteFoll <fichtefoll2@googlemail.com>
Date: Wed, 24 Jul 2024 17:01:40 +0200
Subject: [PATCH 05/11] Simplify colon match

---
 Terraform.sublime-syntax | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Terraform.sublime-syntax b/Terraform.sublime-syntax
index a5dd5fb..b0f0671 100644
--- a/Terraform.sublime-syntax
+++ b/Terraform.sublime-syntax
@@ -296,7 +296,7 @@ contexts:
       scope: keyword.operator.terraform
     - match: \.\.\. # ...
       scope: keyword.operator.terraform
-    - match: "\\:"  # :
+    - match: ':'  # :
       scope: keyword.operator.terraform
 
   # Terraform "import" statements

From 7f9aacb70ed0bdca4507ab9437bfe98b4a4fb442 Mon Sep 17 00:00:00 2001
From: FichteFoll <fichtefoll2@googlemail.com>
Date: Wed, 24 Jul 2024 17:18:30 +0200
Subject: [PATCH 06/11] Adjust interpolation scopes

- Span `meta.string` over the entire string.
- Use `punctuation.section` for interpolation punctuation.
- Highlight `~` operator to trim whitespace only immediately next to the
  section punctuation.
- Set `source.terraform` scope for the interpolation body.
---
 Terraform.sublime-syntax |  26 ++++---
 syntax_test_terraform.tf | 150 +++++++++++++++++++++------------------
 2 files changed, 91 insertions(+), 85 deletions(-)

diff --git a/Terraform.sublime-syntax b/Terraform.sublime-syntax
index b0f0671..418edb7 100644
--- a/Terraform.sublime-syntax
+++ b/Terraform.sublime-syntax
@@ -209,7 +209,7 @@ contexts:
       comment: Strings
       scope: punctuation.definition.string.begin.terraform
       push:
-        - meta_scope: string.quoted.double.terraform
+        - meta_scope: meta.string.terraform string.quoted.double.terraform
         - match: '"'
           scope: punctuation.definition.string.end.terraform
           pop: true
@@ -222,21 +222,19 @@ contexts:
   #
   # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#templates
   string_interpolation:
-    - match: (\$|\%)\{
-      comment: String interpolation
-      scope: keyword.other.interpolation.begin.terraform
+    - match: ([$%]\{)(~)?
+      captures:
+        1: punctuation.section.interpolation.begin.terraform
+        2: keyword.operator.template.trim.left.terraform
       push:
         - meta_scope: meta.interpolation.terraform
-        - clear_scopes: 1 # Clear the string.* scope.
-        - match: \}
-          scope: keyword.other.interpolation.end.terraform
+        - meta_content_scope: source.terraform
+        - clear_scopes: 1  # Clear the string.* scope.
+        - match: (~)?(\})
+          captures:
+            1: keyword.operator.template.trim.right.terraform
+            2: punctuation.section.interpolation.end.terraform
           pop: true
-        - match: \~\s
-          comment: Trim left whitespace
-          scope: keyword.operator.template.left.trim.terraform
-        - match: \s\~
-          comment: Trim right whitespace
-          scope: keyword.operator.template.right.trim.terraform
         - match: \b(if|else|endif|for|in|endfor)\b
           comment: if/else/endif and for/in/endfor directives
           scope: keyword.control.terraform
@@ -252,7 +250,7 @@ contexts:
         1: keyword.operator.heredoc.terraform
         2: keyword.control.heredoc.terraform
       push:
-        - meta_content_scope: string.unquoted.heredoc.terraform
+        - meta_content_scope: meta.string.terraform string.unquoted.heredoc.terraform
         - match: ^\s*\2\s*$
           comment: The heredoc token identifier (second capture above).
           scope: keyword.control.heredoc.terraform
diff --git a/syntax_test_terraform.tf b/syntax_test_terraform.tf
index 9d6e073..24d0eb4 100644
--- a/syntax_test_terraform.tf
+++ b/syntax_test_terraform.tf
@@ -270,10 +270,12 @@
       "some ${interpolation} string"
 #   ^ -punctuation -string
 #     ^ punctuation.definition.string.begin.terraform
+#     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform
 #      ^^^^^ string.quoted.double.terraform
-#           ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#           ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #             ^^^^^^^^^^^^^^ meta.interpolation.terraform
-#                          ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#              ^^^^^^^^^^^^ source.terraform
+#                          ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                            ^^^^^^^ string.quoted.double.terraform
 #                                  ^ punctuation.definition.string.end.terraform
 #                                   ^ -punctuation -string
@@ -283,12 +285,14 @@
 /////
 
       "%{~ fff ~}"
+#     ^^^^^^^^^^^^ meta.string.terraform
+#      ^^^^^^^^^^ meta.interpolation.terraform
 #     ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#      ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#        ^^ meta.interpolation.terraform keyword.operator.template.left.trim.terraform
-#          ^^^^^^ meta.interpolation.terraform
-#             ^^ meta.interpolation.terraform keyword.operator.template.right.trim.terraform
-#               ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#      ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
+#        ^ meta.interpolation.terraform keyword.operator.template.trim.left.terraform
+#         ^^^^^ source.terraform
+#              ^ keyword.operator.template.trim.right.terraform
+#               ^ punctuation.section.interpolation.end.terraform
 #                ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 
 /////
@@ -297,13 +301,14 @@
 
     "${ something ? true : false }"
 #   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#    ^^ keyword.other.interpolation.begin.terraform
+#    ^^ punctuation.section.interpolation.begin.terraform
 #     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
+#      ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform
 #                 ^ keyword.operator.terraform
 #                   ^^^^ meta.interpolation.terraform constant.language.terraform
 #                        ^ meta.interpolation.terraform keyword.operator.terraform
 #                          ^^^^^ meta.interpolation.terraform constant.language.terraform
-#                                ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                                ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                                 ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 
 /////
@@ -313,11 +318,11 @@
     "hello ${aws_instance.ubuntu}"
 #   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #   ^^^^^^^ string.quoted.double.terraform
-#          ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#          ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #            ^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
 #                        ^ meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                         ^^^^^^ meta.interpolation.terraform variable.other.member.terraform
-#                               ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                               ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                                ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 
 /////
@@ -326,7 +331,7 @@
 
       "${formatdate("DD MMM YYYY hh:mm ZZZ", "2018-01-02T23:12:01Z")}"
 #     ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#      ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#      ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #        ^^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform support.function.builtin.terraform
 #                  ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                   ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
@@ -335,7 +340,7 @@
 #                                            ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                                             ^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform
 #                                                                  ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                                                   ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                                                                   ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                                                                    ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 
 /////
@@ -347,14 +352,14 @@
 #      ^^ variable.declaration.terraform keyword.operator.assignment.terraform
 #        ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #         ^^^^^^^^^^^^^^^^^^ string.quoted.double.terraform
-#                           ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#                           ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                             ^^^ meta.interpolation.terraform meta.function-call.terraform support.function.builtin.terraform
 #                                ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                                 ^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform
 #                                          ^ meta.interpolation.terraform meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                                           ^ meta.interpolation.terraform meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
 #                                            ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                             ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                                             ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                                              ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 
 /////
@@ -364,13 +369,13 @@
     "something ${{test = 3}}"
 #   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #    ^^^^^^^^^^ string.quoted.double.terraform
-#              ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#              ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                ^ meta.interpolation.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
 #                 ^^^^ meta.interpolation.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
 #                      ^ meta.interpolation.terraform meta.braces.terraform keyword.operator.terraform
 #                        ^ meta.interpolation.terraform meta.braces.terraform constant.numeric.integer.terraform
 #                         ^ meta.interpolation.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                          ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                          ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                           ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 
 /////
@@ -380,7 +385,7 @@
     "something ${[1, 2, 3]}"
 #   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #    ^^^^^^^^^^ string.quoted.double.terraform
-#              ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#              ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                ^ meta.interpolation.terraform punctuation.section.brackets.begin.terraform
 #                 ^ meta.interpolation.terraform constant.numeric.integer.terraform
 #                  ^ meta.interpolation.terraform punctuation.separator.terraform
@@ -388,7 +393,7 @@
 #                     ^ meta.interpolation.terraform punctuation.separator.terraform
 #                       ^ meta.interpolation.terraform constant.numeric.integer.terraform
 #                        ^ meta.interpolation.terraform punctuation.section.brackets.end.terraform
-#                         ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                         ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                          ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 
 /////
@@ -397,11 +402,11 @@
 
     "${var.something}"
 #   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#    ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#    ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #      ^^^ meta.interpolation.terraform support.constant.terraform
 #         ^ meta.interpolation.terraform punctuation.accessor.dot.terraform
 #          ^^^^^^^^^ meta.interpolation.terraform variable.other.member.terraform
-#                   ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                   ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                    ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 
 /////
@@ -413,7 +418,7 @@
 #           ^^ variable.declaration.terraform keyword.operator.assignment.terraform
 #             ^ punctuation.section.brackets.begin.terraform
 #              ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#               ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                 ^^^^^^^ meta.interpolation.terraform meta.function-call.terraform support.function.builtin.terraform
 #                        ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                         ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
@@ -428,7 +433,7 @@
 #                                                                            ^^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform
 #                                                                              ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
 #                                                                               ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                                                                ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                                                                                ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                                                                                 ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 #                                                                                  ^ punctuation.section.brackets.end.terraform
 #                                                                                   ^ -meta -string -variable -punctuation
@@ -439,19 +444,19 @@
 
     "${file("${path.module}/text_files/ecs_app")}"
 #   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#    ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#    ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #      ^^^^ meta.interpolation.terraform meta.function-call.terraform support.function.builtin.terraform
 #          ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
 #           ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#            ^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#            ^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #              ^^^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
 #                  ^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                   ^^^^^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                         ^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                         ^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                          ^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform
 #                                             ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
 #                                              ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                               ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                                               ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                                                ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 
 /////////////////////////////////////////////////////////////////////
@@ -465,20 +470,20 @@
       "${ if name == "Mary" }${name}${ endif ~}"
 #    ^ -string -punctuation
 #     ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#      ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#      ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
 #         ^^ meta.interpolation.terraform keyword.control.terraform
 #                 ^^ meta.interpolation.terraform keyword.operator.terraform
 #                    ^ source.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                    ^^^^^^ source.terraform meta.interpolation.terraform string.quoted.double.terraform
 #                         ^ source.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                           ^ keyword.other.interpolation.end.terraform
-#                            ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                  ^ keyword.other.interpolation.end.terraform
-#                                   ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#                           ^ punctuation.section.interpolation.end.terraform
+#                            ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
+#                                  ^ punctuation.section.interpolation.end.terraform
+#                                   ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                                      ^^^^^ meta.interpolation.terraform keyword.control.terraform
-#                                            ^ meta.interpolation.terraform keyword.operator.template.right.trim.terraform
-#                                             ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                                            ^ meta.interpolation.terraform keyword.operator.template.trim.right.terraform
+#                                             ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                                              ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 #                                               ^ -string -punctuation
 
@@ -489,28 +494,28 @@
       "%{ if name == "Mary" }${name}%{ else }${ "Mary" }%{ endif ~}"
 #    ^ -string -punctuation
 #     ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#      ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#      ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
 #         ^^ meta.interpolation.terraform keyword.control.terraform
 #                 ^^ meta.interpolation.terraform keyword.operator.terraform
 #                    ^ source.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                    ^^^^^^ source.terraform meta.interpolation.terraform string.quoted.double.terraform
 #                         ^ source.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                           ^ keyword.other.interpolation.end.terraform
-#                            ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                  ^ keyword.other.interpolation.end.terraform
-#                                   ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#                           ^ punctuation.section.interpolation.end.terraform
+#                            ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
+#                                  ^ punctuation.section.interpolation.end.terraform
+#                                   ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                                      ^^^^ meta.interpolation.terraform keyword.control.terraform
-#                                           ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                            ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#                                           ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
+#                                            ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                                               ^ meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                                                ^^^^^ meta.interpolation.terraform string.quoted.double.terraform
-#                                                      ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                                      ^ keyword.other.interpolation.end.terraform
-#                                                       ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#                                                      ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
+#                                                      ^ punctuation.section.interpolation.end.terraform
+#                                                       ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                                                          ^^^^^ meta.interpolation.terraform keyword.control.terraform
-#                                                                ^ meta.interpolation.terraform keyword.operator.template.right.trim.terraform
-#                                                                 ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                                                                ^ meta.interpolation.terraform keyword.operator.template.trim.right.terraform
+#                                                                 ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                                                                  ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 #                                                                   ^ -string -punctuation
 
@@ -521,21 +526,21 @@
       "%{ for name in var.names ~}${name}%{ endfor ~}"
 #   ^ -string -punctuation
 #     ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#      ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#      ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #         ^^^ keyword.control.terraform
 #      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
 #                  ^^ keyword.control.terraform
 #                     ^^^ meta.interpolation.terraform support.constant.terraform
 #                        ^ meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                         ^^^^^ meta.interpolation.terraform variable.other.member.terraform
-#                               ^ keyword.operator.template.right.trim.terraform
-#                                ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                 ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                       ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                        ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#                               ^ keyword.operator.template.trim.right.terraform
+#                                ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
+#                                 ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
+#                                       ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
+#                                        ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                                           ^^^^^^ meta.interpolation.terraform keyword.control.terraform
-#                                                  ^ meta.interpolation.terraform keyword.operator.template.right.trim.terraform
-#                                                   ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                                                  ^ meta.interpolation.terraform keyword.operator.template.trim.right.terraform
+#                                                   ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                                                    ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
 #                                                     ^ -string -punctuation
 
@@ -2045,11 +2050,11 @@
 #     ^^^^ meta.function-call.terraform support.function.builtin.terraform
 #         ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#           ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#           ^^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #             ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
 #                 ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                  ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                        ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                        ^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                         ^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
 #                                    ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 
@@ -2057,11 +2062,11 @@
 #     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#                 ^^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                   ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
 #                       ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                        ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                              ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                              ^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                               ^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
 #                                          ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 
@@ -2080,11 +2085,11 @@
 #     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#                 ^^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                   ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
 #                       ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                        ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                              ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                              ^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                               ^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
 #                                          ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 
@@ -2092,11 +2097,11 @@
 #     ^^^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #                 ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                   ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#                   ^^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                     ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
 #                         ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                          ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                                ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                                ^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                                 ^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
 #                                                ^ meta.function-call.terraform punctuation.separator.terraform
 #                                                  ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
@@ -2252,11 +2257,11 @@
 #                ^^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform
 #                          ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                           ^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                            ^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
+#                            ^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
 #                              ^^^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
 #                                  ^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                                   ^^^^^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                                         ^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
+#                                         ^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
 #                                          ^^^^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform
 #                                                      ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
 #                                                       ^ meta.function-call.terraform punctuation.separator.terraform
@@ -3037,13 +3042,16 @@
     <<- END
 #   ^^^ keyword.operator.heredoc.terraform
 #       ^^^ keyword.control.heredoc.terraform
-    Hello, ${var.name}
-#   ^^^^^^^ string.unquoted.heredoc.terraform
-#          ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#            ^^^ meta.interpolation.terraform support.constant.terraform
-#               ^ meta.interpolation.terraform punctuation.accessor.dot.terraform
-#                ^^^^ meta.interpolation.terraform variable.other.member.terraform
-#                    ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
+    Hello, %{var.name}
+#^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform
+#^^^^^^^^^^ string.unquoted.heredoc.terraform
+#          ^^^^^^^^^^^ meta.interpolation.terraform
+#          ^^ punctuation.section.interpolation.begin.terraform
+#            ^^^^^^^^ source.terraform
+#            ^^^ support.constant.terraform
+#               ^ punctuation.accessor.dot.terraform
+#                ^^^^ variable.other.member.terraform
+#                    ^ punctuation.section.interpolation.end.terraform
     END
 #   ^^^^ keyword.control.heredoc.terraform
 

From d317e36244d1af7ca5855d70be6c50371f0d25a9 Mon Sep 17 00:00:00 2001
From: FichteFoll <fichtefoll2@googlemail.com>
Date: Wed, 24 Jul 2024 17:23:31 +0200
Subject: [PATCH 07/11] Use `variable.language` for special identifiers

These identifiers (called "variables" by the spec) are semantically not
constants. Instead, they provide access to external value sources and
should thus be scoped as special language variables comparable to the
C-like `this` or Python's `self`.
---
 Terraform.sublime-syntax |  4 +--
 syntax_test_terraform.tf | 62 ++++++++++++++++++++--------------------
 2 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/Terraform.sublime-syntax b/Terraform.sublime-syntax
index 418edb7..c9aae9d 100644
--- a/Terraform.sublime-syntax
+++ b/Terraform.sublime-syntax
@@ -135,8 +135,8 @@ contexts:
 
   named_value_references:
     - match: '\b({{named_values}})\b'
-      comment: Constant values available only to Terraform.
-      scope: support.constant.terraform
+      comment: Special variables available only to Terraform.
+      scope: variable.language.terraform
 
   type_keywords:
     - match: '\b({{terraform_type_keywords}})\b'
diff --git a/syntax_test_terraform.tf b/syntax_test_terraform.tf
index 24d0eb4..5dc1e64 100644
--- a/syntax_test_terraform.tf
+++ b/syntax_test_terraform.tf
@@ -403,7 +403,7 @@
     "${var.something}"
 #   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #    ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
-#      ^^^ meta.interpolation.terraform support.constant.terraform
+#      ^^^ meta.interpolation.terraform variable.language.terraform
 #         ^ meta.interpolation.terraform punctuation.accessor.dot.terraform
 #          ^^^^^^^^^ meta.interpolation.terraform variable.other.member.terraform
 #                   ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform
@@ -449,7 +449,7 @@
 #          ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
 #           ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #            ^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
-#              ^^^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
+#              ^^^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform variable.language.terraform
 #                  ^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                   ^^^^^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                         ^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
@@ -530,7 +530,7 @@
 #         ^^^ keyword.control.terraform
 #      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
 #                  ^^ keyword.control.terraform
-#                     ^^^ meta.interpolation.terraform support.constant.terraform
+#                     ^^^ meta.interpolation.terraform variable.language.terraform
 #                        ^ meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                         ^^^^^ meta.interpolation.terraform variable.other.member.terraform
 #                               ^ keyword.operator.template.trim.right.terraform
@@ -834,11 +834,11 @@
 
     [local.thing1, local.thing2]
 #   ^ punctuation.section.brackets.begin.terraform
-#    ^^^^^ support.constant.terraform
+#    ^^^^^ variable.language.terraform
 #         ^ punctuation.accessor.dot.terraform
 #          ^^^^^^ variable.other.member.terraform
 #                ^ punctuation.separator.terraform
-#                  ^^^^^ support.constant.terraform
+#                  ^^^^^ variable.language.terraform
 #                       ^ punctuation.accessor.dot.terraform
 #                        ^^^^^^ variable.other.member.terraform
 #                              ^ punctuation.section.brackets.end.terraform
@@ -963,7 +963,7 @@
 #   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
 #     ^^^^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
 #            ^ meta.braces.terraform keyword.operator.terraform
-#              ^^^ meta.braces.terraform support.constant.terraform
+#              ^^^ meta.braces.terraform variable.language.terraform
 #                 ^ meta.braces.terraform punctuation.accessor.dot.terraform
 #                  ^^^^^^ meta.braces.terraform variable.other.member.terraform
 #                         ^ meta.braces.terraform punctuation.section.braces.end.terraform
@@ -1022,7 +1022,7 @@
     {(var.path) = 1}
 #   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
 #    ^ meta.braces.terraform meta.mapping.key.terraform punctuation.section.parens.begin.terraform
-#     ^^^ meta.braces.terraform meta.mapping.key.terraform support.constant.terraform
+#     ^^^ meta.braces.terraform meta.mapping.key.terraform variable.language.terraform
 #        ^ meta.braces.terraform meta.mapping.key.terraform punctuation.accessor.dot.terraform
 #         ^^^^ meta.braces.terraform meta.mapping.key.terraform variable.other.member.terraform
 #             ^ meta.braces.terraform meta.mapping.key.terraform punctuation.section.parens.end.terraform
@@ -1066,7 +1066,7 @@
 #   ^^^ keyword.control.terraform
 #       ^ variable.other.readwrite.terraform
 #         ^^ keyword.operator.word.terraform
-#            ^^^ support.constant.terraform
+#            ^^^ variable.language.terraform
 #               ^ punctuation.accessor.dot.terraform
 #                ^^^^^^^ variable.other.member.terraform
 #                       ^ keyword.operator.terraform
@@ -1117,7 +1117,7 @@
 #         ^ variable.declaration.terraform keyword.operator.assignment.terraform
 #           ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #                 ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                  ^^^ meta.function-call.terraform support.constant.terraform
+#                  ^^^ meta.function-call.terraform variable.language.terraform
 #                     ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                      ^^^^^^^^^^^^^^^^^^ meta.function-call.terraform variable.other.member.terraform
 #                                        ^ meta.function-call.terraform punctuation.section.parens.end.terraform
@@ -2020,7 +2020,7 @@
       abspath(path.root)
 #     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^^^^ meta.function-call.terraform support.constant.terraform
+#             ^^^^ meta.function-call.terraform variable.language.terraform
 #                 ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                  ^^^^ meta.function-call.terraform variable.other.member.terraform
 #                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
@@ -2051,7 +2051,7 @@
 #         ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #           ^^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
-#             ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
+#             ^^^^ meta.function-call.terraform meta.interpolation.terraform variable.language.terraform
 #                 ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                  ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                        ^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
@@ -2063,7 +2063,7 @@
 #               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                 ^^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
-#                   ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
+#                   ^^^^ meta.function-call.terraform meta.interpolation.terraform variable.language.terraform
 #                       ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                        ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                              ^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
@@ -2073,7 +2073,7 @@
       fileset(path.module, "files/*.txt")
 #     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^^^^ meta.function-call.terraform support.constant.terraform
+#             ^^^^ meta.function-call.terraform variable.language.terraform
 #                 ^ meta.function-call.terraform punctuation.accessor.dot.terraform
 #                  ^^^^^^ meta.function-call.terraform variable.other.member.terraform
 #                        ^ meta.function-call.terraform punctuation.separator.terraform
@@ -2086,7 +2086,7 @@
 #               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                 ^^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
-#                   ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
+#                   ^^^^ meta.function-call.terraform meta.interpolation.terraform variable.language.terraform
 #                       ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                        ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                              ^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
@@ -2098,7 +2098,7 @@
 #                 ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                   ^^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
-#                     ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
+#                     ^^^^ meta.function-call.terraform meta.interpolation.terraform variable.language.terraform
 #                         ^ meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                          ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                                ^ meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
@@ -2258,7 +2258,7 @@
 #                          ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                           ^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                            ^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform
-#                              ^^^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
+#                              ^^^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform variable.language.terraform
 #                                  ^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform
 #                                   ^^^^^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
 #                                         ^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform
@@ -2420,7 +2420,7 @@
 #    ^^^ keyword.control.terraform
 #        ^ variable.other.readwrite.terraform
 #          ^^ keyword.operator.word.terraform
-#             ^^^ support.constant.terraform
+#             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
 #                      ^ keyword.operator.terraform
@@ -2441,7 +2441,7 @@
 #         ^ punctuation.separator.terraform
 #           ^ variable.other.readwrite.terraform
 #             ^^ keyword.operator.word.terraform
-#                ^^^ support.constant.terraform
+#                ^^^ variable.language.terraform
 #                   ^ punctuation.accessor.dot.terraform
 #                    ^^^ variable.other.member.terraform
 #                        ^ keyword.operator.terraform
@@ -2465,7 +2465,7 @@
 #    ^^^ keyword.control.terraform
 #        ^ variable.other.readwrite.terraform
 #          ^^ keyword.operator.word.terraform
-#             ^^^ support.constant.terraform
+#             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
 #                      ^ keyword.operator.terraform
@@ -2488,7 +2488,7 @@
 #    ^^^ keyword.control.terraform
 #        ^ variable.other.readwrite.terraform
 #          ^^ keyword.operator.word.terraform
-#             ^^^ support.constant.terraform
+#             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
 #                      ^ keyword.operator.terraform
@@ -2621,7 +2621,7 @@
 #    ^^^ keyword.control.terraform
 #        ^ variable.other.readwrite.terraform
 #          ^^ keyword.operator.word.terraform
-#             ^^^ support.constant.terraform
+#             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
 #                      ^ keyword.operator.terraform
@@ -2725,7 +2725,7 @@
 #    ^^^ meta.braces.terraform keyword.control.terraform
 #        ^ variable.other.readwrite.terraform
 #          ^^ keyword.operator.word.terraform
-#             ^^^ support.constant.terraform
+#             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
 #                      ^ keyword.operator.terraform
@@ -2759,7 +2759,7 @@
 #     ^^^ meta.braces.terraform keyword.control.terraform
 #         ^ variable.other.readwrite.terraform
 #           ^^ keyword.operator.word.terraform
-#              ^^^ support.constant.terraform
+#              ^^^ variable.language.terraform
 #                 ^ punctuation.accessor.dot.terraform
 #                  ^^^^^^^ variable.other.member.terraform
 #                         ^ keyword.operator.terraform
@@ -2839,7 +2839,7 @@
         for_each = var.service_ports
 #       ^^^^^^^^ meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
 #                ^^ meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
-#                  ^^^ meta.block.terraform meta.block.terraform support.constant.terraform
+#                  ^^^ meta.block.terraform meta.block.terraform variable.language.terraform
 #                     ^ meta.block.terraform meta.block.terraform punctuation.accessor.dot.terraform
 #                      ^^^^^^^^^^^^^ meta.block.terraform meta.block.terraform variable.other.member.terraform
         content {
@@ -2913,36 +2913,36 @@
 /////////////////////////////////////////////////////////////////////
 
     var.something
-#   ^^^ support.constant.terraform
+#   ^^^ variable.language.terraform
 #      ^ punctuation.accessor.dot.terraform
 #       ^^^^^^^^^ variable.other.member.terraform
 
     local.something
-#   ^^^^^ support.constant.terraform
+#   ^^^^^ variable.language.terraform
 #        ^ punctuation.accessor.dot.terraform
 #         ^^^^^^^^^ variable.other.member.terraform
 
     module.name.output_name
-#   ^^^^^^ support.constant.terraform
+#   ^^^^^^ variable.language.terraform
 #         ^ punctuation.accessor.dot.terraform
 #          ^^^^ variable.other.member.terraform
 #              ^ punctuation.accessor.dot.terraform
 #               ^^^^^^^^^^^ variable.other.member.terraform
 
     data.data_type.name
-#   ^^^^ support.constant.terraform
+#   ^^^^ variable.language.terraform
 #       ^ punctuation.accessor.dot.terraform
 #        ^^^^^^^^^ variable.other.member.terraform
 #                 ^ punctuation.accessor.dot.terraform
 #                  ^^^^ variable.other.member.terraform
 
     path.module
-#   ^^^^ support.constant.terraform
+#   ^^^^ variable.language.terraform
 #       ^ punctuation.accessor.dot.terraform
 #        ^^^^^^ variable.other.member.terraform
 
     terraform.workspace
-#   ^^^^^^^^^ support.constant.terraform
+#   ^^^^^^^^^ variable.language.terraform
 #            ^ punctuation.accessor.dot.terraform
 #             ^^^^^^^^^ variable.other.member.terraform
 
@@ -3048,7 +3048,7 @@
 #          ^^^^^^^^^^^ meta.interpolation.terraform
 #          ^^ punctuation.section.interpolation.begin.terraform
 #            ^^^^^^^^ source.terraform
-#            ^^^ support.constant.terraform
+#            ^^^ variable.language.terraform
 #               ^ punctuation.accessor.dot.terraform
 #                ^^^^ variable.other.member.terraform
 #                    ^ punctuation.section.interpolation.end.terraform

From 65379aaf89906d37015ae627de8e4ecba1a69a15 Mon Sep 17 00:00:00 2001
From: FichteFoll <fichtefoll2@googlemail.com>
Date: Wed, 24 Jul 2024 17:27:47 +0200
Subject: [PATCH 08/11] A colon in a for loop is punctuation

Scope name was inspired by Python.
---
 Terraform.sublime-syntax |  2 +-
 syntax_test_terraform.tf | 32 ++++++++++++++++----------------
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/Terraform.sublime-syntax b/Terraform.sublime-syntax
index c9aae9d..ff78c63 100644
--- a/Terraform.sublime-syntax
+++ b/Terraform.sublime-syntax
@@ -505,7 +505,7 @@ contexts:
       comment: if keyword
       scope: keyword.control.conditional.terraform
     - match: '\:'
-      scope: keyword.operator.terraform
+      scope: punctuation.section.block.loop.for.terraform
     - include: expressions
     - include: comments
     - include: comma
diff --git a/syntax_test_terraform.tf b/syntax_test_terraform.tf
index 5dc1e64..dec6e07 100644
--- a/syntax_test_terraform.tf
+++ b/syntax_test_terraform.tf
@@ -1069,7 +1069,7 @@
 #            ^^^ variable.language.terraform
 #               ^ punctuation.accessor.dot.terraform
 #                ^^^^^^^ variable.other.member.terraform
-#                       ^ keyword.operator.terraform
+#                       ^ punctuation.section.block.loop.for.terraform
 #                         ^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #                              ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                               ^ meta.function-call.terraform
@@ -1261,7 +1261,7 @@
 #                       ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                        ^^ meta.function-call.terraform string.quoted.double.terraform
 #                          ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                           ^ meta.function-call.terraform keyword.operator.terraform
+#                           ^ meta.function-call.terraform punctuation.section.block.loop.for.terraform
 #                             ^ meta.function-call.terraform variable.other.readwrite.terraform
 #                               ^^ meta.function-call.terraform storage.type.function.terraform
 #                                  ^ meta.function-call.terraform variable.other.readwrite.terraform
@@ -1287,7 +1287,7 @@
 #                        ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                         ^^ meta.function-call.terraform string.quoted.double.terraform
 #                           ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                            ^ meta.function-call.terraform keyword.operator.terraform
+#                            ^ meta.function-call.terraform punctuation.section.block.loop.for.terraform
 #                              ^ meta.function-call.terraform variable.other.readwrite.terraform
 #                               ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
 #                                ^ meta.function-call.terraform punctuation.section.parens.end.terraform
@@ -2423,7 +2423,7 @@
 #             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
-#                      ^ keyword.operator.terraform
+#                      ^ punctuation.section.block.loop.for.terraform
 #                        ^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #                             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                              ^ meta.function-call.terraform
@@ -2444,7 +2444,7 @@
 #                ^^^ variable.language.terraform
 #                   ^ punctuation.accessor.dot.terraform
 #                    ^^^ variable.other.member.terraform
-#                        ^ keyword.operator.terraform
+#                        ^ punctuation.section.block.loop.for.terraform
 #                          ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #                                ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                                 ^ meta.function-call.terraform
@@ -2468,7 +2468,7 @@
 #             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
-#                      ^ keyword.operator.terraform
+#                      ^ punctuation.section.block.loop.for.terraform
 #                        ^ variable.other.readwrite.terraform
 #                         ^ punctuation.accessor.dot.terraform
 #                          ^^^^^^^^^^ variable.other.member.terraform
@@ -2491,7 +2491,7 @@
 #             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
-#                      ^ keyword.operator.terraform
+#                      ^ punctuation.section.block.loop.for.terraform
 #                        ^ variable.other.readwrite.terraform
 #                         ^ punctuation.accessor.dot.terraform
 #                          ^^^^^^^^^^ variable.other.member.terraform
@@ -2517,7 +2517,7 @@
 #                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
 #                                 ^ punctuation.accessor.dot.terraform
 #                                  ^^^^^^ variable.other.member.terraform
-#                                        ^ keyword.operator.terraform
+#                                        ^ punctuation.section.block.loop.for.terraform
       instance.private_dns
 #     ^^^^^^^^ variable.other.readwrite.terraform
 #             ^ punctuation.accessor.dot.terraform
@@ -2540,7 +2540,7 @@
 #                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
 #                                 ^ punctuation.accessor.dot.terraform
 #                                  ^^^^^^ variable.other.member.terraform
-#                                        ^ keyword.operator.terraform
+#                                        ^ punctuation.section.block.loop.for.terraform
       (instance.public_ip != "" ? list(instance.private_ip, instance.public_ip) : list(instance.private_ip))
 #     ^ punctuation.section.parens.begin.terraform
 #      ^^^^^^^^ variable.other.readwrite.terraform
@@ -2586,7 +2586,7 @@
 #                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
 #                                 ^ punctuation.accessor.dot.terraform
 #                                  ^^^^^^ variable.other.member.terraform
-#                                        ^ keyword.operator.terraform
+#                                        ^ punctuation.section.block.loop.for.terraform
       (instance.public_ip != "" ? [instance.private_ip, instance.public_ip] : [instance.private_ip])
 #     ^ punctuation.section.parens.begin.terraform
 #      ^^^^^^^^ variable.other.readwrite.terraform
@@ -2624,7 +2624,7 @@
 #             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
-#                      ^ keyword.operator.terraform
+#                      ^ punctuation.section.block.loop.for.terraform
 #                        ^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #                             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                              ^ meta.function-call.terraform
@@ -2657,7 +2657,7 @@
 #                           ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                            ^^ string.quoted.double.terraform
 #                              ^ punctuation.section.brackets.end.terraform
-#                               ^ keyword.operator.terraform
+#                               ^ punctuation.section.block.loop.for.terraform
 #                                 ^ variable.other.readwrite.terraform
 #                                   ^^ keyword.control.conditional.terraform
 #                                      ^ variable.other.readwrite.terraform
@@ -2687,7 +2687,7 @@
 #                      ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                       ^^ string.quoted.double.terraform
 #                         ^ punctuation.section.brackets.end.terraform
-#                          ^ keyword.operator.terraform
+#                          ^ punctuation.section.block.loop.for.terraform
 #                            ^ variable.other.readwrite.terraform
 #                              ^^ storage.type.function.terraform
 #                                 ^ variable.other.readwrite.terraform
@@ -2709,7 +2709,7 @@
 #                 ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                  ^^ string.quoted.double.terraform
 #                    ^ punctuation.section.brackets.end.terraform
-#                     ^ keyword.operator.terraform
+#                     ^ punctuation.section.block.loop.for.terraform
 #                       ^ variable.other.readwrite.terraform
 #                         ^^ storage.type.function.terraform
 #                            ^ variable.other.readwrite.terraform
@@ -2728,7 +2728,7 @@
 #             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
-#                      ^ keyword.operator.terraform
+#                      ^ punctuation.section.block.loop.for.terraform
 #                        ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #                              ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #                               ^ meta.function-call.terraform
@@ -2762,7 +2762,7 @@
 #              ^^^ variable.language.terraform
 #                 ^ punctuation.accessor.dot.terraform
 #                  ^^^^^^^ variable.other.member.terraform
-#                         ^ keyword.operator.terraform
+#                         ^ punctuation.section.block.loop.for.terraform
 #                           ^ variable.other.readwrite.terraform
 #                             ^^ storage.type.function.terraform
         upper(l)

From eb7103ffffc859c9a2fcdcd5a1d90edcd3f023e3 Mon Sep 17 00:00:00 2001
From: FichteFoll <fichtefoll2@googlemail.com>
Date: Wed, 24 Jul 2024 17:33:26 +0200
Subject: [PATCH 09/11] Adjust scopes in for loops

`in` is a proper keyword here, not an operator.
---
 Terraform.sublime-syntax |  6 ++--
 syntax_test_terraform.tf | 64 ++++++++++++++++++++--------------------
 2 files changed, 35 insertions(+), 35 deletions(-)

diff --git a/Terraform.sublime-syntax b/Terraform.sublime-syntax
index ff78c63..e253b0e 100644
--- a/Terraform.sublime-syntax
+++ b/Terraform.sublime-syntax
@@ -469,7 +469,7 @@ contexts:
   tuple_for_expression:
     - match: \bfor\b
       comment: for expression (arrays)
-      scope: keyword.control.terraform
+      scope: keyword.control.loop.for.terraform
       set:
         - include: for_expression_body
         - match: \]
@@ -485,7 +485,7 @@ contexts:
   object_for_expression:
     - match: \bfor\b
       comment: for expression (arrays)
-      scope: keyword.control.terraform
+      scope: keyword.control.loop.for.terraform
       set:
         - match: \=\>
           scope: storage.type.function.terraform
@@ -500,7 +500,7 @@ contexts:
   for_expression_body:
     - match: \bin\b
       comment: in keyword
-      scope: keyword.operator.word.terraform
+      scope: keyword.control.loop.in.terraform
     - match: \bif\b
       comment: if keyword
       scope: keyword.control.conditional.terraform
diff --git a/syntax_test_terraform.tf b/syntax_test_terraform.tf
index dec6e07..148c60b 100644
--- a/syntax_test_terraform.tf
+++ b/syntax_test_terraform.tf
@@ -1063,9 +1063,9 @@
 
    [for l in var.letters: upper(l)]
 #  ^ punctuation.section.brackets.begin.terraform
-#   ^^^ keyword.control.terraform
+#   ^^^ keyword.control.loop.for.terraform
 #       ^ variable.other.readwrite.terraform
-#         ^^ keyword.operator.word.terraform
+#         ^^ keyword.control.loop.in.terraform
 #            ^^^ variable.language.terraform
 #               ^ punctuation.accessor.dot.terraform
 #                ^^^^^^^ variable.other.member.terraform
@@ -1252,11 +1252,11 @@
 #   ^^^^^ meta.function-call.terraform variable.function.terraform
 #        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #         ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#          ^^^ meta.function-call.terraform meta.braces.terraform keyword.control.terraform
+#          ^^^ meta.function-call.terraform meta.braces.terraform keyword.control.loop.for.terraform
 #              ^ meta.function-call.terraform variable.other.readwrite.terraform
 #               ^ meta.function-call.terraform punctuation.separator.terraform
 #                 ^ meta.function-call.terraform variable.other.readwrite.terraform
-#                   ^^ meta.function-call.terraform keyword.operator.word.terraform
+#                   ^^ meta.function-call.terraform keyword.control.loop.in.terraform
 #                      ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
 #                       ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                        ^^ meta.function-call.terraform string.quoted.double.terraform
@@ -1277,9 +1277,9 @@
 #   ^^^^ meta.function-call.terraform variable.function.terraform
 #       ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
 #        ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#         ^^^ meta.function-call.terraform keyword.control.terraform
+#         ^^^ meta.function-call.terraform keyword.control.loop.for.terraform
 #             ^ meta.function-call.terraform variable.other.readwrite.terraform
-#               ^^ meta.function-call.terraform keyword.operator.word.terraform
+#               ^^ meta.function-call.terraform keyword.control.loop.in.terraform
 #                  ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
 #                   ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                    ^^ meta.function-call.terraform string.quoted.double.terraform
@@ -2417,9 +2417,9 @@
 
     [for s in var.list : upper(s)]
 #   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
+#    ^^^ keyword.control.loop.for.terraform
 #        ^ variable.other.readwrite.terraform
-#          ^^ keyword.operator.word.terraform
+#          ^^ keyword.control.loop.in.terraform
 #             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
@@ -2436,11 +2436,11 @@
 
     [for k, v in var.map : length(k) + length(v)]
 #   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
+#    ^^^ keyword.control.loop.for.terraform
 #        ^ variable.other.readwrite.terraform
 #         ^ punctuation.separator.terraform
 #           ^ variable.other.readwrite.terraform
-#             ^^ keyword.operator.word.terraform
+#             ^^ keyword.control.loop.in.terraform
 #                ^^^ variable.language.terraform
 #                   ^ punctuation.accessor.dot.terraform
 #                    ^^^ variable.other.member.terraform
@@ -2462,9 +2462,9 @@
 
     [for o in var.list : o.interfaces[0].name]
 #   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
+#    ^^^ keyword.control.loop.for.terraform
 #        ^ variable.other.readwrite.terraform
-#          ^^ keyword.operator.word.terraform
+#          ^^ keyword.control.loop.in.terraform
 #             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
@@ -2485,9 +2485,9 @@
 
     [for o in var.list : o.interfaces][0].name
 #   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
+#    ^^^ keyword.control.loop.for.terraform
 #        ^ variable.other.readwrite.terraform
-#          ^^ keyword.operator.word.terraform
+#          ^^ keyword.control.loop.in.terraform
 #             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
@@ -2511,9 +2511,9 @@
 #         ^^ variable.declaration.terraform keyword.operator.assignment.terraform
 #           ^ punctuation.section.brackets.begin.terraform
       for instance in aws_instance.ubuntu:
-#     ^^^ keyword.control.terraform
+#     ^^^ keyword.control.loop.for.terraform
 #         ^^^^^^^^ variable.other.readwrite.terraform
-#                  ^^ keyword.operator.word.terraform
+#                  ^^ keyword.control.loop.in.terraform
 #                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
 #                                 ^ punctuation.accessor.dot.terraform
 #                                  ^^^^^^ variable.other.member.terraform
@@ -2534,9 +2534,9 @@
 #         ^^ variable.declaration.terraform keyword.operator.assignment.terraform
 #           ^ punctuation.section.brackets.begin.terraform
       for instance in aws_instance.ubuntu:
-#     ^^^ keyword.control.terraform
+#     ^^^ keyword.control.loop.for.terraform
 #         ^^^^^^^^ variable.other.readwrite.terraform
-#                  ^^ keyword.operator.word.terraform
+#                  ^^ keyword.control.loop.in.terraform
 #                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
 #                                 ^ punctuation.accessor.dot.terraform
 #                                  ^^^^^^ variable.other.member.terraform
@@ -2580,9 +2580,9 @@
 #         ^^ variable.declaration.terraform keyword.operator.assignment.terraform
 #           ^ punctuation.section.brackets.begin.terraform
       for instance in aws_instance.ubuntu:
-#     ^^^ keyword.control.terraform
+#     ^^^ keyword.control.loop.for.terraform
 #         ^^^^^^^^ variable.other.readwrite.terraform
-#                  ^^ keyword.operator.word.terraform
+#                  ^^ keyword.control.loop.in.terraform
 #                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
 #                                 ^ punctuation.accessor.dot.terraform
 #                                  ^^^^^^ variable.other.member.terraform
@@ -2618,9 +2618,9 @@
 
     [for s in var.list : upper(s) if s != ""]
 #   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
+#    ^^^ keyword.control.loop.for.terraform
 #        ^ variable.other.readwrite.terraform
-#          ^^ keyword.operator.word.terraform
+#          ^^ keyword.control.loop.in.terraform
 #             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
@@ -2642,11 +2642,11 @@
 
     [for i, v in ["a", "b", "c"]: v if i < 2]
 #   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
+#    ^^^ keyword.control.loop.for.terraform
 #        ^ variable.other.readwrite.terraform
 #         ^ punctuation.separator.terraform
 #           ^ variable.other.readwrite.terraform
-#             ^^ keyword.operator.word.terraform
+#             ^^ keyword.control.loop.in.terraform
 #                ^ punctuation.section.brackets.begin.terraform
 #                 ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                  ^^ string.quoted.double.terraform
@@ -2675,11 +2675,11 @@
 
     {for i, v in ["a", "b"]: v => i}
 #   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#    ^^^ meta.braces.terraform keyword.control.terraform
+#    ^^^ meta.braces.terraform keyword.control.loop.for.terraform
 #        ^ variable.other.readwrite.terraform
 #         ^ punctuation.separator.terraform
 #           ^ variable.other.readwrite.terraform
-#             ^^ keyword.operator.word.terraform
+#             ^^ keyword.control.loop.in.terraform
 #                ^ punctuation.section.brackets.begin.terraform
 #                 ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                  ^^ string.quoted.double.terraform
@@ -2700,11 +2700,11 @@
 
     {for i, v in ["a"]: v => i...}
 #   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#    ^^^ meta.braces.terraform keyword.control.terraform
+#    ^^^ meta.braces.terraform keyword.control.loop.for.terraform
 #        ^ variable.other.readwrite.terraform
 #         ^ punctuation.separator.terraform
 #           ^ variable.other.readwrite.terraform
-#             ^^ keyword.operator.word.terraform
+#             ^^ keyword.control.loop.in.terraform
 #                ^ punctuation.section.brackets.begin.terraform
 #                 ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
 #                  ^^ string.quoted.double.terraform
@@ -2722,9 +2722,9 @@
 
     {for s in var.list : substr(s, 0, 1) => s... if s != ""}
 #   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#    ^^^ meta.braces.terraform keyword.control.terraform
+#    ^^^ meta.braces.terraform keyword.control.loop.for.terraform
 #        ^ variable.other.readwrite.terraform
-#          ^^ keyword.operator.word.terraform
+#          ^^ keyword.control.loop.in.terraform
 #             ^^^ variable.language.terraform
 #                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
@@ -2756,9 +2756,9 @@
 #         ^^ variable.declaration.terraform keyword.operator.assignment.terraform
 #           ^ meta.braces.terraform punctuation.section.braces.begin.terraform
       for l in var.letters: l =>
-#     ^^^ meta.braces.terraform keyword.control.terraform
+#     ^^^ meta.braces.terraform keyword.control.loop.for.terraform
 #         ^ variable.other.readwrite.terraform
-#           ^^ keyword.operator.word.terraform
+#           ^^ keyword.control.loop.in.terraform
 #              ^^^ variable.language.terraform
 #                 ^ punctuation.accessor.dot.terraform
 #                  ^^^^^^^ variable.other.member.terraform

From 57296e520f06a660504776d599330da4928b68f8 Mon Sep 17 00:00:00 2001
From: FichteFoll <fichtefoll2@googlemail.com>
Date: Wed, 24 Jul 2024 17:48:42 +0200
Subject: [PATCH 10/11] A `=>` separator in object for loops is punctuation

---
 Terraform.sublime-syntax |  2 +-
 syntax_test_terraform.tf | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/Terraform.sublime-syntax b/Terraform.sublime-syntax
index e253b0e..db43ed0 100644
--- a/Terraform.sublime-syntax
+++ b/Terraform.sublime-syntax
@@ -488,7 +488,7 @@ contexts:
       scope: keyword.control.loop.for.terraform
       set:
         - match: \=\>
-          scope: storage.type.function.terraform
+          scope: punctuation.separator.key-value.terraform
         - include: for_expression_body
         - match: \}
           scope: punctuation.section.braces.end.terraform
diff --git a/syntax_test_terraform.tf b/syntax_test_terraform.tf
index 148c60b..647bde3 100644
--- a/syntax_test_terraform.tf
+++ b/syntax_test_terraform.tf
@@ -1263,7 +1263,7 @@
 #                          ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
 #                           ^ meta.function-call.terraform punctuation.section.block.loop.for.terraform
 #                             ^ meta.function-call.terraform variable.other.readwrite.terraform
-#                               ^^ meta.function-call.terraform storage.type.function.terraform
+#                               ^^ meta.function-call.terraform punctuation.separator.key-value.terraform
 #                                  ^ meta.function-call.terraform variable.other.readwrite.terraform
 #                                   ^^^ meta.function-call.terraform keyword.operator.terraform
 #                                      ^ meta.function-call.terraform punctuation.section.braces.end.terraform
@@ -2689,7 +2689,7 @@
 #                         ^ punctuation.section.brackets.end.terraform
 #                          ^ punctuation.section.block.loop.for.terraform
 #                            ^ variable.other.readwrite.terraform
-#                              ^^ storage.type.function.terraform
+#                              ^^ punctuation.separator.key-value.terraform
 #                                 ^ variable.other.readwrite.terraform
 #                                  ^ punctuation.section.braces.end.terraform
 #                                   ^ -meta
@@ -2711,7 +2711,7 @@
 #                    ^ punctuation.section.brackets.end.terraform
 #                     ^ punctuation.section.block.loop.for.terraform
 #                       ^ variable.other.readwrite.terraform
-#                         ^^ storage.type.function.terraform
+#                         ^^ punctuation.separator.key-value.terraform
 #                            ^ variable.other.readwrite.terraform
 #                             ^^^ keyword.operator.terraform
 #                                ^ punctuation.section.braces.end.terraform
@@ -2737,7 +2737,7 @@
 #                                   ^ meta.function-call.terraform punctuation.separator.terraform
 #                                     ^ meta.function-call.terraform constant.numeric.integer.terraform
 #                                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                        ^^ storage.type.function.terraform
+#                                        ^^ punctuation.separator.key-value.terraform
 #                                           ^ variable.other.readwrite.terraform
 #                                            ^^^ keyword.operator.terraform
 #                                                ^^ keyword.control.conditional.terraform
@@ -2764,7 +2764,7 @@
 #                  ^^^^^^^ variable.other.member.terraform
 #                         ^ punctuation.section.block.loop.for.terraform
 #                           ^ variable.other.readwrite.terraform
-#                             ^^ storage.type.function.terraform
+#                             ^^ punctuation.separator.key-value.terraform
         upper(l)
 #       ^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform

From ad9dbf730dfa38724098af59848ab817a652105b Mon Sep 17 00:00:00 2001
From: FichteFoll <fichtefoll2@googlemail.com>
Date: Thu, 25 Jul 2024 10:57:35 +0200
Subject: [PATCH 11/11] Simplify tfvars tests

Having basically a copy of the test file for the identical terraform
syntax is quite redundant. Instead, only test for a few excerpts of
that syntax to ensure the inclusion works as expected.
---
 syntax_test_terraform-vars.tfvars | 3006 +----------------------------
 1 file changed, 56 insertions(+), 2950 deletions(-)

diff --git a/syntax_test_terraform-vars.tfvars b/syntax_test_terraform-vars.tfvars
index 2ce897c..5ba6a6e 100644
--- a/syntax_test_terraform-vars.tfvars
+++ b/syntax_test_terraform-vars.tfvars
@@ -18,153 +18,27 @@
 // foo
 # ^ source.terraform-vars comment.line.terraform
 
-/////
-// Matches at random place in line + punctuation for `#`.
-/////
-
-        # bar
-#     ^ -comment -punctuation
-#       ^ punctuation.definition.comment.terraform
-#       ^^^^^ comment.line.terraform
-
-/////
-// Matches at random place in line + punctuation for `//`.
-/////
-
-    // baz # blah
-# ^ -comment -punctuation
-#   ^^ punctuation.definition.comment.terraform
-#   ^^^^^^^^^^^^^ comment.line.terraform
-
-/////////////////////////////////////////////////////////////////////
-// BLOCK COMMENTS
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Matches for a single line.
-/////
-
-    /* foo */
-# ^ -comment -punctuation
-#   ^^ punctuation.definition.comment.terraform
-#   ^^^^^^^^ comment.block.terraform
-#          ^^ punctuation.definition.comment.terraform
-
-/////
-// Matches over multiple lines.
-/////
-
-    /*
-# ^ -comment -punctuation
-#   ^^ punctuation.definition.comment.terraform
-#   ^^^^ comment.block.terraform
-
-  foo
-# ^^^^ comment.block.terraform
-
-    */
-# ^^^^ comment.block.terraform
-#   ^^ punctuation.definition.comment.terraform
-
-/////
-// Matches inline comments after block ends.
-/////
-
-     /* comment */    // inline
-# ^ -comment -punctuation
-#    ^^ punctuation.definition.comment.terraform
-#    ^^^^^^^^^^^^ comment.block.terraform
-#               ^^ punctuation.definition.comment.terraform
-#                 ^^^ -comment -punctuation
-#                     ^^ punctuation.definition.comment.terraform
-#                     ^^^^^^^^ comment.line.terraform
-
 /////////////////////////////////////////////////////////////////////
 // LANGUAGE CONSTANTS
 /////////////////////////////////////////////////////////////////////
 
-/////
-// Matches `true`.
-/////
-
     true
 # ^ -constant
 #   ^^^^ constant.language.terraform
 #         ^ -constant
 
-/////
-// Matches `false`.
-/////
-
-    false
-# ^ -constant
-#   ^^^^^ constant.language.terraform
-#         ^ -constant
-
-
-/////
-// Matches `null`.
-/////
-
-    null
-# ^ -constant
-#   ^^^^ constant.language.terraform
-#         ^ -constant
-
-/////////////////////////////////////////////////////////////////////
-// INTEGER CONSTANTS
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Matches integers.
-/////
-
     444
 # ^ -constant -numeric
 #   ^^^ constant.numeric.integer.terraform
 
-/////
-// Matches zero.
-/////
-
-      0
-# ^ -constant -numeric
-#     ^ constant.numeric.integer.terraform
-
-/////
-// Matches one.
-/////
-
-      1
-# ^ -constant -numeric
-#     ^ constant.numeric.integer.terraform
-
-/////
-// Matches large integers.
-/////
-
-      26345645634561
-# ^ -constant -numeric
-#     ^^^^^^^^^^^^^^ constant.numeric.integer.terraform
-
-/////
-// Ignores integers inside identifiers.
-/////
 
     aws_route53_zone.main.zone_id
-#   ^^^^^^^^^^^^^^^^ -numeric -constant 
-#                   ^ keyword.operator.accessor.terraform
+#   ^^^^^^^^^^^^^^^^ -numeric -constant
+#                   ^ punctuation.accessor.dot.terraform
 #                    ^^^^ variable.other.member.terraform
-#                        ^ keyword.operator.accessor.terraform
+#                        ^ punctuation.accessor.dot.terraform
 #                         ^^^^^^^ variable.other.member.terraform
 
-/////////////////////////////////////////////////////////////////////
-// FLOATING-POINT CONSTANTS
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Matches floating-point numbers.
-/////
 
       1.2
 # ^ -constant -numeric
@@ -172,70 +46,6 @@
 #      ^ punctuation.separator.decimal.terraform
 #       ^ constant.numeric.float.terraform
 
-/////
-// Matches large floating-point numbers.
-/////
-
-      61.28888888888
-#   ^ -constant -numeric
-#     ^^ constant.numeric.float.terraform
-#       ^ punctuation.separator.decimal.terraform
-#        ^^^^^^^^^^^ constant.numeric.float.terraform
-
-/////
-// Matches integers with exponents.
-/////
-
-      1e12
-#   ^ -constant -numeric
-#     ^ constant.numeric.float.terraform
-#      ^ punctuation.separator.exponent.terraform
-#       ^^ constant.numeric.float.terraform
-
-/////
-// Matches floats with exponents.
-/////
-
-      1.4E12
-#   ^ -constant -numeric
-#     ^ constant.numeric.float.terraform
-#      ^ punctuation.separator.decimal.terraform
-#       ^ constant.numeric.float.terraform
-#        ^ punctuation.separator.exponent.terraform
-#         ^^ constant.numeric.float.terraform
-
-/////
-// Matches floats with postive signed exponents.
-/////
-
-      1.4e+12
-#   ^ -constant -numeric
-#     ^ constant.numeric.float.terraform
-#      ^ punctuation.separator.decimal.terraform
-#       ^ constant.numeric.float.terraform
-#        ^^ punctuation.separator.exponent.terraform
-#          ^^ constant.numeric.float.terraform
-
-/////
-// Matches floats with negative signed exponents.
-/////
-
-      1.4E-12
-#   ^ -constant -numeric
-#     ^ constant.numeric.float.terraform
-#      ^ punctuation.separator.decimal.terraform
-#       ^ constant.numeric.float.terraform
-#        ^^ punctuation.separator.exponent.terraform
-#          ^^ constant.numeric.float.terraform
-
-/////////////////////////////////////////////////////////////////////
-// STRINGS
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Matches punctuation and assigns meta_scope.
-/////
-
       "a string"
 #   ^ -punctuation -string
 #     ^ punctuation.definition.string.begin.terraform
@@ -243,397 +53,24 @@
 #              ^ punctuation.definition.string.end.terraform
 #                 ^ -punctuation -string
 
-/////
-// Matches character escapes.
-/////
-
-      "a \n b \r c \t d \" e \udead f \udeadbeef"
-#   ^ -punctuation -string
-#     ^ punctuation.definition.string.begin.terraform
-#     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.terraform
-#        ^^ constant.character.escape.terraform
-#             ^^ constant.character.escape.terraform
-#                  ^^ constant.character.escape.terraform
-#                       ^^ constant.character.escape.terraform
-#                            ^^^^^ constant.character.escape.terraform
-#                                     ^^^^^^^^^^ constant.character.escape.terraform
-#                                               ^ punctuation.definition.string.end.terraform
-
-/////////////////////////////////////////////////////////////////////
-// STRING INTERPOLATION
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Correct scopes during interpolation.
-/////
-
       "some ${interpolation} string"
 #   ^ -punctuation -string
+#     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform
+#     ^^^^^^ string.quoted.double.terraform
 #     ^ punctuation.definition.string.begin.terraform
-#      ^^^^^ string.quoted.double.terraform
-#           ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#             ^^^^^^^^^^^^^^ meta.interpolation.terraform
-#                          ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                            ^^^^^^^ string.quoted.double.terraform
+#           ^^^^^^^^^^^^^^^^ meta.interpolation.terraform
+#           ^^ punctuation.section.interpolation.begin.terraform
+#             ^^^^^^^^^^^^^ source.terraform
+#                          ^ punctuation.section.interpolation.end.terraform
+#                           ^^^^^^^^ string.quoted.double.terraform
 #                                  ^ punctuation.definition.string.end.terraform
 #                                   ^ -punctuation -string
 
-/////
-// Matches left-trim and right-trim.
-/////
-
-      "%{~ fff ~}"
-#     ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#      ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#        ^^ meta.interpolation.terraform keyword.operator.template.left.trim.terraform
-#          ^^^^^^ meta.interpolation.terraform
-#             ^^ meta.interpolation.terraform keyword.operator.template.right.trim.terraform
-#               ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-
-/////
-// Matches operators
-/////
-
-    "${ something ? true : false }"
-#   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#    ^^ keyword.other.interpolation.begin.terraform
-#     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
-#                 ^ keyword.operator.terraform
-#                   ^^^^ meta.interpolation.terraform constant.language.terraform
-#                        ^ meta.interpolation.terraform keyword.operator.terraform
-#                          ^^^^^ meta.interpolation.terraform constant.language.terraform
-#                                ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                 ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-
-/////
-// Dot-access attributes in string interpolation
-/////
-
-    "hello ${aws_instance.ubuntu}"
-#   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#   ^^^^^^^ string.quoted.double.terraform
-#          ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#            ^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
-#                        ^ meta.interpolation.terraform keyword.operator.accessor.terraform
-#                         ^^^^^^ meta.interpolation.terraform variable.other.member.terraform
-#                               ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-
-/////
-// Handles function calls
-/////
-
-      "${formatdate("DD MMM YYYY hh:mm ZZZ", "2018-01-02T23:12:01Z")}"
-#     ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#      ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#        ^^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform support.function.builtin.terraform
-#                  ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                   ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                    ^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform
-#                                          ^ meta.interpolation.terraform meta.function-call.terraform punctuation.separator.terraform
-#                                            ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                             ^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform
-#                                                                  ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                                                   ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                                                    ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-
-/////
-// Handles nested function calls.
-/////
-
-    id = "db-final-snapshot-${md5(timestamp())}"
-#   ^^ variable.declaration.terraform variable.other.readwrite.terraform
-#      ^^ variable.declaration.terraform keyword.operator.assignment.terraform
-#        ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#         ^^^^^^^^^^^^^^^^^^ string.quoted.double.terraform
-#                           ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                             ^^^ meta.interpolation.terraform meta.function-call.terraform support.function.builtin.terraform
-#                                ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                                 ^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform
-#                                          ^ meta.interpolation.terraform meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                                           ^ meta.interpolation.terraform meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                            ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                             ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                              ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-
-/////
-// Includes objects.
-////
-
-    "something ${{test = 3}}"
-#   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#    ^^^^^^^^^^ string.quoted.double.terraform
-#              ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                ^ meta.interpolation.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#                 ^^^^ meta.interpolation.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                      ^ meta.interpolation.terraform meta.braces.terraform keyword.operator.terraform
-#                        ^ meta.interpolation.terraform meta.braces.terraform constant.numeric.integer.terraform
-#                         ^ meta.interpolation.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                          ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                           ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-
-/////
-// Includes tuples.
-////
-
-    "something ${[1, 2, 3]}"
-#   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#    ^^^^^^^^^^ string.quoted.double.terraform
-#              ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                ^ meta.interpolation.terraform punctuation.section.brackets.begin.terraform
-#                 ^ meta.interpolation.terraform constant.numeric.integer.terraform
-#                  ^ meta.interpolation.terraform punctuation.separator.terraform
-#                    ^ meta.interpolation.terraform constant.numeric.integer.terraform
-#                     ^ meta.interpolation.terraform punctuation.separator.terraform
-#                       ^ meta.interpolation.terraform constant.numeric.integer.terraform
-#                        ^ meta.interpolation.terraform punctuation.section.brackets.end.terraform
-#                         ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                          ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-
-/////
-// Includes named values.
-/////
-
-    "${var.something}"
-#   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#    ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#      ^^^ meta.interpolation.terraform support.constant.terraform
-#         ^ meta.interpolation.terraform keyword.operator.accessor.terraform
-#          ^^^^^^^^^ meta.interpolation.terraform variable.other.member.terraform
-#                   ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                    ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-
-/////
-// Handles regexes (various punctuation).
-/////
-
-    records = ["${replace("hostname.domain.com:1234", "/(.*):[0-9]{0,26}/", "$1")}"]
-#   ^^^^^^^ variable.declaration.terraform variable.other.readwrite.terraform
-#           ^^ variable.declaration.terraform keyword.operator.assignment.terraform
-#             ^ punctuation.section.brackets.begin.terraform
-#              ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                 ^^^^^^^ meta.interpolation.terraform meta.function-call.terraform support.function.builtin.terraform
-#                        ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                         ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                          ^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform
-#                                                  ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                                                   ^ meta.interpolation.terraform meta.function-call.terraform punctuation.separator.terraform
-#                                                     ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                                      ^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform
-#                                                                        ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                                                                         ^ meta.interpolation.terraform meta.function-call.terraform punctuation.separator.terraform
-#                                                                           ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                                                            ^^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform
-#                                                                              ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                                                                               ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                                                                ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                                                                 ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                                                                                  ^ punctuation.section.brackets.end.terraform
-#                                                                                   ^ -meta -string -variable -punctuation
-
-/////
-// Handles nested interpolation.
-/////
-
-    "${file("${path.module}/text_files/ecs_app")}"
-#   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#    ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#      ^^^^ meta.interpolation.terraform meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#            ^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#              ^^^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                  ^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
-#                   ^^^^^^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                         ^ meta.interpolation.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                          ^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform
-#                                             ^ meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                                              ^ meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                               ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                                ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-
-/////////////////////////////////////////////////////////////////////
-// Template If Directives
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Matches if/endif directives.
-/////
-
-      "${ if name == "Mary" }${name}${ endif ~}"
-#    ^ -string -punctuation
-#     ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#      ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
-#         ^^ meta.interpolation.terraform keyword.control.terraform
-#                 ^^ meta.interpolation.terraform keyword.operator.terraform
-#                    ^ source.terraform-vars meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                    ^^^^^^ source.terraform-vars meta.interpolation.terraform string.quoted.double.terraform
-#                         ^ source.terraform-vars meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                           ^ keyword.other.interpolation.end.terraform
-#                            ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                  ^ keyword.other.interpolation.end.terraform 
-#                                   ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                      ^^^^^ meta.interpolation.terraform keyword.control.terraform
-#                                            ^ meta.interpolation.terraform keyword.operator.template.right.trim.terraform
-#                                             ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                              ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                                               ^ -string -punctuation
-
-/////
-// Matches if/else/endif directives.
-/////
-
-      "%{ if name == "Mary" }${name}%{ else }${ "Mary" }%{ endif ~}"
-#    ^ -string -punctuation
-#     ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#      ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
-#         ^^ meta.interpolation.terraform keyword.control.terraform
-#                 ^^ meta.interpolation.terraform keyword.operator.terraform
-#                    ^ source.terraform-vars meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                    ^^^^^^ source.terraform-vars meta.interpolation.terraform string.quoted.double.terraform
-#                         ^ source.terraform-vars meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                           ^ keyword.other.interpolation.end.terraform
-#                            ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                  ^ keyword.other.interpolation.end.terraform 
-#                                   ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                      ^^^^ meta.interpolation.terraform keyword.control.terraform
-#                                           ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                            ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                               ^ meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                                ^^^^^ meta.interpolation.terraform string.quoted.double.terraform
-#                                                      ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                                      ^ keyword.other.interpolation.end.terraform
-#                                                       ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                                          ^^^^^ meta.interpolation.terraform keyword.control.terraform
-#                                                                ^ meta.interpolation.terraform keyword.operator.template.right.trim.terraform
-#                                                                 ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                                                  ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                                                                   ^ -string -punctuation
-
-/////
-// Matches for/in/endfor directives.
-/////
-
-      "%{ for name in var.names ~}${name}%{ endfor ~}"
-#   ^ -string -punctuation      
-#     ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#      ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#         ^^^ keyword.control.terraform
-#      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform
-#                  ^^ keyword.control.terraform
-#                     ^^^ meta.interpolation.terraform support.constant.terraform
-#                        ^ meta.interpolation.terraform keyword.operator.accessor.terraform
-#                         ^^^^^ meta.interpolation.terraform variable.other.member.terraform
-#                               ^ keyword.operator.template.right.trim.terraform
-#                                ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                 ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                       ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                        ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                                           ^^^^^^ meta.interpolation.terraform keyword.control.terraform
-#                                                  ^ meta.interpolation.terraform keyword.operator.template.right.trim.terraform
-#                                                   ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                                    ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                                                     ^ -string -punctuation
-
-/////////////////////////////////////////////////////////////////////
-// Operators
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Comparison
-/////
-
-    a == b
-#   ^ -keyword -operator
-#     ^^ keyword.operator.terraform
-#         ^ -keyword -operator 
-
-    a != b
-#   ^ -keyword -operator
-#     ^^ keyword.operator.terraform
-#         ^ -keyword -operator 
-
-    a < b
-#    ^ -keyword -operator
-#     ^ keyword.operator.terraform
-#      ^ -keyword -operator
-
-    a <= b
-#    ^ -keyword -operator
-#     ^^ keyword.operator.terraform
-#       ^ -keyword -operator
-
-    a > b
-#    ^ -keyword -operator 
-#     ^ keyword.operator.terraform
-#      ^ -keyword -operator
-
-    a >= b
-#    ^ -keyword -operator
-#     ^^ keyword.operator.terraform
-#       ^ -keyword -operator
-
-/////
-// Arithmetic
-/////
-
     a + b
 #    ^ -keyword -operator
 #     ^ keyword.operator.arithmetic.terraform
 #      ^ -keyword -operator
 
-    a - b
-#    ^ -keyword -operator
-#     ^ keyword.operator.arithmetic.terraform
-#      ^ -keyword -operator
-
-    a * b
-#    ^ -keyword -operator
-#     ^ keyword.operator.arithmetic.terraform
-#      ^ -keyword -operator
-
-    a / b
-#    ^ -keyword -operator
-#     ^ keyword.operator.arithmetic.terraform
-#      ^ -keyword -operator
-
-    a % b
-#    ^ -keyword -operator
-#     ^ keyword.operator.arithmetic.terraform
-#      ^ -keyword -operator
-
-    -a
-#  ^ -keyword -operator
-#   ^ keyword.operator.arithmetic.terraform 
-#    ^ -keyword -operator 
-
-/////
-// Logic
-/////
-
-    a && b
-#   ^^ -keyword -operator
-#     ^^ keyword.operator.logical.terraform
-#       ^^ -keyword -operator
-
-    a || b
-#   ^^ -keyword -operator
-#     ^^ keyword.operator.logical.terraform
-#       ^^ -keyword -operator
-
-    !a
-# ^^ -keyword -operator
-#   ^ keyword.operator.logical.terraform
-#    ^^ -keyword -operator
-
-/////
-// Conditional
-/////
-
     length(some_list) > 0 ? some_list[0] : default
 #   ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
 #         ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
@@ -647,1013 +84,26 @@
 #                                      ^ punctuation.section.brackets.end.terraform
 #                                        ^ keyword.operator.terraform
 
-/////
-// Ellipsis
-/////
-
-    hhh([55, 2453, 2]...)
-#   ^^^ meta.function-call.terraform variable.function.terraform
-#      ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#       ^ punctuation.section.brackets.begin.terraform
-#        ^^ constant.numeric.integer.terraform
-#          ^ punctuation.separator.terraform
-#            ^^^^ constant.numeric.integer.terraform
-#                ^ punctuation.separator.terraform
-#                  ^ constant.numeric.integer.terraform
-#                   ^ punctuation.section.brackets.end.terraform
-#                    ^^^ keyword.operator.terraform 
-#                       ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////////////////////////////////////////////////////////////////////
-// Brackets: Index Operations and Arrays
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Index Operations
-/////
-
-    thing[1]
-#       ^ -punctuation 
-#        ^ punctuation.section.brackets.begin.terraform
-#         ^ constant.numeric.integer.terraform
-#          ^ punctuation.section.brackets.end.terraform
-#           ^ -punctuation
-
-/////
-// Arrays of literals
-/////
-
-    ["a", "b", "c"]
+    [{a = 1}, {g = 2}]
 #   ^ punctuation.section.brackets.begin.terraform
-#    ^ punctuation.definition.string.begin.terraform
-#    ^^^ string.quoted.double.terraform
-#      ^ punctuation.definition.string.end.terraform
-#       ^ punctuation.separator.terraform
-#         ^ punctuation.definition.string.begin.terraform
-#         ^^^ string.quoted.double.terraform
-#           ^ punctuation.definition.string.end.terraform
-#            ^ punctuation.separator.terraform
-#              ^ punctuation.definition.string.begin.terraform
-#              ^^^ string.quoted.double.terraform
-#                ^ punctuation.definition.string.end.terraform
-#                 ^ punctuation.section.brackets.end.terraform
-
-/////
-// Allows inline comments
-/////
+#    ^ meta.braces.terraform punctuation.section.braces.begin.terraform
+#     ^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
+#       ^ meta.braces.terraform keyword.operator.terraform
+#         ^ meta.braces.terraform constant.numeric.integer.terraform
+#          ^ meta.braces.terraform punctuation.section.braces.end.terraform
+#           ^ punctuation.separator.terraform
+#             ^ meta.braces.terraform punctuation.section.braces.begin.terraform
+#              ^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
+#                ^ meta.braces.terraform keyword.operator.terraform
+#                  ^ meta.braces.terraform constant.numeric.integer.terraform
+#                   ^ meta.braces.terraform punctuation.section.braces.end.terraform
+#                    ^ punctuation.section.brackets.end.terraform
 
-    [1, /* inline */ 2]
-#   ^ punctuation.section.brackets.begin.terraform
-#    ^ constant.numeric.integer.terraform
-#     ^ punctuation.separator.terraform
-#       ^^ punctuation.definition.comment.terraform
-#       ^^^^^^^^^^^^ comment.block.terraform
-#                 ^^ punctuation.definition.comment.terraform
-#                    ^ constant.numeric.integer.terraform
-#                     ^ punctuation.section.brackets.end.terraform
-
-/////
-// Allows expression over multiple lines
-/////
-
-    [
-#   ^ punctuation.section.brackets.begin.terraform
-      1,
-#     ^ constant.numeric.integer.terraform
-#      ^ punctuation.separator.terraform
-      2
-#     ^ constant.numeric.integer.terraform
-    ]
-#   ^ punctuation.section.brackets.end.terraform
-
-/////
-// Allows operators
-/////
-
-    [ 1 + 2 ]
-#   ^ punctuation.section.brackets.begin.terraform
-#     ^ constant.numeric.integer.terraform
-#       ^ keyword.operator.arithmetic.terraform
-#         ^ constant.numeric.integer.terraform
-#           ^ punctuation.section.brackets.end.terraform
-
-/////
-// Splat operator
-/////
-
-    tuple[*].foo.bar[0]
-#        ^ punctuation.section.brackets.begin.terraform
-#         ^ punctuation.section.brackets.end.terraform keyword.operator.splat.terraform
-#          ^ punctuation.section.brackets.end.terraform
-#           ^ keyword.operator.accessor.terraform
-#            ^^^ variable.other.member.terraform
-#               ^ keyword.operator.accessor.terraform
-#                ^^^ variable.other.member.terraform
-#                   ^ punctuation.section.brackets.begin.terraform
-#                    ^ constant.numeric.integer.terraform
-#                     ^ punctuation.section.brackets.end.terraform
-
-/////
-// Handle nested arrays
-/////
-
-    count = [
-#   ^^^^^ variable.declaration.terraform variable.other.readwrite.terraform
-#         ^^ variable.declaration.terraform keyword.operator.assignment.terraform
-#           ^ punctuation.section.brackets.begin.terraform
-      [ 1, 2],
-#     ^ punctuation.section.brackets.begin.terraform
-#       ^ constant.numeric.integer.terraform
-#        ^ punctuation.separator.terraform
-#          ^ constant.numeric.integer.terraform
-#           ^ punctuation.section.brackets.end.terraform
-#            ^ punctuation.separator.terraform
-      [ 6, 7]
-#     ^ punctuation.section.brackets.begin.terraform
-#       ^ constant.numeric.integer.terraform
-#        ^ punctuation.separator.terraform
-#          ^ constant.numeric.integer.terraform
-#           ^ punctuation.section.brackets.end.terraform
-    ]
-#   ^ punctuation.section.brackets.end.terraform
-#    ^ -punctuation
-
-/////
-// Attribute-access inside arrays
-/////
-
-    [ aws_instance.ubuntu, aws_instance.freebsd ]
-#   ^ punctuation.section.brackets.begin.terraform
-#                 ^ keyword.operator.accessor.terraform 
-#                  ^^^^^^ variable.other.member.terraform
-#                        ^ punctuation.separator.terraform
-#                                      ^ keyword.operator.accessor.terraform 
-#                                       ^^^^^^^ variable.other.member.terraform
-#                                               ^ punctuation.section.brackets.end.terraform
-
-/////
-// Includes functions.
-/////
-    
-    [ upper("ggh") ]
-#   ^ punctuation.section.brackets.begin.terraform
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#            ^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                  ^ punctuation.section.brackets.end.terraform
-
-/////
-// Include objects.
-/////
-
-    [{a = 1}, {g = 2}]
-#   ^ punctuation.section.brackets.begin.terraform
-#    ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#     ^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#       ^ meta.braces.terraform keyword.operator.terraform
-#         ^ meta.braces.terraform constant.numeric.integer.terraform
-#          ^ meta.braces.terraform punctuation.section.braces.end.terraform
-#           ^ punctuation.separator.terraform
-#             ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#              ^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                ^ meta.braces.terraform keyword.operator.terraform
-#                  ^ meta.braces.terraform constant.numeric.integer.terraform
-#                   ^ meta.braces.terraform punctuation.section.braces.end.terraform
-#                    ^ punctuation.section.brackets.end.terraform 
-
-/////
-// Includes named values
-/////
-
-    [local.thing1, local.thing2]
-#   ^ punctuation.section.brackets.begin.terraform
-#    ^^^^^ support.constant.terraform
-#         ^ keyword.operator.accessor.terraform
-#          ^^^^^^ variable.other.member.terraform
-#                ^ punctuation.separator.terraform
-#                  ^^^^^ support.constant.terraform
-#                       ^ keyword.operator.accessor.terraform
-#                        ^^^^^^ variable.other.member.terraform
-#                              ^ punctuation.section.brackets.end.terraform
-
-/////////////////////////////////////////////////////////////////////
-// Collections: Objects
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Key/value pairs separated by newlines.
-/////
-
-    {
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-      name = "John"
-#     ^^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#          ^ meta.braces.terraform keyword.operator.terraform
-#            ^ meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^^^^ meta.braces.terraform string.quoted.double.terraform
-      age = 52
-#     ^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#         ^ meta.braces.terraform keyword.operator.terraform
-#           ^^ meta.braces.terraform constant.numeric.integer.terraform
-    }
-#   ^ meta.braces.terraform punctuation.section.braces.end.terraform
-
-/////
-// Key/value pairs separated by commas.
-/////
-
-    {name = "John", age = 52}
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#    ^^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#         ^ meta.braces.terraform keyword.operator.terraform
-#           ^ meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#            ^^^^^ meta.braces.terraform string.quoted.double.terraform
-#                 ^ meta.braces.terraform punctuation.separator.terraform
-#                   ^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                           ^ meta.braces.terraform punctuation.section.braces.end.terraform
-
-/////
-// Allows operators in key values.
-/////
-
-    { name = 1 + 1 }
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#     ^^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#          ^ meta.braces.terraform keyword.operator.terraform
-#            ^ meta.braces.terraform constant.numeric.integer.terraform
-#              ^ meta.braces.terraform keyword.operator.arithmetic.terraform
-#                ^ meta.braces.terraform constant.numeric.integer.terraform
-#                  ^ meta.braces.terraform punctuation.section.braces.end.terraform
-#                   ^ -meta
-
-/////
-// Allows tuples as key values.
-/////
-
-    { list = [ 1, 2, 3 ]}
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#     ^^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#          ^ meta.braces.terraform keyword.operator.terraform
-#            ^ meta.braces.terraform punctuation.section.brackets.begin.terraform
-#              ^ meta.braces.terraform constant.numeric.integer.terraform
-#               ^ meta.braces.terraform punctuation.separator.terraform
-#                 ^ meta.braces.terraform constant.numeric.integer.terraform
-#                  ^ meta.braces.terraform punctuation.separator.terraform
-#                    ^ meta.braces.terraform constant.numeric.integer.terraform
-#                      ^ meta.braces.terraform punctuation.section.brackets.end.terraform
-#                       ^ meta.braces.terraform punctuation.section.braces.end.terraform
-#                        ^ -meta
-
-/////
-// Allows function calls as values.
-/////
-
-    {
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-      a = upper("l"),
-#     ^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#       ^ meta.braces.terraform keyword.operator.terraform
-#         ^^^^^ meta.braces.terraform meta.function-call.terraform support.function.builtin.terraform
-#              ^ meta.braces.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#               ^ meta.braces.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                ^^ meta.braces.terraform meta.function-call.terraform string.quoted.double.terraform
-#                  ^ meta.braces.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                   ^ meta.braces.terraform punctuation.separator.terraform
-    }
-#   ^ meta.braces.terraform punctuation.section.braces.end.terraform
-
-/////
-// Allows nested collection literals.
-/////
-
-    {
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-      obj1 = {
-#     ^^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#          ^ meta.braces.terraform keyword.operator.terraform
-#            ^ meta.braces.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-        obj2 = {
-#       ^^^^ meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#            ^ meta.braces.terraform meta.braces.terraform keyword.operator.terraform
-#              ^ meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-          value = 5
-#         ^^^^^ meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#               ^ meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.terraform
-#                 ^ meta.braces.terraform meta.braces.terraform meta.braces.terraform constant.numeric.integer.terraform
-        }
-#       ^ meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-      }
-#     ^ meta.braces.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-    }
-#   ^ meta.braces.terraform punctuation.section.braces.end.terraform
-#    ^ -meta
-
-/////
-// Allows attribute-access as rvalue, including named values.
-/////
-
-    { lvalue = var.rvalue }
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#     ^^^^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#            ^ meta.braces.terraform keyword.operator.terraform
-#              ^^^ meta.braces.terraform support.constant.terraform
-#                 ^ meta.braces.terraform keyword.operator.accessor.terraform
-#                  ^^^^^^ meta.braces.terraform variable.other.member.terraform
-#                         ^ meta.braces.terraform punctuation.section.braces.end.terraform
-#                          ^ -meta
-
-/////
-// Allows strings as keys.
-/////
-
-    {"gggg" = "gggg"}
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#    ^ meta.braces.terraform meta.mapping.key.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#     ^^^^ meta.braces.terraform meta.mapping.key.terraform string.quoted.double.terraform
-#         ^ meta.braces.terraform meta.mapping.key.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#           ^ meta.braces.terraform keyword.operator.terraform
-#             ^ meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#              ^^^^ meta.braces.terraform string.quoted.double.terraform
-#                  ^ meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                   ^ meta.braces.terraform punctuation.section.braces.end.terraform
-
-/////
-// Allows expressions + operators as keys.
-/////
-
-    {(1 + 2) = "gggg"}
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#    ^ meta.braces.terraform meta.mapping.key.terraform punctuation.section.parens.begin.terraform
-#     ^ meta.braces.terraform meta.mapping.key.terraform constant.numeric.integer.terraform
-#       ^ meta.braces.terraform meta.mapping.key.terraform keyword.operator.arithmetic.terraform
-#         ^ meta.braces.terraform meta.mapping.key.terraform constant.numeric.integer.terraform
-#          ^ meta.braces.terraform meta.mapping.key.terraform punctuation.section.parens.end.terraform
-#            ^ meta.braces.terraform keyword.operator.terraform
-#              ^ meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^^^^ meta.braces.terraform string.quoted.double.terraform
-#                    ^ meta.braces.terraform punctuation.section.braces.end.terraform
-
-/////
-// Allows function calls as keys.
-/////
-
-    {(func()) = 1}
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#    ^ meta.braces.terraform meta.mapping.key.terraform punctuation.section.parens.begin.terraform
-#     ^^^^ meta.braces.terraform meta.mapping.key.terraform meta.function-call.terraform variable.function.terraform
-#         ^ meta.braces.terraform meta.mapping.key.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#          ^ meta.braces.terraform meta.mapping.key.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#           ^ meta.braces.terraform meta.mapping.key.terraform punctuation.section.parens.end.terraform
-#             ^ meta.braces.terraform keyword.operator.terraform
-#               ^ meta.braces.terraform constant.numeric.integer.terraform
-#                ^ meta.braces.terraform punctuation.section.braces.end.terraform
-
-/////
-// Allows attribute-access as keys.
-////
-
-    {(var.path) = 1}
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#    ^ meta.braces.terraform meta.mapping.key.terraform punctuation.section.parens.begin.terraform
-#     ^^^ meta.braces.terraform meta.mapping.key.terraform support.constant.terraform
-#        ^ meta.braces.terraform meta.mapping.key.terraform keyword.operator.accessor.terraform
-#         ^^^^ meta.braces.terraform meta.mapping.key.terraform variable.other.member.terraform
-#             ^ meta.braces.terraform meta.mapping.key.terraform punctuation.section.parens.end.terraform
-#               ^ meta.braces.terraform keyword.operator.terraform
-#                 ^ meta.braces.terraform constant.numeric.integer.terraform
-#                  ^ meta.braces.terraform punctuation.section.braces.end.terraform
-
-/////////////////////////////////////////////////////////////////////
-// Attribute Access
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Matches dot-access
-/////
-
-    aws_instance.ubuntu[*].private_dns
-#               ^ keyword.operator.accessor.terraform
-#                ^^^^^^ variable.other.member.terraform
-#                      ^ punctuation.section.brackets.begin.terraform
-#                       ^ punctuation.section.brackets.end.terraform keyword.operator.splat.terraform
-#                        ^ punctuation.section.brackets.end.terraform
-#                         ^ keyword.operator.accessor.terraform
-#                          ^^^^^^^^^^^ variable.other.member.terraform
-#                                     ^ -variable -punctuation 
-
-/////
-// Ignores dot-access in string literals
-/////
-
-    "aws_instance.ubuntu"
-#   ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                ^ -variable
-#   ^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.terraform
-
-/////
-// Matches inside for-expressions
-/////
-
-   [for l in var.letters: upper(l)]
-#  ^ punctuation.section.brackets.begin.terraform
-#   ^^^ keyword.control.terraform
-#       ^ variable.other.readwrite.terraform
-#         ^^ keyword.operator.word.terraform
-#            ^^^ support.constant.terraform
-#               ^ keyword.operator.accessor.terraform
-#                ^^^^^^^ variable.other.member.terraform
-#                       ^ keyword.operator.terraform
-#                         ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                              ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                               ^ meta.function-call.terraform
-#                                ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                 ^ punctuation.section.brackets.end.terraform
-
-/////
-// Attribute-only splat
-/////
-
-    tuple.*.foo.bar[0]
-#        ^ keyword.operator.accessor.terraform
-#         ^ keyword.operator.splat.terraform
-#          ^ keyword.operator.accessor.terraform
-#           ^^^ variable.other.member.terraform
-#              ^ keyword.operator.accessor.terraform
-#               ^^^ variable.other.member.terraform
-#                  ^ punctuation.section.brackets.begin.terraform
-#                   ^ constant.numeric.integer.terraform
-#                    ^ punctuation.section.brackets.end.terraform
-
-/////
-// Matches subscript indexes
-/////
-
-    aws_route53_zone.project.name_servers.1
-#                   ^ keyword.operator.accessor.terraform
-#                    ^^^^^^^ variable.other.member.terraform
-#                           ^ keyword.operator.accessor.terraform
-#                            ^^^^^^^^^^^^ variable.other.member.terraform
-#                                        ^ keyword.operator.accessor.terraform
-#                                         ^ constant.numeric.integer.terraform
-#                                          ^ -constant -punctuation -variable
-
-/////////////////////////////////////////////////////////////////////
-// Attribute Definition
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Basic definition
-/////
-
-    count = length(var.availability_zones)
-#   ^^^^^ variable.declaration.terraform variable.other.readwrite.terraform
-#         ^ variable.declaration.terraform keyword.operator.assignment.terraform
-#           ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                 ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                  ^^^ meta.function-call.terraform support.constant.terraform
-#                     ^ meta.function-call.terraform keyword.operator.accessor.terraform
-#                      ^^^^^^^^^^^^^^^^^^ meta.function-call.terraform variable.other.member.terraform
-#                                        ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// Populate an attribute from a variable value
-/////
-
-    (foo) = "baz"
-#   ^ variable.declaration.terraform punctuation.section.parens.begin.terraform
-#    ^^^ variable.declaration.terraform variable.other.readwrite.terraform
-#       ^ variable.declaration.terraform punctuation.section.parens.end.terraform
-#         ^ variable.declaration.terraform keyword.operator.assignment.terraform
-#           ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#           ^^^^^ string.quoted.double.terraform
-#               ^ string.quoted.double.terraform punctuation.definition.string.end.terraform 
-
-/////////////////////////////////////////////////////////////////////
-// Function Calls
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Basic call.
-/////
-
-    thing(l)
-#   ^^^^^ meta.function-call.terraform variable.function.terraform
-#        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#         ^ meta.function-call.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// Matches parameters, attribute-access, literals, operators, commas.
-/////
-
-    cidrthingy(aws_vpc.main.cidr_block, 4, count.index+1)
-#   ^^^^^^^^^^ meta.function-call.terraform variable.function.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#              ^^^^^^^ meta.function-call.terraform
-#                     ^ meta.function-call.terraform keyword.operator.accessor.terraform
-#                      ^^^^ meta.function-call.terraform variable.other.member.terraform
-#                          ^ meta.function-call.terraform keyword.operator.accessor.terraform
-#                           ^^^^^^^^^^ meta.function-call.terraform variable.other.member.terraform
-#                                     ^ meta.function-call.terraform punctuation.separator.terraform
-#                                       ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                                        ^ meta.function-call.terraform punctuation.separator.terraform
-#                                          ^^^^^ meta.function-call.terraform
-#                                               ^ meta.function-call.terraform keyword.operator.accessor.terraform
-#                                                ^^^^^ meta.function-call.terraform variable.other.member.terraform
-#                                                     ^ meta.function-call.terraform keyword.operator.arithmetic.terraform
-#                                                      ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                                                       ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                                        ^ -meta -function-call -variable
-
-/////
-// Matches arrays and splat as parameters.
-/////
-
-      y6y([55, 2453, 2]..., [55555555])
-#     ^^^ meta.function-call.terraform variable.function.terraform
-#        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#         ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#          ^^ meta.function-call.terraform constant.numeric.integer.terraform
-#            ^ meta.function-call.terraform punctuation.separator.terraform
-#              ^^^^ meta.function-call.terraform constant.numeric.integer.terraform
-#                  ^ meta.function-call.terraform punctuation.separator.terraform
-#                    ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                     ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                      ^^^ meta.function-call.terraform keyword.operator.terraform
-#                         ^ meta.function-call.terraform punctuation.separator.terraform
-#                           ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                            ^^^^^^^^ meta.function-call.terraform constant.numeric.integer.terraform
-#                                    ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                     ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// Matches objects as parameters.
-/////
-
-    some({a = 1, b = "2"})
-#   ^^^^ meta.function-call.terraform variable.function.terraform
-#       ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#        ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#         ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#           ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#             ^ meta.function-call.terraform meta.braces.terraform constant.numeric.integer.terraform
-#              ^ meta.function-call.terraform meta.braces.terraform punctuation.separator.terraform
-#                ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                  ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                    ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                     ^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                       ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                        ^ meta.function-call.terraform punctuation.section.parens.end.terraform 
-
-/////
-// Nested function calls.
-/////
-
-    func(thing(yep(1)))
-#   ^^^^ meta.function-call.terraform variable.function.terraform
-#       ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#        ^^^^^ meta.function-call.terraform meta.function-call.terraform variable.function.terraform
-#             ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#              ^^^ meta.function-call.terraform meta.function-call.terraform meta.function-call.terraform variable.function.terraform
-#                 ^ meta.function-call.terraform meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                  ^ meta.function-call.terraform meta.function-call.terraform meta.function-call.terraform constant.numeric.integer.terraform
-#                   ^ meta.function-call.terraform meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                    ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                     ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                      ^ -function
-
-/////
-// Parameters spanning multiple lines.
-/////
-
-    func(
-#   ^^^^ meta.function-call.terraform variable.function.terraform
-#       ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-      1,
-#     ^ meta.function-call.terraform constant.numeric.integer.terraform
-#      ^ meta.function-call.terraform punctuation.separator.terraform
-      2
-#     ^ meta.function-call.terraform constant.numeric.integer.terraform
-    )
-#   ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// Allow object for-expressions.
-////
-
-    thing({for i, v in ["a"]: v => i...})
-#   ^^^^^ meta.function-call.terraform variable.function.terraform
-#        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#         ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#          ^^^ meta.function-call.terraform meta.braces.terraform keyword.control.terraform
-#              ^ meta.function-call.terraform variable.other.readwrite.terraform
-#               ^ meta.function-call.terraform punctuation.separator.terraform
-#                 ^ meta.function-call.terraform variable.other.readwrite.terraform
-#                   ^^ meta.function-call.terraform keyword.operator.word.terraform
-#                      ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                       ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                        ^^ meta.function-call.terraform string.quoted.double.terraform
-#                          ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                           ^ meta.function-call.terraform keyword.operator.terraform
-#                             ^ meta.function-call.terraform variable.other.readwrite.terraform
-#                               ^^ meta.function-call.terraform storage.type.function.terraform
-#                                  ^ meta.function-call.terraform variable.other.readwrite.terraform
-#                                   ^^^ meta.function-call.terraform keyword.operator.terraform
-#                                      ^ meta.function-call.terraform punctuation.section.braces.end.terraform
-#                                       ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// Allow tuple for-expressions.
-/////
-
-    func([for v in ["a", "b"]: v])
-#   ^^^^ meta.function-call.terraform variable.function.terraform
-#       ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#        ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#         ^^^ meta.function-call.terraform keyword.control.terraform
-#             ^ meta.function-call.terraform variable.other.readwrite.terraform
-#               ^^ meta.function-call.terraform keyword.operator.word.terraform
-#                  ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                   ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                    ^^ meta.function-call.terraform string.quoted.double.terraform
-#                      ^ meta.function-call.terraform punctuation.separator.terraform
-#                        ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                         ^^ meta.function-call.terraform string.quoted.double.terraform
-#                           ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                            ^ meta.function-call.terraform keyword.operator.terraform
-#                              ^ meta.function-call.terraform variable.other.readwrite.terraform
-#                               ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                ^ meta.function-call.terraform punctuation.section.parens.end.terraform 
-
-/////////////////////////////////////////////////////////////////////
-// Built-in Terraform Functions
-// TODO: match % placeholders in format()-family first parameters
-// TODO: match regexs in regex()-family first parameters
-////////////////////////`/////////////////////////////////////////////
-
-/////
-// Numeric Functions
-/////
-
-      abs(23)
-#     ^^^ meta.function-call.terraform support.function.builtin.terraform
-#        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#         ^^ meta.function-call.terraform constant.numeric.integer.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      ceil(5.1)
-#     ^^^^ meta.function-call.terraform support.function.builtin.terraform
-#         ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#          ^^^ meta.function-call.terraform constant.numeric.float.terraform
-#           ^ meta.function-call.terraform constant.numeric.float.terraform punctuation.separator.decimal.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      floor(5)
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform constant.numeric.integer.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      log(50, 10)
-#     ^^^ meta.function-call.terraform support.function.builtin.terraform
-#        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#         ^^ meta.function-call.terraform constant.numeric.integer.terraform
-#           ^ meta.function-call.terraform punctuation.separator.terraform
-#             ^^ meta.function-call.terraform constant.numeric.integer.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      max(12, 54, 3)
-#     ^^^ meta.function-call.terraform support.function.builtin.terraform
-#        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#         ^^ meta.function-call.terraform constant.numeric.integer.terraform
-#           ^ meta.function-call.terraform punctuation.separator.terraform
-#             ^^ meta.function-call.terraform constant.numeric.integer.terraform
-#               ^ meta.function-call.terraform punctuation.separator.terraform
-#                 ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                  ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      min(12, 54, 3)
-#     ^^^ meta.function-call.terraform support.function.builtin.terraform
-#        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#         ^^ meta.function-call.terraform constant.numeric.integer.terraform
-#           ^ meta.function-call.terraform punctuation.separator.terraform
-#             ^^ meta.function-call.terraform constant.numeric.integer.terraform
-#               ^ meta.function-call.terraform punctuation.separator.terraform
-#                 ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                  ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      pow(3, 2)
-#     ^^^ meta.function-call.terraform support.function.builtin.terraform
-#        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#         ^ meta.function-call.terraform constant.numeric.integer.terraform
-#          ^ meta.function-call.terraform punctuation.separator.terraform
-#            ^ meta.function-call.terraform constant.numeric.integer.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      signum(-13)
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform keyword.operator.arithmetic.terraform
-#             ^^ meta.function-call.terraform constant.numeric.integer.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// String Functions
-/////
-
-      chomp("hello\n")
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#            ^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                 ^^ meta.function-call.terraform string.quoted.double.terraform constant.character.escape.terraform
-#                   ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                    ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      format("Hello, %s!", "Ander")
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                       ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                        ^ meta.function-call.terraform punctuation.separator.terraform
-#                          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                           ^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                                 ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      formatlist("Hello, %s!", ["Valentina", "Ander"])
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                            ^ meta.function-call.terraform punctuation.separator.terraform
-#                              ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                ^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                          ^ meta.function-call.terraform punctuation.separator.terraform
-#                                            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                             ^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                                   ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                                    ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      indent(2, "[\n  foo,\n  bar,\n]\n")
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform constant.numeric.integer.terraform
-#             ^ meta.function-call.terraform punctuation.separator.terraform
-#               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                ^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                       ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      join(", ", ["foo", "bar", "baz"])
-#     ^^^^ meta.function-call.terraform support.function.builtin.terraform
-#         ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#           ^^^ meta.function-call.terraform string.quoted.double.terraform
-#              ^ meta.function-call.terraform punctuation.separator.terraform
-#                ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                 ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                  ^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                      ^ meta.function-call.terraform punctuation.separator.terraform
-#                        ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                         ^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                             ^ meta.function-call.terraform punctuation.separator.terraform
-#                               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                ^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                    ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                     ^ meta.function-call.terraform punctuation.section.parens.end.terraform
- 
-      lower("HELLO")
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#            ^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                  ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      regex("[a-z]+", "53453453.345345aaabbbccc23454")
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#            ^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                   ^ meta.function-call.terraform punctuation.separator.terraform
-#                     ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                                    ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      regexall("[a-z]+", "1234abcd5678efgh9")
-#     ^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#              ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                      ^ meta.function-call.terraform punctuation.separator.terraform
-#                        ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                         ^^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                           ^ meta.function-call.terraform punctuation.section.parens.end.terraform
- 
-      replace("1 + 2 + 3", "+", "-")
-#     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#              ^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                        ^ meta.function-call.terraform punctuation.separator.terraform
-#                          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                           ^^ meta.function-call.terraform string.quoted.double.terraform
-#                             ^ meta.function-call.terraform punctuation.separator.terraform
-#                               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                ^^ meta.function-call.terraform string.quoted.double.terraform
-#                                  ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      split(",", "foo")
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#            ^^ meta.function-call.terraform string.quoted.double.terraform
-#              ^ meta.function-call.terraform punctuation.separator.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                     ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      strrev("hello")
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                   ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      substr("🤔🤷", 0, 1)
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^^ meta.function-call.terraform string.quoted.double.terraform
-#                ^ meta.function-call.terraform punctuation.separator.terraform
-#                  ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                   ^ meta.function-call.terraform punctuation.separator.terraform
-#                     ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      title("hello world")
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#            ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                        ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      trimspace("  hello\n\n")
-#     ^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#              ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                  ^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                            ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      upper("hello")
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#            ^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                  ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// Collection Functions
-/////
-
-      chunklist(["a", "b"], 2)
-#     ^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#              ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#               ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                ^^^ meta.function-call.terraform string.quoted.double.terraform
-#                   ^ meta.function-call.terraform punctuation.separator.terraform
-#                     ^^^ meta.function-call.terraform string.quoted.double.terraform
-#                        ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                         ^ meta.function-call.terraform punctuation.separator.terraform
-#                           ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                            ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      coalesce("a", "b")
-#     ^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#              ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^ meta.function-call.terraform string.quoted.double.terraform
-#                 ^ meta.function-call.terraform punctuation.separator.terraform
-#                   ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                    ^^ meta.function-call.terraform string.quoted.double.terraform
-#                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      coalescelist([], ["c", "d"])
-#     ^^^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                 ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                  ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                   ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                    ^ meta.function-call.terraform punctuation.separator.terraform
-#                      ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                       ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                        ^^ meta.function-call.terraform string.quoted.double.terraform
-#                          ^ meta.function-call.terraform punctuation.separator.terraform
-#                            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                             ^^ meta.function-call.terraform string.quoted.double.terraform
-#                               ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      compact(["a", "", "b"])
-#     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#              ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^ meta.function-call.terraform string.quoted.double.terraform
-#                 ^ meta.function-call.terraform punctuation.separator.terraform
-#                   ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                    ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                     ^ meta.function-call.terraform punctuation.separator.terraform
-#                       ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                        ^^ meta.function-call.terraform string.quoted.double.terraform
-#                          ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                           ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      concat(["a"], ["c"])
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#             ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#              ^^ meta.function-call.terraform string.quoted.double.terraform
-#                ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                 ^ meta.function-call.terraform punctuation.separator.terraform
-#                   ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                    ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                     ^^ meta.function-call.terraform string.quoted.double.terraform
-#                       ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                        ^ meta.function-call.terraform punctuation.section.parens.end.terraform
- 
-      contains(["a"], "a")
-#     ^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#              ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                ^^ meta.function-call.terraform string.quoted.double.terraform
-#                  ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                   ^ meta.function-call.terraform punctuation.separator.terraform
-#                     ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                      ^^ meta.function-call.terraform string.quoted.double.terraform
-#                        ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      distinct(["a", "b", "a"])
-#     ^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#              ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                ^^ meta.function-call.terraform string.quoted.double.terraform
-#                  ^ meta.function-call.terraform punctuation.separator.terraform
-#                    ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                     ^^ meta.function-call.terraform string.quoted.double.terraform
-#                       ^ meta.function-call.terraform punctuation.separator.terraform
-#                         ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                          ^^ meta.function-call.terraform string.quoted.double.terraform
-#                            ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                             ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      element(["a", "b"], 1)
-#     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#              ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^ meta.function-call.terraform string.quoted.double.terraform
-#                 ^ meta.function-call.terraform punctuation.separator.terraform
-#                   ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                    ^^ meta.function-call.terraform string.quoted.double.terraform
-#                      ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                       ^ meta.function-call.terraform punctuation.separator.terraform
-#                         ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                          ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      flatten([[["a", "b"]], ["c"]])
-#     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^^^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^ meta.function-call.terraform string.quoted.double.terraform
-#                   ^ meta.function-call.terraform punctuation.separator.terraform
-#                     ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                      ^^ meta.function-call.terraform string.quoted.double.terraform
-#                        ^^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                          ^ meta.function-call.terraform punctuation.separator.terraform
-#                            ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                             ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                              ^^ meta.function-call.terraform string.quoted.double.terraform
-#                                ^^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                  ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      index(["a"], "b")
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^ meta.function-call.terraform string.quoted.double.terraform
-#               ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                ^ meta.function-call.terraform punctuation.separator.terraform
-#                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                   ^^ meta.function-call.terraform string.quoted.double.terraform
-#                     ^ meta.function-call.terraform punctuation.section.parens.end.terraform
+    thing(l)
+#   ^^^^^ meta.function-call.terraform variable.function.terraform
+#        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
+#         ^ meta.function-call.terraform
+#          ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 
       keys({a=1, c=2})
 #     ^^^^ meta.function-call.terraform support.function.builtin.terraform
@@ -1667,1347 +117,55 @@
 #                 ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
 #                  ^ meta.function-call.terraform meta.braces.terraform constant.numeric.integer.terraform
 #                   ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                    ^ meta.function-call.terraform punctuation.section.parens.end.terraform 
-
-      length([])
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#             ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#              ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      list("a", "b", "c")
-#     ^^^^ meta.function-call.terraform support.function.builtin.terraform
-#         ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#           ^^ meta.function-call.terraform string.quoted.double.terraform
-#             ^ meta.function-call.terraform punctuation.separator.terraform
-#               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                ^^ meta.function-call.terraform string.quoted.double.terraform
-#                  ^ meta.function-call.terraform punctuation.separator.terraform
-#                    ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                     ^^ meta.function-call.terraform string.quoted.double.terraform
-#                       ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      lookup({a="ay", b="bee"}, "a", "what?")
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#             ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#              ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#               ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                ^^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                   ^ meta.function-call.terraform meta.braces.terraform punctuation.separator.terraform
-#                     ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                      ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                       ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                        ^^^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                            ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                             ^ meta.function-call.terraform punctuation.separator.terraform
-#                               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                ^^ meta.function-call.terraform string.quoted.double.terraform
-#                                  ^ meta.function-call.terraform punctuation.separator.terraform
-#                                    ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                     ^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                           ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      map("a", "b")
-#     ^^^ meta.function-call.terraform support.function.builtin.terraform
-#        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#         ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#          ^^ meta.function-call.terraform string.quoted.double.terraform
-#            ^ meta.function-call.terraform punctuation.separator.terraform
-#              ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^ meta.function-call.terraform string.quoted.double.terraform
-#                 ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      matchkeys(["i-123", "i-abc"], ["us-west", "us-east"], ["us-east"])
-#     ^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#              ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#               ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                       ^ meta.function-call.terraform punctuation.separator.terraform
-#                         ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                          ^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                 ^ meta.function-call.terraform punctuation.separator.terraform
-#                                   ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                                    ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                     ^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                             ^ meta.function-call.terraform punctuation.separator.terraform
-#                                               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                                ^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                                        ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                                         ^ meta.function-call.terraform punctuation.separator.terraform
-#                                                           ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                                                            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                                             ^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                                                     ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                                                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      merge({a="b"}, {e="f"})
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#            ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#             ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#              ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                 ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                  ^ meta.function-call.terraform punctuation.separator.terraform
-#                    ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#                     ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                      ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                       ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                        ^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                          ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                           ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      range(1, 4)
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform constant.numeric.integer.terraform
-#            ^ meta.function-call.terraform punctuation.separator.terraform
-#              ^ meta.function-call.terraform constant.numeric.integer.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      reverse([1, 2, 3])
-#     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#              ^ meta.function-call.terraform constant.numeric.integer.terraform
-#               ^ meta.function-call.terraform punctuation.separator.terraform
-#                 ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                  ^ meta.function-call.terraform punctuation.separator.terraform
-#                    ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                     ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      setintersection(["a", "b"], ["b", "c"])
-#     ^^^^^^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                    ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                     ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                      ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                       ^^ meta.function-call.terraform string.quoted.double.terraform
-#                         ^ meta.function-call.terraform punctuation.separator.terraform
-#                           ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                            ^^ meta.function-call.terraform string.quoted.double.terraform
-#                              ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                               ^ meta.function-call.terraform punctuation.separator.terraform
-#                                 ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                   ^^ meta.function-call.terraform string.quoted.double.terraform
-#                                     ^ meta.function-call.terraform punctuation.separator.terraform
-#                                       ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                        ^^ meta.function-call.terraform string.quoted.double.terraform
-#                                          ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                           ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      setproduct(["development"], ["app1", "app2"])
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                 ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                  ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                              ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                               ^ meta.function-call.terraform punctuation.separator.terraform
-#                                 ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                   ^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                        ^ meta.function-call.terraform punctuation.separator.terraform
-#                                          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                           ^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                                ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                                 ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      setunion(["a"], ["b"], ["d"])
-#     ^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#              ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                ^^ meta.function-call.terraform string.quoted.double.terraform
-#                  ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                   ^ meta.function-call.terraform punctuation.separator.terraform
-#                     ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                      ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                       ^^ meta.function-call.terraform string.quoted.double.terraform
-#                         ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                          ^ meta.function-call.terraform punctuation.separator.terraform
-#                            ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                             ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                              ^^ meta.function-call.terraform string.quoted.double.terraform
-#                                ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                                 ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      slice(["a", "b"], 1, 1)
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^ meta.function-call.terraform string.quoted.double.terraform
-#               ^ meta.function-call.terraform punctuation.separator.terraform
-#                 ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                  ^^ meta.function-call.terraform string.quoted.double.terraform
-#                    ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                     ^ meta.function-call.terraform punctuation.separator.terraform
-#                       ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                        ^ meta.function-call.terraform punctuation.separator.terraform
-#                          ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                           ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-      sort(["e", "d"])
-#     ^^^^ meta.function-call.terraform support.function.builtin.terraform
-#         ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#          ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#           ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#            ^^ meta.function-call.terraform string.quoted.double.terraform
-#              ^ meta.function-call.terraform punctuation.separator.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^ meta.function-call.terraform string.quoted.double.terraform
-#                   ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
 #                    ^ meta.function-call.terraform punctuation.section.parens.end.terraform
 
-      transpose({a = ["1", "2"], b = ["2", "3"]})
-#     ^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#              ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#               ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#                ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                  ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                    ^ meta.function-call.terraform meta.braces.terraform punctuation.section.brackets.begin.terraform
-#                     ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                      ^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                        ^ meta.function-call.terraform meta.braces.terraform punctuation.separator.terraform
-#                          ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                           ^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                             ^ meta.function-call.terraform meta.braces.terraform punctuation.section.brackets.end.terraform
-#                              ^ meta.function-call.terraform meta.braces.terraform punctuation.separator.terraform
-#                                ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                                  ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                                    ^ meta.function-call.terraform meta.braces.terraform punctuation.section.brackets.begin.terraform
-#                                     ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                      ^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                                        ^ meta.function-call.terraform meta.braces.terraform punctuation.separator.terraform
-#                                          ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                           ^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                                             ^ meta.function-call.terraform meta.braces.terraform punctuation.section.brackets.end.terraform
-#                                              ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      values({a=3, c=2, d=1})
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#             ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#              ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#               ^ meta.function-call.terraform meta.braces.terraform constant.numeric.integer.terraform
-#                ^ meta.function-call.terraform meta.braces.terraform punctuation.separator.terraform
-#                  ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                   ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                    ^ meta.function-call.terraform meta.braces.terraform constant.numeric.integer.terraform
-#                     ^ meta.function-call.terraform meta.braces.terraform punctuation.separator.terraform
-#                       ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                        ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                         ^ meta.function-call.terraform meta.braces.terraform constant.numeric.integer.terraform
-#                          ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                           ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      zipmap(["a", "b"], [1, 2])
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#             ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#              ^^ meta.function-call.terraform string.quoted.double.terraform
-#                ^ meta.function-call.terraform punctuation.separator.terraform
-#                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                   ^^ meta.function-call.terraform string.quoted.double.terraform
-#                     ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                      ^ meta.function-call.terraform punctuation.separator.terraform
-#                        ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#                         ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                          ^ meta.function-call.terraform punctuation.separator.terraform
-#                            ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                             ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                              ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// Encoding Functions
-/////
-
-      base64decode("SGVsbG8gV29ybGQ=")
-#     ^^^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                 ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                   ^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                    ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      base64encode("Hello World")
-#     ^^^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                 ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                   ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      base64gzip("Hello World")
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                             ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      csvdecode("a,b,c\n1,2,3\n4,5,6")
-#     ^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#              ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                ^^^^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                    ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      jsondecode("{\"hello\": \"world\"}")
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                        ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      jsonencode({hello="world"})
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#                 ^^^^^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                      ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                       ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                        ^^^^^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                              ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      urlencode("Hello World")
-#     ^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#              ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#               ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                            ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      yamldecode("true")
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      yamlencode({a = "b", c = "d"})
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#                 ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                   ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                     ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                      ^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                        ^ meta.function-call.terraform meta.braces.terraform punctuation.separator.terraform
-#                          ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                            ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                              ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                               ^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                                  ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// Filesystem Functions
-/////
-
-      abspath(path.root)
-#     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^^^^ meta.function-call.terraform support.constant.terraform
-#                 ^ meta.function-call.terraform keyword.operator.accessor.terraform
-#                  ^^^^ meta.function-call.terraform variable.other.member.terraform
-#                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      dirname("foo/bar/baz.txt")
-#     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#              ^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                              ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      pathexpand("~/.ssh/id_rsa")
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      basename("foo/bar/baz.txt")
-#     ^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#              ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      file("${path.module}/hello.txt")
-#     ^^^^ meta.function-call.terraform support.function.builtin.terraform
-#         ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#           ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#             ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                 ^ meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
-#                  ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                        ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                         ^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                    ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      fileexists("${path.module}/hello.txt")
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                   ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                       ^ meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
-#                        ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                              ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                               ^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                          ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      fileset(path.module, "files/*.txt")
-#     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^^^^ meta.function-call.terraform support.constant.terraform
-#                 ^ meta.function-call.terraform keyword.operator.accessor.terraform
-#                  ^^^^^^ meta.function-call.terraform variable.other.member.terraform
-#                        ^ meta.function-call.terraform punctuation.separator.terraform
-#                          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                           ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                       ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      filebase64("${path.module}/hello.txt")
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                   ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                       ^ meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
-#                        ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                              ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                               ^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                          ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      templatefile("${path.module}/backends.tmpl", {
-#     ^^^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                 ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                   ^^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                     ^^^^ meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                         ^ meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
-#                          ^^^^^^ meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                                ^ meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                 ^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                                ^ meta.function-call.terraform punctuation.separator.terraform
-#                                                  ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-        port = 8080,
-#       ^^^^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#            ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#              ^^^^ meta.function-call.terraform meta.braces.terraform constant.numeric.integer.terraform
-#                  ^ meta.function-call.terraform meta.braces.terraform punctuation.separator.terraform
-#                   ^ meta.function-call.terraform meta.braces.terraform
-        ip_addrs = ["10.0.0.1", "10.0.0.2"]
-#       ^^^^^^^^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                  ^ meta.function-call.terraform meta.braces.terraform punctuation.section.brackets.begin.terraform
-#                   ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                    ^^^^^^^^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                             ^ meta.function-call.terraform meta.braces.terraform punctuation.separator.terraform
-#                               ^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                ^^^^^^^^^ meta.function-call.terraform meta.braces.terraform string.quoted.double.terraform
-#                                         ^ meta.function-call.terraform meta.braces.terraform punctuation.section.brackets.end.terraform
-      })
-#     ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// Date & Time Functions
-/////
-
-      formatdate("DD MMM YYYY hh:mm ZZZ", "2018-01-02T23:12:01Z")
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                       ^ meta.function-call.terraform punctuation.separator.terraform
-#                                         ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                          ^^^^^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
- 
-      timeadd("2017-11-22T00:00:00Z", "10m")
-#     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#              ^^^^^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                   ^ meta.function-call.terraform punctuation.separator.terraform
-#                                     ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                      ^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                          ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      timestamp()
-#     ^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#              ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// Hash & Crypto Functions
-/////
-
-      base64sha256("hello world")
-#     ^^^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                 ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                   ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      base64sha512("hello world")
-#     ^^^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                 ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                   ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      bcrypt("hello world")
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                         ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      filebase64sha256(file("filename"))
-#     ^^^^^^^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                     ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                      ^^^^ meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform
-#                          ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                           ^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                            ^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform
-#                                     ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                       ^ -function
-
-      filebase64sha512(file("filename"))
-#     ^^^^^^^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                     ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                      ^^^^ meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform
-#                          ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                           ^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                            ^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform
-#                                     ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                       ^ -function
-
-      filemd5(file("filename"))
-#     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^^^^ meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform
-#                 ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                  ^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                   ^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform
-#                            ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                             ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      filemd1(file("filename"))
-#     ^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^^^^ meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform
-#                 ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                  ^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                   ^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform
-#                            ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                             ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                              ^ -function
-
-      filesha256(file("filename"))
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^^^^ meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform
-#                    ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                     ^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                      ^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform
-#                               ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                 ^ -function
-
-      filesha512(file("filename"))
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^^^^ meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform
-#                    ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                     ^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                      ^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform
-#                               ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                 ^ -function
- 
-      md5("hello world")
-#     ^^^ meta.function-call.terraform support.function.builtin.terraform
-#        ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#         ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#          ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      rsadecrypt(filebase64("${path.module}/ciphertext"), file("privatekey.pem"))
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform
-#                          ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                           ^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                            ^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#                              ^^^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform support.constant.terraform
-#                                  ^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform keyword.operator.accessor.terraform
-#                                   ^^^^^^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform variable.other.member.terraform
-#                                         ^ meta.function-call.terraform meta.function-call.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform
-#                                          ^^^^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform
-#                                                      ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                                       ^ meta.function-call.terraform punctuation.separator.terraform
-#                                                         ^^^^ meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform
-#                                                             ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                                                              ^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                                               ^^^^^^^^^^^^^^^ meta.function-call.terraform meta.function-call.terraform string.quoted.double.terraform
-#                                                                              ^ meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                                                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                                                                ^ -function
-
-      sha1("hello world")
-#     ^^^^ meta.function-call.terraform support.function.builtin.terraform
-#         ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#          ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#           ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                       ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      sha256("hello world")
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                         ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      sha512("hello world")
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                         ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      uuid()
-#     ^^^^ meta.function-call.terraform support.function.builtin.terraform
-#         ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      uuidv5("dns", "www.terraform.io")
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                 ^ meta.function-call.terraform punctuation.separator.terraform
-#                   ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                    ^^^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                     ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// IP Network Functions
-/////
-
-      cidrhost("10.12.127.0/20", 16)
-#     ^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#              ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                              ^ meta.function-call.terraform punctuation.separator.terraform
-#                                ^^ meta.function-call.terraform constant.numeric.integer.terraform
-#                                  ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      cidrnetmask("172.16.0.0/12")
-#     ^^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                 ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                  ^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                                ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      cidrsubnet("172.16.0.0/12", 4, 2)
-#     ^^^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                 ^^^^^^^^^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                               ^ meta.function-call.terraform punctuation.separator.terraform
-#                                 ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                                  ^ meta.function-call.terraform punctuation.separator.terraform
-#                                    ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                                     ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////
-// Type Conversions Functions
-/////
-
-      tobool(true)
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^^^^ meta.function-call.terraform constant.language.terraform
-#                ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      tolist(["a", "b", "c"])
-#     ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#           ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#            ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#             ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#              ^^ meta.function-call.terraform string.quoted.double.terraform
-#                ^ meta.function-call.terraform punctuation.separator.terraform
-#                  ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                   ^^ meta.function-call.terraform string.quoted.double.terraform
-#                     ^ meta.function-call.terraform punctuation.separator.terraform
-#                       ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                        ^^ meta.function-call.terraform string.quoted.double.terraform
-#                          ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                           ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      tomap({a = 1, b = 2})
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
-#            ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#              ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                ^ meta.function-call.terraform meta.braces.terraform constant.numeric.integer.terraform
-#                 ^ meta.function-call.terraform meta.braces.terraform punctuation.separator.terraform
-#                   ^ meta.function-call.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#                     ^ meta.function-call.terraform meta.braces.terraform keyword.operator.terraform
-#                       ^ meta.function-call.terraform meta.braces.terraform constant.numeric.integer.terraform
-#                        ^ meta.function-call.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-#                         ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      tonumber(1)
-#     ^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#              ^ meta.function-call.terraform constant.numeric.integer.terraform
-#               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
- 
-      toset(["a", "b", "c"])
-#     ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#          ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#           ^ meta.function-call.terraform punctuation.section.brackets.begin.terraform
-#            ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^ meta.function-call.terraform string.quoted.double.terraform
-#               ^ meta.function-call.terraform punctuation.separator.terraform
-#                 ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                  ^^ meta.function-call.terraform string.quoted.double.terraform
-#                    ^ meta.function-call.terraform punctuation.separator.terraform
-#                      ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                       ^^ meta.function-call.terraform string.quoted.double.terraform
-#                         ^ meta.function-call.terraform punctuation.section.brackets.end.terraform
-#                          ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-      tostring("hello")
-#     ^^^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#              ^ meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#               ^^^^^^ meta.function-call.terraform string.quoted.double.terraform
-#                     ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-
-/////////////////////////////////////////////////////////////////////
-// TUPLE FOR-EXPRESSIONS
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Basic expression.
-/////
-
     [for s in var.list : upper(s)]
 #   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
+#    ^^^ keyword.control.loop.for.terraform
 #        ^ variable.other.readwrite.terraform
-#          ^^ keyword.operator.word.terraform
-#             ^^^ support.constant.terraform
-#                ^ keyword.operator.accessor.terraform
+#          ^^ keyword.control.loop.in.terraform
+#             ^^^ variable.language.terraform
+#                ^ punctuation.accessor.dot.terraform
 #                 ^^^^ variable.other.member.terraform
-#                      ^ keyword.operator.terraform
-#                        ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                              ^ meta.function-call.terraform
-#                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
+#                      ^ punctuation.section.block.loop.for.terraform
+#                        ^^^^^^^^ meta.function-call.terraform
+#                        ^^^^^ support.function.builtin.terraform
+#                             ^ punctuation.section.parens.begin.terraform
+#                               ^ punctuation.section.parens.end.terraform
 #                                ^ punctuation.section.brackets.end.terraform
 
-/////
-// Object or map source value.
-////
-
-    [for k, v in var.map : length(k) + length(v)]
-#   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
-#        ^ variable.other.readwrite.terraform
-#         ^ punctuation.separator.terraform
-#           ^ variable.other.readwrite.terraform
-#             ^^ keyword.operator.word.terraform
-#                ^^^ support.constant.terraform
-#                   ^ keyword.operator.accessor.terraform
-#                    ^^^ variable.other.member.terraform
-#                        ^ keyword.operator.terraform
-#                          ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                                ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                                 ^ meta.function-call.terraform
-#                                  ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                    ^ keyword.operator.arithmetic.terraform
-#                                      ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                                            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                                             ^ meta.function-call.terraform
-#                                              ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                               ^ punctuation.section.brackets.end.terraform
-
-/////
-// Complex right-side expressions.
-////
-
-    [for o in var.list : o.interfaces[0].name]
-#   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
-#        ^ variable.other.readwrite.terraform
-#          ^^ keyword.operator.word.terraform
-#             ^^^ support.constant.terraform
-#                ^ keyword.operator.accessor.terraform
-#                 ^^^^ variable.other.member.terraform
-#                      ^ keyword.operator.terraform
-#                        ^ variable.other.readwrite.terraform
-#                         ^ keyword.operator.accessor.terraform
-#                          ^^^^^^^^^^ variable.other.member.terraform
-#                                    ^ punctuation.section.brackets.begin.terraform
-#                                     ^ constant.numeric.integer.terraform
-#                                      ^ punctuation.section.brackets.end.terraform
-#                                       ^ keyword.operator.accessor.terraform
-#                                        ^^^^ variable.other.member.terraform
-#                                            ^ punctuation.section.brackets.end.terraform
-
-/////
-// Legacy splat expression attribute access.
-/////
-
-    [for o in var.list : o.interfaces][0].name
-#   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
-#        ^ variable.other.readwrite.terraform
-#          ^^ keyword.operator.word.terraform
-#             ^^^ support.constant.terraform
-#                ^ keyword.operator.accessor.terraform
-#                 ^^^^ variable.other.member.terraform
-#                      ^ keyword.operator.terraform
-#                        ^ variable.other.readwrite.terraform
-#                         ^ keyword.operator.accessor.terraform
-#                          ^^^^^^^^^^ variable.other.member.terraform
-#                                    ^ punctuation.section.brackets.end.terraform
-#                                     ^ punctuation.section.brackets.begin.terraform
-#                                      ^ constant.numeric.integer.terraform
-#                                       ^ punctuation.section.brackets.end.terraform
-#                                        ^ keyword.operator.accessor.terraform
-#                                         ^^^^ variable.other.member.terraform
-
-/////
-// Multi-line for-expressions.
-/////
-
-    value = [
-#   ^^^^^ variable.declaration.terraform variable.other.readwrite.terraform
-#         ^^ variable.declaration.terraform keyword.operator.assignment.terraform
-#           ^ punctuation.section.brackets.begin.terraform
-      for instance in aws_instance.ubuntu:
-#     ^^^ keyword.control.terraform
-#         ^^^^^^^^ variable.other.readwrite.terraform
-#                  ^^ keyword.operator.word.terraform
-#                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
-#                                 ^ keyword.operator.accessor.terraform
-#                                  ^^^^^^ variable.other.member.terraform
-#                                        ^ keyword.operator.terraform
-      instance.private_dns
-#     ^^^^^^^^ variable.other.readwrite.terraform
-#             ^ keyword.operator.accessor.terraform
-#              ^^^^^^^^^^^ variable.other.member.terraform
-    ]
-#   ^ punctuation.section.brackets.end.terraform
-
-/////
-// Match conditional on right-side expression.
-/////
-
-    value = [
-#   ^^^^^ variable.declaration.terraform variable.other.readwrite.terraform
-#         ^^ variable.declaration.terraform keyword.operator.assignment.terraform
-#           ^ punctuation.section.brackets.begin.terraform
-      for instance in aws_instance.ubuntu:
-#     ^^^ keyword.control.terraform
-#         ^^^^^^^^ variable.other.readwrite.terraform
-#                  ^^ keyword.operator.word.terraform
-#                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
-#                                 ^ keyword.operator.accessor.terraform
-#                                  ^^^^^^ variable.other.member.terraform
-#                                        ^ keyword.operator.terraform 
-      (instance.public_ip != "" ? list(instance.private_ip, instance.public_ip) : list(instance.private_ip))
-#     ^ punctuation.section.parens.begin.terraform
-#      ^^^^^^^^ variable.other.readwrite.terraform
-#              ^ keyword.operator.accessor.terraform
-#               ^^^^^^^^^ variable.other.member.terraform
-#                         ^^ keyword.operator.terraform
-#                            ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                             ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                               ^ keyword.operator.terraform
-#                                 ^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                                     ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                                      ^^^^^^^^ meta.function-call.terraform
-#                                              ^ meta.function-call.terraform keyword.operator.accessor.terraform
-#                                               ^^^^^^^^^^ meta.function-call.terraform variable.other.member.terraform
-#                                                         ^ meta.function-call.terraform punctuation.separator.terraform
-#                                                           ^^^^^^^^ meta.function-call.terraform
-#                                                                   ^ meta.function-call.terraform keyword.operator.accessor.terraform
-#                                                                    ^^^^^^^^^ meta.function-call.terraform variable.other.member.terraform
-#                                                                             ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                                                               ^ keyword.operator.terraform
-#                                                                                 ^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                                                                                     ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                                                                                      ^^^^^^^^ meta.function-call.terraform
-#                                                                                              ^ meta.function-call.terraform keyword.operator.accessor.terraform
-#                                                                                               ^^^^^^^^^^ meta.function-call.terraform variable.other.member.terraform
-#                                                                                                         ^ meta.function-call.terraform punctuation.section.parens.end.terraform 
-#                                                                                                          ^ punctuation.section.parens.end.terraform
-    ]
-#   ^ punctuation.section.brackets.end.terraform
-
-/////
-// Match brackets on right-side expression.
-/////
-
-    value = [
-#   ^^^^^ variable.declaration.terraform variable.other.readwrite.terraform
-#         ^^ variable.declaration.terraform keyword.operator.assignment.terraform
-#           ^ punctuation.section.brackets.begin.terraform 
-      for instance in aws_instance.ubuntu:
-#     ^^^ keyword.control.terraform
-#         ^^^^^^^^ variable.other.readwrite.terraform
-#                  ^^ keyword.operator.word.terraform
-#                     ^^^^^^^^^^^^ variable.other.readwrite.terraform
-#                                 ^ keyword.operator.accessor.terraform
-#                                  ^^^^^^ variable.other.member.terraform
-#                                        ^ keyword.operator.terraform 
-      (instance.public_ip != "" ? [instance.private_ip, instance.public_ip] : [instance.private_ip])
-#     ^ punctuation.section.parens.begin.terraform
-#      ^^^^^^^^ variable.other.readwrite.terraform
-#              ^ keyword.operator.accessor.terraform
-#               ^^^^^^^^^ variable.other.member.terraform
-#                         ^^ keyword.operator.terraform
-#                            ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                             ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                               ^ keyword.operator.terraform
-#                                 ^ punctuation.section.brackets.begin.terraform
-#                                          ^ keyword.operator.accessor.terraform
-#                                           ^^^^^^^^^^ variable.other.member.terraform
-#                                                     ^ punctuation.separator.terraform
-#                                                               ^ keyword.operator.accessor.terraform 
-#                                                                ^^^^^^^^^ variable.other.member.terraform  
-#                                                                         ^ punctuation.section.brackets.end.terraform
-#                                                                           ^ keyword.operator.terraform
-#                                                                             ^ punctuation.section.brackets.begin.terraform
-#                                                                                      ^ keyword.operator.accessor.terraform
-#                                                                                       ^^^^^^^^^^ variable.other.member.terraform
-#                                                                                                 ^ punctuation.section.brackets.end.terraform  
-#                                                                                                  ^ punctuation.section.parens.end.terraform 
-    ]
-#   ^ punctuation.section.brackets.end.terraform
-
-/////
-// Match if-conditionals on right-side.
-/////
-
-    [for s in var.list : upper(s) if s != ""]
-#   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
-#        ^ variable.other.readwrite.terraform
-#          ^^ keyword.operator.word.terraform
-#             ^^^ support.constant.terraform
-#                ^ keyword.operator.accessor.terraform
-#                 ^^^^ variable.other.member.terraform
-#                      ^ keyword.operator.terraform
-#                        ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                             ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                              ^ meta.function-call.terraform
-#                               ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                 ^^ keyword.control.conditional.terraform
-#                                    ^ variable.other.readwrite.terraform
-#                                      ^^ keyword.operator.terraform
-#                                         ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                          ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                                           ^ punctuation.section.brackets.end.terraform
-
-/////
-// Matches bracket-literals as range expression.
-/////
-
-    [for i, v in ["a", "b", "c"]: v if i < 2]
-#   ^ punctuation.section.brackets.begin.terraform
-#    ^^^ keyword.control.terraform
-#        ^ variable.other.readwrite.terraform
-#         ^ punctuation.separator.terraform
-#           ^ variable.other.readwrite.terraform
-#             ^^ keyword.operator.word.terraform
-#                ^ punctuation.section.brackets.begin.terraform
-#                 ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                  ^^ string.quoted.double.terraform
-#                    ^ punctuation.separator.terraform
-#                      ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                       ^^ string.quoted.double.terraform
-#                         ^ punctuation.separator.terraform
-#                           ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                            ^^ string.quoted.double.terraform
-#                              ^ punctuation.section.brackets.end.terraform
-#                               ^ keyword.operator.terraform
-#                                 ^ variable.other.readwrite.terraform
-#                                   ^^ keyword.control.conditional.terraform
-#                                      ^ variable.other.readwrite.terraform
-#                                        ^ keyword.operator.terraform
-#                                          ^ constant.numeric.integer.terraform
-#                                           ^ punctuation.section.brackets.end.terraform
-
-/////////////////////////////////////////////////////////////////////
-// OBJECT FOR-EXPRESSIONS
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Matches basic syntax.
-/////
-
-    {for i, v in ["a", "b"]: v => i}
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#    ^^^ meta.braces.terraform keyword.control.terraform
-#        ^ variable.other.readwrite.terraform
-#         ^ punctuation.separator.terraform
-#           ^ variable.other.readwrite.terraform
-#             ^^ keyword.operator.word.terraform
-#                ^ punctuation.section.brackets.begin.terraform
-#                 ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                  ^^ string.quoted.double.terraform
-#                    ^ punctuation.separator.terraform
-#                      ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                       ^^ string.quoted.double.terraform
-#                         ^ punctuation.section.brackets.end.terraform
-#                          ^ keyword.operator.terraform
-#                            ^ variable.other.readwrite.terraform
-#                              ^^ storage.type.function.terraform
-#                                 ^ variable.other.readwrite.terraform
-#                                  ^ punctuation.section.braces.end.terraform
-#                                   ^ -meta
-
-/////
-// Matches ellipsis.
-/////
-
     {for i, v in ["a"]: v => i...}
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#    ^^^ meta.braces.terraform keyword.control.terraform
+#   ^^^^ meta.braces.terraform
+#   ^ punctuation.section.braces.begin.terraform
+#    ^^^ keyword.control.loop.for.terraform
 #        ^ variable.other.readwrite.terraform
 #         ^ punctuation.separator.terraform
 #           ^ variable.other.readwrite.terraform
-#             ^^ keyword.operator.word.terraform
+#             ^^ keyword.control.loop.in.terraform
 #                ^ punctuation.section.brackets.begin.terraform
-#                 ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                  ^^ string.quoted.double.terraform
+#                 ^^^ meta.string.terraform string.quoted.double.terraform
+#                 ^ punctuation.definition.string.begin.terraform
+#                   ^ punctuation.definition.string.end.terraform
 #                    ^ punctuation.section.brackets.end.terraform
-#                     ^ keyword.operator.terraform
+#                     ^ punctuation.section.block.loop.for.terraform
 #                       ^ variable.other.readwrite.terraform
-#                         ^^ storage.type.function.terraform
+#                         ^^ punctuation.separator.key-value.terraform
 #                            ^ variable.other.readwrite.terraform
 #                             ^^^ keyword.operator.terraform
 #                                ^ punctuation.section.braces.end.terraform
 
-/////
-// Matches if-conditional.
-/////
-
-    {for s in var.list : substr(s, 0, 1) => s... if s != ""}
-#   ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-#    ^^^ meta.braces.terraform keyword.control.terraform
-#        ^ variable.other.readwrite.terraform
-#          ^^ keyword.operator.word.terraform
-#             ^^^ support.constant.terraform
-#                ^ keyword.operator.accessor.terraform
-#                 ^^^^ variable.other.member.terraform
-#                      ^ keyword.operator.terraform
-#                        ^^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#                              ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                               ^ meta.function-call.terraform
-#                                ^ meta.function-call.terraform punctuation.separator.terraform
-#                                  ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                                   ^ meta.function-call.terraform punctuation.separator.terraform
-#                                     ^ meta.function-call.terraform constant.numeric.integer.terraform
-#                                      ^ meta.function-call.terraform punctuation.section.parens.end.terraform
-#                                        ^^ storage.type.function.terraform
-#                                           ^ variable.other.readwrite.terraform
-#                                            ^^^ keyword.operator.terraform
-#                                                ^^ keyword.control.conditional.terraform
-#                                                   ^ variable.other.readwrite.terraform
-#                                                     ^^ keyword.operator.terraform
-#                                                        ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                                         ^ string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                                                          ^ punctuation.section.braces.end.terraform
-
-/////
-// Matches over multiple-lines.
-/////
-
-    value = {
-#   ^^^^^ variable.declaration.terraform variable.other.readwrite.terraform
-#         ^^ variable.declaration.terraform keyword.operator.assignment.terraform
-#           ^ meta.braces.terraform punctuation.section.braces.begin.terraform
-      for l in var.letters: l =>
-#     ^^^ meta.braces.terraform keyword.control.terraform
-#         ^ variable.other.readwrite.terraform
-#           ^^ keyword.operator.word.terraform
-#              ^^^ support.constant.terraform
-#                 ^ keyword.operator.accessor.terraform
-#                  ^^^^^^^ variable.other.member.terraform
-#                         ^ keyword.operator.terraform
-#                           ^ variable.other.readwrite.terraform
-#                             ^^ storage.type.function.terraform
-        upper(l)
-#       ^^^^^ meta.function-call.terraform support.function.builtin.terraform
-#            ^ meta.function-call.terraform punctuation.section.parens.begin.terraform
-#             ^ meta.function-call.terraform
-#              ^ meta.function-call.terraform punctuation.section.parens.end.terraform 
-    }
-#   ^ punctuation.section.braces.end.terraform
-
-/////////////////////////////////////////////////////////////////////
-// BLOCKS
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Inline block with no labels.
-////
-
-    thing  {}
-#   ^^^^^ meta.type.terraform entity.name.type.terraform
-#          ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-#           ^ meta.block.terraform punctuation.section.block.end.terraform
-
-/////
-// Inline block with string labels.
-/////
-
     thing "label1"   "label2" {}
-#   ^^^^^ meta.type.terraform entity.name.type.terraform
-#         ^ meta.type.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#          ^^^^^^ meta.type.terraform string.quoted.double.terraform
-#                ^ meta.type.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                    ^ meta.type.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                     ^^^^^^ meta.type.terraform string.quoted.double.terraform
-#                           ^ meta.type.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-#                             ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
+#   ^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.type.terraform
+#   ^^^^^ entity.name.type.terraform
+#         ^^^^^^^^ string.quoted.double.terraform
+#         ^ punctuation.definition.string.begin.terraform
+#                ^ punctuation.definition.string.end.terraform
+#                    ^^^^^^^^ string.quoted.double.terraform
+#                    ^ punctuation.definition.string.begin.terraform
+#                           ^ punctuation.definition.string.end.terraform
+#                             ^ meta.block.terraform punctuation.section.block.begin.terraform
 #                              ^ meta.block.terraform punctuation.section.block.end.terraform
-#                               ^ -meta
 
-/////
-// Inline block with identifier labels.
-/////
-
-    thing thing1 thing2 thing3 {}
-#   ^^^^^ meta.type.terraform entity.name.type.terraform
-#         ^^^^^^ meta.type.terraform entity.name.label.terraform
-#                ^^^^^^ meta.type.terraform entity.name.label.terraform
-#                       ^^^^^^ meta.type.terraform entity.name.label.terraform
-#                              ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-#                               ^ meta.block.terraform punctuation.section.block.end.terraform
-
-//////
-// Nested multi-line blocks with expressions.
-/////
-
-    resource "aws_security_group" "example" {
-#   ^^^^^^^^ meta.type.terraform storage.type.terraform
-#            ^ meta.type.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^^^^^^^^^^^^^^^^^^ meta.type.terraform string.quoted.double.terraform
-#                                 ^ meta.type.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                                  ^^^^^^^^ meta.type.terraform string.quoted.double.terraform
-#                                           ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-      name = "example"
-#     ^^^^ meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
-#          ^^ meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
-#            ^ meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#             ^^^^^^^^ meta.block.terraform string.quoted.double.terraform
-    
-      dynamic "ingress" {
-#     ^^^^^^^ meta.block.terraform meta.type.terraform entity.name.type.terraform
-#             ^ meta.block.terraform meta.type.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#              ^^^^^^^^ meta.block.terraform meta.type.terraform string.quoted.double.terraform
-#                       ^ meta.block.terraform meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-        for_each = var.service_ports
-#       ^^^^^^^^ meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
-#                ^^ meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
-#                  ^^^ meta.block.terraform meta.block.terraform support.constant.terraform
-#                     ^ meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform
-#                      ^^^^^^^^^^^^^ meta.block.terraform meta.block.terraform variable.other.member.terraform
-        content {
-#       ^^^^^^^ meta.block.terraform meta.block.terraform meta.type.terraform entity.name.type.terraform
-#               ^ meta.block.terraform meta.block.terraform meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-          from_port = ingress.value
-#         ^^^^^^^^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
-#                   ^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
-#                            ^ meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform
-#                             ^^^^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform
-          to_port   = ingress.value
-#         ^^^^^^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
-#                   ^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
-#                            ^ meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform
-          protocol  = "tcp" + "IP"
-#         ^^^^^^^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
-#                   ^^ meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
-#                     ^ meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                      ^^^^ meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform
-#                           ^ meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.arithmetic.terraform
-#                             ^ meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#                              ^^^ meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform
-        }
-#       ^ meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform
-      }
-#     ^ meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform
-    }
-#   ^ meta.block.terraform punctuation.section.block.end.terraform
-#    ^ -meta
-
-/////
-// Matches blocks with functions, objects, tuples.
-/////
-
-    thing label1 {
-#   ^^^^^ meta.type.terraform entity.name.type.terraform
-#         ^^^^^^ meta.type.terraform entity.name.label.terraform
-#                ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-      func = function(param1)
-#     ^^^^ meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
-#          ^^ meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
-#            ^^^^^^^^ meta.block.terraform meta.function-call.terraform variable.function.terraform
-#                    ^ meta.block.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform
-#                     ^^^^^^ meta.block.terraform meta.function-call.terraform
-#                           ^ meta.block.terraform meta.function-call.terraform punctuation.section.parens.end.terraform
-      obj = {
-#     ^^^ meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
-#         ^^ meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
-        key = "value"
-#       ^^^ meta.block.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
-#           ^ meta.block.terraform meta.braces.terraform keyword.operator.terraform
-#             ^ meta.block.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
-#              ^^^^^^ meta.block.terraform meta.braces.terraform string.quoted.double.terraform
-#                   ^ meta.block.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
-      }
-#     ^ meta.block.terraform meta.braces.terraform punctuation.section.braces.end.terraform
-      tuple = [1, 2]
-#     ^^^^^ meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform
-#           ^^ meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform
-#             ^ meta.block.terraform punctuation.section.brackets.begin.terraform
-#              ^ meta.block.terraform constant.numeric.integer.terraform
-#               ^ meta.block.terraform punctuation.separator.terraform
-#                 ^ meta.block.terraform constant.numeric.integer.terraform
-#                  ^ meta.block.terraform punctuation.section.brackets.end.terraform
-    }
-#   ^ meta.block.terraform punctuation.section.block.end.terraform
-#    ^ -meta -block
-
-/////////////////////////////////////////////////////////////////////
-// TERRAFORM NAMED VALUES
-/////////////////////////////////////////////////////////////////////
-
-    var.something
-#   ^^^ support.constant.terraform
-#      ^ keyword.operator.accessor.terraform
-#       ^^^^^^^^^ variable.other.member.terraform
-
-    local.something
-#   ^^^^^ support.constant.terraform
-#        ^ keyword.operator.accessor.terraform
-#         ^^^^^^^^^ variable.other.member.terraform
-
-    module.name.output_name
-#   ^^^^^^ support.constant.terraform
-#         ^ keyword.operator.accessor.terraform
-#          ^^^^ variable.other.member.terraform
-#              ^ keyword.operator.accessor.terraform
-#               ^^^^^^^^^^^ variable.other.member.terraform
-
-    data.data_type.name
-#   ^^^^ support.constant.terraform
-#       ^ keyword.operator.accessor.terraform
-#        ^^^^^^^^^ variable.other.member.terraform
-#                 ^ keyword.operator.accessor.terraform
-#                  ^^^^ variable.other.member.terraform
-
-    path.module
-#   ^^^^ support.constant.terraform
-#       ^ keyword.operator.accessor.terraform
-#        ^^^^^^ variable.other.member.terraform
-
-    terraform.workspace
-#   ^^^^^^^^^ support.constant.terraform
-#            ^ keyword.operator.accessor.terraform
-#             ^^^^^^^^^ variable.other.member.terraform
-
-/////////////////////////////////////////////////////////////////////
-// TERRAFORM TOP-LEVEL BLOCK TYPES
-/////////////////////////////////////////////////////////////////////
-
-    resource {}
-#   ^^^^^^^^ meta.type.terraform storage.type.terraform
-#            ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-#             ^ meta.block.terraform punctuation.section.block.end.terraform
-
-    provider {}
-#   ^^^^^^^^ meta.type.terraform storage.type.terraform
-#            ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-#             ^ meta.block.terraform punctuation.section.block.end.terraform
-
-    variable {}
-#   ^^^^^^^^ meta.type.terraform storage.type.terraform
-#            ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-#             ^ meta.block.terraform punctuation.section.block.end.terraform
-
-    output {}
-#   ^^^^^^ meta.type.terraform storage.type.terraform
-#          ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-#           ^ meta.block.terraform punctuation.section.block.end.terraform
-
-    locals {}
-#   ^^^^^^ meta.type.terraform storage.type.terraform
-#          ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-#           ^ meta.block.terraform punctuation.section.block.end.terraform
-
-    module {}
-#   ^^^^^^ meta.type.terraform storage.type.terraform
-#          ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-#           ^ meta.block.terraform punctuation.section.block.end.terraform
-
-    data {}
-#   ^^^^ meta.type.terraform storage.type.terraform
-#        ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-#         ^ meta.block.terraform punctuation.section.block.end.terraform
-
-    terraform {}
-#   ^^^^^^^^^ meta.type.terraform storage.type.terraform
-#             ^ meta.type.terraform meta.block.terraform punctuation.section.block.begin.terraform
-#              ^ meta.block.terraform punctuation.section.block.end.terraform
-
-/////////////////////////////////////////////////////////////////////
-// TERRAFORM TYPE KEYWORDS
-/////////////////////////////////////////////////////////////////////
-
-    string
-#   ^^^^^^ storage.type.terraform
-
-    any
-#   ^^^ storage.type.terraform
-
-    number
-#   ^^^^^^ storage.type.terraform
-
-    bool
-#   ^^^^ storage.type.terraform
-
-/////////////////////////////////////////////////////////////////////
-// HEREDOCS
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Basic example.
-/////
     << EOF
 #   ^^ keyword.operator.heredoc.terraform
 #      ^^^ keyword.control.heredoc.terraform
@@ -3016,62 +174,10 @@
     EOF
 #   ^^^^ keyword.control.heredoc.terraform
 
-/////
-// With leading-spaces-operator.
-/////
-
-    <<- END
-#   ^^^ keyword.operator.heredoc.terraform
-#       ^^^ keyword.control.heredoc.terraform
-    heredoc
-#   ^^^^^^^^ string.unquoted.heredoc.terraform
-    EOF
-#   ^^^^ string.unquoted.heredoc.terraform
-    END
-#   ^^^^ keyword.control.heredoc.terraform
-
-/////
-// Includes string interpolation.
-/////
-
-    <<- END
-#   ^^^ keyword.operator.heredoc.terraform
-#       ^^^ keyword.control.heredoc.terraform
-    Hello, ${var.name}
-#   ^^^^^^^ string.unquoted.heredoc.terraform
-#          ^^ meta.interpolation.terraform keyword.other.interpolation.begin.terraform
-#            ^^^ meta.interpolation.terraform support.constant.terraform
-#               ^ meta.interpolation.terraform keyword.operator.accessor.terraform
-#                ^^^^ meta.interpolation.terraform variable.other.member.terraform
-#                    ^ meta.interpolation.terraform keyword.other.interpolation.end.terraform
-    END
-#   ^^^^ keyword.control.heredoc.terraform
-
-/////////////////////////////////////////////////////////////////////
-// IMPORTS
-/////////////////////////////////////////////////////////////////////
-
-/////
-// Import with attribute access.
-/////
-
     terraform import aws_instance.example i-abcd1234
 #   ^^^^^^^^^ support.constant.terraform
 #             ^^^^^^ keyword.control.import.terraform
 #                    ^^^^^^^^^^^^ entity.name.label.terraform
-#                                ^ keyword.operator.accessor.terraform
+#                                ^ punctuation.accessor.dot.terraform
 #                                 ^^^^^^^ variable.other.member.terraform
 #                                         ^^^^^^^^^^ entity.name.label.terraform
-
-/////
-// Import with numeric literals.
-/////
-
-    terraform import digitalocean_ssh_key.mykey 263654
-#   ^^^^^^^^^ support.constant.terraform
-#             ^^^^^^ keyword.control.import.terraform
-#                    ^^^^^^^^^^^^^^^^^^^^ entity.name.label.terraform
-#                                        ^ keyword.operator.accessor.terraform
-#                                         ^^^^^ variable.other.member.terraform
-#                                               ^^^^^^ constant.numeric.integer.terraform
-