Skip to content

Commit

Permalink
Fix Nested Map Highlighting (#925)
Browse files Browse the repository at this point in the history
* Add a base test case for nested maps

This adds a terraform file containing nested maps and a snapshot
test capturing the broken highlighting

* fix highlighting of nested maps

This commit adds `objects` as an include to `objects`. It allows
deeply nested objects and results in a new `meta.braces.terraform`
scope for each nested level.

* Further improve highlighting of nested maps

This changes the scope for object keys from `string.unquoted.terraform`
to `variable.other.readwrite.terraform`, allowing them to be highlighted
in line with other variables.

With the update of the `keyword.operator` the `=` inside nested maps is
also highlighted in line with variable assignments. This change also
applied to inline for expressions, so we had to extend the pattern
for matching `=>`.

Matching `=>` here is only a quick-fix. When we improve the detection
of inline `for` loops, it can be removed.
  • Loading branch information
dbanck committed Feb 9, 2022
1 parent e2766d4 commit 8ad327c
Show file tree
Hide file tree
Showing 10 changed files with 237 additions and 39 deletions.
15 changes: 12 additions & 3 deletions syntaxes/terraform.tmGrammar.json
Original file line number Diff line number Diff line change
Expand Up @@ -449,14 +449,23 @@
"include": "#comments"
},
{
"match": "\\b((?!null|false|true)[[:alpha:]][[:alnum:]_-]*)\\s*(\\=)\\s*",
"include": "#objects"
},
{
"match": "\\b((?!null|false|true)[[:alpha:]][[:alnum:]_-]*)\\s*(\\=\\>?)\\s*",
"comment": "Literal, named object key",
"captures": {
"1": {
"name": "meta.mapping.key.terraform string.unquoted.terraform"
"name": "meta.mapping.key.terraform variable.other.readwrite.terraform"
},
"2": {
"name": "keyword.operator.terraform"
"name": "keyword.operator.assignment.terraform",
"patterns": [
{
"match": "\\=\\>",
"name": "storage.type.function.terraform"
}
]
}
}
},
Expand Down
8 changes: 4 additions & 4 deletions tests/snapshot/terraform/basic.tf.snap
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,18 @@
# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
> source = "hashicorp/azurerm"
#^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform
# ^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
# ^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform
# ^^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform keyword.operator.terraform
# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform keyword.operator.assignment.terraform
# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
# ^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform string.quoted.double.terraform
# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
> version = "~> 2.65"
#^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform
# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform
# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform keyword.operator.terraform
# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform keyword.operator.assignment.terraform
# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform string.quoted.double.terraform
Expand Down
8 changes: 4 additions & 4 deletions tests/snapshot/terraform/data_sources.tf.snap
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,18 @@
# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.begin.terraform
> Name = "app-server"
#^^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^^^^ source.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
# ^^^^ source.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform
# ^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.assignment.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
# ^^^^^^^^^^ source.terraform meta.block.terraform meta.braces.terraform string.quoted.double.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform
> Tested = "true"
#^^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^^^^^^ source.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
# ^^^^^^ source.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.assignment.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform
# ^^^^ source.terraform meta.block.terraform meta.braces.terraform string.quoted.double.terraform
Expand Down
24 changes: 12 additions & 12 deletions tests/snapshot/terraform/expressions_for.tf.snap
Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,11 @@
# ^^^^^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^^^^ source.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
# ^^^^ source.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.terraform
# ^^^^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.assignment.terraform storage.type.function.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^^^^^ source.terraform meta.block.terraform meta.braces.terraform
> if user.is_admin
#^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform meta.braces.terraform
> }
Expand All @@ -170,11 +170,11 @@
# ^^^^^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^^^^ source.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
# ^^^^ source.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.terraform
# ^^^^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.assignment.terraform storage.type.function.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^^^^^ source.terraform meta.block.terraform meta.braces.terraform
> if !user.is_admin
#^^^^^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.logical.terraform
Expand Down Expand Up @@ -202,11 +202,11 @@
# ^^^^^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^^^^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^^^^ source.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform
# ^^^^ source.terraform meta.block.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.terraform
# ^^^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.assignment.terraform storage.type.function.terraform
# ^ source.terraform meta.block.terraform meta.braces.terraform
# ^^^^ source.terraform meta.block.terraform meta.braces.terraform
# ^^^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.terraform
> }
#^^ source.terraform meta.block.terraform meta.braces.terraform
Expand Down
2 changes: 1 addition & 1 deletion tests/snapshot/terraform/expressions_operators.tf.snap
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,4 @@
>!thing1
#^ source.terraform keyword.operator.logical.terraform
# ^^^^^^^ source.terraform
>
>
27 changes: 27 additions & 0 deletions tests/snapshot/terraform/nested_maps.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
ipam_configuration = {
us-east-1 = {
cidr = ["10.0.0.0/16"]
locale = "us-east-1"

sub_pools = {
dev = {
cidr = ["10.0.0.0/20"]
allocation_default_netmask_length = 28

sub_pools = {
app_team_b = {
cidr = ["10.0.0.0/24"]
description = "app team b's space in us-east-1"
}
app_team_a = {
cidr = ["10.0.1.0/24"]
}
}
}

stage = {
cidr = ["10.0.16.0/20"]
}
}
}
}
Loading

0 comments on commit 8ad327c

Please sign in to comment.