Repository: alexlouden/Terraform.tmLanguage Branch: master Commit: e03a17ec8c2a Files: 39 Total size: 291.9 KB Directory structure: gitextract_5ikcg5fg/ ├── .gitattributes ├── .github/ │ └── workflows/ │ └── syntax.yaml ├── CHANGELOG.md ├── Comments.tmPreferences ├── Fold.tmPreferences ├── HCL.sublime-settings ├── HCL.sublime-syntax ├── Indentation Rules.tmPreferences ├── JSON (Terraform).sublime-syntax ├── LICENSE ├── README.md ├── Symbols - Indexed.tmPreferences ├── Symbols - Local.tmPreferences ├── Terraform Plan.sublime-syntax ├── Terraform-vars.sublime-settings ├── Terraform-vars.sublime-syntax ├── Terraform.sublime-settings ├── Terraform.sublime-syntax ├── messages/ │ └── 2.0.0.md ├── messages.json ├── preview.tf ├── snippets/ │ ├── data.sublime-snippet │ ├── module.sublime-snippet │ ├── module_github.sublime-snippet │ ├── module_github_private.sublime-snippet │ ├── module_path.sublime-snippet │ ├── output.sublime-snippet │ ├── provider.sublime-snippet │ ├── provisioner.sublime-snippet │ ├── resource.sublime-snippet │ ├── variable_empty.sublime-snippet │ ├── variable_map.sublime-snippet │ └── variable_string.sublime-snippet └── tests/ ├── syntax_test_reindent.tf ├── syntax_test_scope.hcl ├── syntax_test_scope.tf ├── syntax_test_scope.tfplan ├── syntax_test_scope.tfvars └── syntax_test_symbol.tf ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ # git .github/ export-ignore .gitattributes export-ignore .gitignore export-ignore # screenshots preview.* export-ignore # development tests/ export-ignore ================================================ FILE: .github/workflows/syntax.yaml ================================================ name: Syntax Tests # https://github.com/SublimeText/syntax-test-action on: push: branches: - master paths: - .github/workflows/syntax.yaml - '**.sublime-syntax' - '**/syntax_test_*' - '**.tmPreferences' pull_request: paths: - .github/workflows/syntax.yaml - '**.sublime-syntax' - '**/syntax_test_*' - '**.tmPreferences' jobs: syntax_tests: name: Syntax Tests (${{ matrix.build }}) runs-on: ubuntu-latest timeout-minutes: 15 strategy: matrix: include: - build: latest # Latest dev build packages: master - build: 4180 # Oldest version we intent to support packages: v4180 steps: - uses: actions/checkout@v3 - uses: SublimeText/syntax-test-action@v2 with: build: ${{ matrix.build }} default_packages: ${{ matrix.packages }} ================================================ FILE: CHANGELOG.md ================================================ # Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## v2.0.1 - 2025-12-07 - Fix indexed symbol scope selector leaking into other languages. (@FichteFoll, #99) - Add support for template literal escape sequence. (@yagizmunger, #97, #98) --- ## v2.0.0 - 2025-05-11 The package has been adopted by the SublimeText GitHub org and now lives at for the community to maintain. This is accompanied by many changes to bring the syntax definition up to current standards. ### Added - Declare hyphens as sub-word separators. (@FichteFoll, #60) - Special highlighting for `for_each` and `count` meta arguments (`keyword.control`). (@FichteFoll, #59) - Highlighting of more special language variables: `each`, `count` and `self`. (@FichteFoll, #58) - Highlighting for `ephemeral` blocks. (@TerminalFi, #70) - A separate syntax definition for `terraform plan` output (@michaelblyons, #51, #68) - Special highlighting for AWS ACL resource references in strings. (@michaelblyons, @deathaxe, #69, #76) - Support JSON-style objects (requires ST 4180). (@michaelblyons, #54, #71) - Scope-based folding rules. (@deathaxe, #81) - Consistent indentation rules. (@deathaxe, #82) - Highlight unclosed strings and stray closing brackets as illegal. (@FichteFoll, #91) ### Changed - Switched to syntax version 2. This breaks compatibility with ST builds before 4000, but the previous version can still be installed on older builds. (@FichteFoll, #62) - Adapted and improved many scope names to standards that have been established over the past years for the default packages: * String interpolation meta scopes and punctuation (@FichteFoll, #58) * Keywords (@FichteFoll, @deathaxe, #58, #78, #86) * Attribute access punctuation (@FichteFoll, #58) * Punctuation scopes in `for` expressions (@FichteFoll, #58) * Blocks, including indexing for "name" labels (@michaelblyons, @FichteFoll, #69, #87) * Operators (@michaelblyons, #66) * Numbers (@deathaxe, #77) * Brackets (@deathaxe, #80) * Function calls (@deathaxe, #83) - Updated the built-in function list for highlighting. (@FichteFoll, #59) - Renamed many contexts and resolved various anonymous contexts for better extensibility. (@deathaxe, #75, #79) ### Removed - Removed various files targeting older ST versions, notably the old `.tmLanguage` syntax definition. This breaks compatibility with ST 2, but the previous version can still be installed on older builds. (@FichteFoll, #63) ### Fixed - Improved matching of identifiers by adding a scope and properly recognizing hyphens. (@FichteFoll, #60) - Support identifiers starting with an underscore character (@FichteFoll, #43, #64). --- ## v1.3.1 - 2024-02-03 ### Added - `.nomad` files are also recognized by the Terraform syntax. (@Quenty, #55) ## v1.3.0 - 2024-01-18 ### Changed - Separate HCL syntax into its own file and report it as `source.hcl` (rather than `source.terraform`). (@rchl, #56) - Update links to official docs on terraform.io. (@totoroot, #53) ## v1.2.0 - 2021-06-21 ### Changed - Split the tfvars handling into a separate syntax file. (@rchl, #49)
This improves interoperability with terraform-ls, e.g. via LSP. ## v1.1.0 - 2021-05-17 ### Fixed - Removed quotes around variable types in snippets. (@notnmeyer, #42) ## v1.0.0 - 2020-01-20 A huge thanks to @patrickrgaffney for this amazing contribution. (#39) ### Added - [Syntax tests][tests] have been added. - `null` constant. - [Exponents][exponents] in numeric literals. - [Character escapes][strings] for newline, carriage return, backslash, quote, and unicode points inside string literals. - [Trim-left and trim-right operators][string-templates] inside string templates. - [Directives][string-templates] inside string templates. - Match all valid expressions inside string templates. - Comparison operators `==`, `!=`, `<`, `>`, `<=`, `>=`. - Arithmetic operators `+`, `-`, `*`, `/`, `%`. - Logic operators `&&`, `||`, `!`. - Conditional operator `p ? e1 : e2` - Parenthesis matching. - Tuple list syntax. - Square-bracket [index notation][indices]. - [Full-splat][splat] operator. - Comma matching inside function calls, tuples, maps, and for-expressions. - Attribute-access is matched on named members and the `.` dot operator. - [Attribute-only splat][splat] operator. - Allow `-` after first alpha character in identifiers. - Computed attribute named using parenthesis. - Allow function-calls outside of string interpolation. - Match all valid expressions inside function-call parameter lists. - Match functions unknown to Terraform (for other HCL uses). - Match [for-expressions][for-exp] inside tuples and maps. - Map collection syntax. - Match unknown block names. - Support for variable number of block labels. - Nested blocks. - Inline blocks. - Terraform [named values][named-values]. - Update list of built-in Terraform functions. - Built-in block types `locals` and `terraform`. - Meta-scope `meta.block.terraform` added to all block bodies. - [Primitive type constants][types]. - Heredocs with the leading-spaces operator `<<-`. - String interpolation inside heredocs. - [Import][import] statements. - JSON highlighting for `*.tfstate` files. ### Changed - Rename scope `comment.line.number-sign.terraform` to `comment.line.terraform` to better reflect [scope naming standards][scopes]. - Rename scope `constant.numeric.terraform` to `constant.numeric.[integer|float].terraform` to better reflect [scope naming standards][scopes]. - Rename scope `entity.tag.embedded.[begin|end]` to `punctuation.section.interpolation.[begin|end]` to better reflect [scope naming standards][scopes]. - Rename scope `variable.other.assignment.terraform` to `variable.other.readwrite.terraform` to better reflect [scope naming standards][scopes]. - A `meta_scope` of `variable.declaration.terraform` covers the entire attribute definition now. - Rename scope for `=` in assignments from `keyword.operator` to `keyword.operator.assignment` to better reflect [scope naming standards][scopes]. - Rename scope `keyword.other.function.inline` to `support.function.builtin` to better reflect [scope naming standards][scopes]. - Rename scope for known block types from `storage.type.function.terraform` to `storage.type.terraform` to better reflect [scope naming standards][scopes]. - Rename scope for block labels from `string.value.terraform` to `string.quoted.double.terraform` to better reflect [scope naming standards][scopes]. - Rename meta-scope for block definitions from `meta.block.terraform` to `meta.type.terraform` to better reflect [scope naming standards][scopes]. ### Removed - Invalid constants `yes`, `no`, `on`, and `off`. - [Unit of measurement suffixes][uom-suffixes]. - [Hexadecimal literals][hex-literals]. - An extra `string.terraform` scope was previously added to all string literals. - [`atlas` blocks][atlas]. ### Fixed - Remove the `string.*` scope inside string templates. ## v0.19.0 - 2019-08-20 ### Added - Symbol indexing for top-level blocks. (@patrickrgaffney - #38) ## v0.18.0 - 2019-07-01 ### Added - Update list of built-in functions. (@Tenzer - #37) ### Fixed - Allow hyphens in names of attributes inside string interpolation. (@Tenzer - #37) ## v0.17.0 - 2019-01-25 ### Added - [Sublime syntax][subl-format] format. (@thiagoalmeidasa - #35) ### Fixed - Better support for parenthesis inside string interpolation. (@NightsPaladin - #33) ## v0.16.0 - 2018-08-08 ### Added - Snippet for `data` blocks. (@mschurenko - #32) ## v0.15.0 - 2018-02-22 ### Added - Terraform constant `local`. (@digitalfiz - #30) ## v0.14.0 - 2017-08-31 ### Added - Update list of built-in functions. (@gburiola - #27) ### Removed - Built-in function `from`. ## v0.13.1 - 2017-08-10 ### Fixed - Allow nested function calls. ## v0.13.0 - 2017-06-07 ### Changed - Set default tab size to 2. (@kushmansingh - #25) - Set default indentation to spaces. (@kushmansingh - #25) ## v0.12.2 - 2017-05-08 ### Fixed - Allow whitespace before `<<` when closing heredocs. (@GreatFruitOmsk - #24) ## v0.12.1 - 2017-03-31 ### Fixed - Escape hyphens in block labels ## v0.12.0 - 2017-03-30 ### Added - Code folding markers. - Built-in Terraform functions. ### Fixed - Function calls and attribute access inside string templates. ## v0.11.0 - 2017-03-08 ### Added - Heredocs. ## v0.10.0 - 2017-02-14 ### Added - `.hcl` file extensions (@akarnani - #19) ## v0.9.0 - 2017-02-12 ### Fixed - Handle nested string interpolation. ## v0.8.0 - 2017-02-08 ### Added - String interpolation. - Unquoted block labels. ### Fixed - De-emphasize variable assignment. ## v0.7.0 - 2017-01-10 ### Added - C-style single line comments `//`. (@kerma - #16) ## v0.6.0 - 2016-09-08 ### Added - Support for `data` blocks. (@Jonnymcc - #14) ## v0.5.0 - 2016-07-05 ### Added - Snippet for `provisioner` blocks. (@ApsOps - #13) ## v0.4.0 - 2016-06-08 ### Added - Match opening/closing brackets. (@alexlouden - #12) ## v0.3.0 - 2016-06-08 ### Added - Snippets for `module` blocks. (@maplebed - #10) ## v0.2.0 - 2016-03-01 ### Added - Blocks comments `/* ... */`. (@bigkraig - #8) ## v0.1.0 - 2015-08-04 Initial release. [atlas]: https://www.terraform.io/docs/configuration/terraform-enterprise.html [exponents]: https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#numeric-literals [hex-literals]: https://github.com/hashicorp/terraform/issues/20933#issuecomment-480050478 [for-exp]: https://www.terraform.io/docs/configuration/expressions.html#for-expressions [import]: https://www.terraform.io/docs/import/usage.html [indices]: https://www.terraform.io/docs/configuration/expressions.html#indices-and-attributes [named-values]: https://www.terraform.io/docs/configuration/expressions.html#references-to-named-values [old-splat]: https://www.terraform.io/docs/configuration/expressions.html#legacy-attribute-only-splat-expressions [scopes]: https://www.sublimetext.com/docs/scope_naming.html [splat]: https://www.terraform.io/docs/configuration/expressions.html#splat-expressions [string-templates]: https://www.terraform.io/docs/configuration/expressions.html#string-literals [strings]: https://www.terraform.io/docs/configuration/expressions.html#string-literals [subl-format]: https://www.sublimetext.com/docs/syntax.html [tests]: https://www.sublimetext.com/docs/syntax.html#testing [types]: https://www.terraform.io/docs/configuration/types.html [uom-suffixes]: https://github.com/hashicorp/terraform/issues/3287#issuecomment-241560576 ================================================ FILE: Comments.tmPreferences ================================================ name Comments scope source.terraform, source.terraform-vars, source.hcl settings shellVariables name TM_COMMENT_START value # name TM_COMMENT_START_2 value /* name TM_COMMENT_END_2 value */ name TM_COMMENT_START_3 value // ================================================ FILE: Fold.tmPreferences ================================================ scope source.hcl, source.terraform, source.terraform-vars settings indentationFoldingEnabled foldScopes begin punctuation.section.baces.begin end punctuation.section.baces.end excludeTrailingNewlines begin punctuation.section.brackets.begin end punctuation.section.brackets.end excludeTrailingNewlines begin punctuation.section.parens.begin end punctuation.section.parens.end excludeTrailingNewlines begin punctuation.section.block.begin end punctuation.section.block.end excludeTrailingNewlines begin punctuation.section.mapping.begin end punctuation.section.mapping.end excludeTrailingNewlines begin punctuation.section.sequence.begin end punctuation.section.sequence.end excludeTrailingNewlines ================================================ FILE: HCL.sublime-settings ================================================ { "tab_size": 2, "translate_tabs_to_spaces": true, // Move '-' to sub-word separators "word_separators": "./\\()\"':,.;<>~!@#$%^&*|+=[]{}`~?", "sub_word_separators": "_-", } ================================================ FILE: HCL.sublime-syntax ================================================ %YAML 1.2 # # This syntax definition is based on the Terraform guide: # https://www.terraform.io/docs/configuration/index.html # # As well as the HCL Native Syntax Spec: # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md # # For documentation on the .subline-syntax format: # https://www.sublimetext.com/docs/syntax.html # # Regex's in this file support the Oniguruma regex engine: # https://raw.githubusercontent.com/kkos/oniguruma/5.9.6/doc/RE # --- name: HCL scope: source.hcl version: 2 extends: Terraform.sublime-syntax # File Extensions: # # - ".hcl": non-terraform tools often use this HCL syntax, i.e. Vault # https://www.vaultproject.io/docs/configuration/ file_extensions: - hcl ================================================ FILE: Indentation Rules.tmPreferences ================================================ scope source.hcl, source.terraform, source.terraform-vars settings decreaseIndentPattern ^\s*[])}] increaseIndentPattern indentParens indentSquareBrackets ================================================ FILE: JSON (Terraform).sublime-syntax ================================================ %YAML 1.2 --- # http://www.sublimetext.com/docs/syntax.html name: JSON (Terraform) scope: source.json.terraform version: 2 extends: Packages/JSON/JSON.sublime-syntax file_extensions: - tfstate contexts: double-quoted-string-body: - meta_prepend: true - include: Packages/Terraform/Terraform.sublime-syntax#string-interpolation - include: Packages/Terraform/Terraform.sublime-syntax#aws-acl strings: - meta_prepend: true - include: Packages/Terraform/Terraform.sublime-syntax#ip-address-strings line-comments: - meta_append: true - include: Packages/Terraform/Terraform.sublime-syntax#inline-comments ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2016 Alex Louden Copyright (c) 2024 FichteFoll Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # Terraform [Terraform][.tf] configuration file syntax definitions and snippets for [Sublime Text][]. ![preview](preview.png) ## Installation ### Using Package Control 1. Install [Package Control][], if needed. 2. Open the palette by pressing: - Windows, Linux: Ctrl+Shift+P - MacOS: Cmd+Shift+P 3. Select _Package Control: Install Package_. 4. Select _Terraform_. ### Manually 1. Open the Sublime Text Packages folder: - MacOS: `~/Library/Application Support/Sublime Text/Packages/` - Windows: `%APPDATA%/Sublime Text/Packages/` - Linux (Ubuntu/Debian): `~/.config/sublime-text/Packages/` 2. Clone this repo. [sublime text]: https://sublimetext.com/ [.tf]: https://developer.hashicorp.com/terraform/language/syntax/configuration [package control]: https://packagecontrol.io/installation ================================================ FILE: Symbols - Indexed.tmPreferences ================================================ name Local Symbol List scope entity.name.label.terraform settings showInIndexedSymbolList 1 ================================================ FILE: Symbols - Local.tmPreferences ================================================ name Local Symbol List scope meta.block.head.terraform settings showInSymbolList 1 symbolTransformation ================================================ FILE: Terraform Plan.sublime-syntax ================================================ %YAML 1.2 --- # http://www.sublimetext.com/docs/syntax.html # https://github.com/hashicorp/terraform/blob/337bf8e11b75dff87509455cabee60b023dd586e/internal/command/jsonformat/plan.go#L201 name: Terraform Plan scope: source.diff.terraform version: 2 file_extensions: - tfplan - tf.plan contexts: prototype: - include: comments main: - include: comments - include: diffs - include: summary comments: - match: '#' scope: punctuation.definition.comment.terraform push: - meta_scope: comment.line.number-sign.terraform - include: pop-eol annotations: - meta_include_prototype: false - match: -> scope: keyword.operator.assignment.terraform - match: \(known after apply\) scope: comment.block.terraform - match: \bnull\b scope: constant.language.null.terraform diffs: - match: ^\+/- scope: punctuation.definition.changed.diff push: line-created-then-destroyed - match: ^-/\+ scope: punctuation.definition.changed.diff push: line-destroyed-then-created - match: ^! scope: punctuation.definition.changed.diff push: line-changed - match: ^\+ scope: punctuation.definition.inserted.diff push: line-inserted - match: ^- scope: punctuation.definition.deleted.diff push: line-deleted - match: \[$\n? push: bracket-body - match: \{$\n? push: brace-body line-deleted: - meta_scope: markup.deleted.diff - include: line-deleted.hanging-eol-brackets - include: pop-eol - include: annotations line-inserted: - meta_scope: markup.inserted.diff - include: line-inserted.hanging-eol-brackets - include: pop-eol - include: annotations line-changed: - meta_scope: markup.changed.updated-in-place.diff - include: line-changed.hanging-eol-brackets - include: pop-eol - include: annotations line-created-then-destroyed: - meta_scope: markup.changed.created-then-destroyed.diff - include: line-changed.hanging-eol-brackets - include: pop-eol - include: annotations line-destroyed-then-created: - meta_scope: markup.changed.destroyed-then-created.diff - include: line-changed.hanging-eol-brackets - include: pop-eol - include: annotations line-ignored: - meta_scope: comment.line.diff - include: pop-eol - include: annotations bracket-body: - match: ^(?=\s*\]) pop: 1 - include: diffs brace-body: - match: ^\s*\} pop: 1 - include: diffs line-deleted.hanging-eol-brackets: - match: \[$\n? set: line-deleted.bracket-body - match: \{$\n? set: line-deleted.brace-body line-deleted.bracket-body: - match: ^(?=\s*\]) set: line-deleted - include: diffs line-deleted.brace-body: - match: ^\s*\} scope: markup.deleted.diff pop: 1 - include: diffs line-inserted.hanging-eol-brackets: - match: \[$\n? set: line-inserted.bracket-body - match: \{$\n? set: line-inserted.brace-body line-inserted.bracket-body: - match: ^(?=\s*\]) set: line-inserted - include: diffs line-inserted.brace-body: - match: ^(?=\s*\}) set: line-inserted - include: diffs line-changed.hanging-eol-brackets: - match: \[$\n? set: line-changed.bracket-body - match: \{$\n? set: line-changed.brace-body line-changed.bracket-body: - match: ^\s*\] scope: markup.changed.diff pop: 1 - include: diffs line-changed.brace-body: - match: ^\s*\} scope: markup.changed.diff pop: 1 - include: diffs summary: - match: ^(?=Plan:[ ]\d) push: - meta_scope: meta.block.summary.terraform - include: pop-eol - match: ',' scope: punctuation.separator.sequence.terraform - match: \. scope: punctuation.terminator.terraform - match: (\d+) to add scope: markup.inserted.terraform captures: 1: meta.number.integer.decimal.terraform constant.numeric.value.terraform - match: (\d+) to change scope: markup.changed.terraform captures: 1: meta.number.integer.decimal.terraform constant.numeric.value.terraform - match: (\d+) to destroy scope: markup.deleted.terraform captures: 1: meta.number.integer.decimal.terraform constant.numeric.value.terraform pop-eol: - match: \n|$ pop: 1 ================================================ FILE: Terraform-vars.sublime-settings ================================================ { "tab_size": 2, "translate_tabs_to_spaces": true, // Move '-' to sub-word separators "word_separators": "./\\()\"':,.;<>~!@#$%^&*|+=[]{}`~?", "sub_word_separators": "_-", } ================================================ FILE: Terraform-vars.sublime-syntax ================================================ %YAML 1.2 # # This syntax definition is based on the Terraform guide: # https://www.terraform.io/docs/configuration/index.html # # As well as the HCL Native Syntax Spec: # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md # # For documentation on the .subline-syntax format: # https://www.sublimetext.com/docs/syntax.html # # Regex's in this file support the Oniguruma regex engine: # https://raw.githubusercontent.com/kkos/oniguruma/5.9.6/doc/RE # --- name: Terraform (variables) scope: source.terraform-vars version: 2 extends: Terraform.sublime-syntax # File Extensions: # # - ".tfvars": variables definitions file # https://developer.hashicorp.com/terraform/language/values/variables#variable-definition-files # - ".tfbackend": backend configuration file # https://developer.hashicorp.com/terraform/language/backend#file file_extensions: - tfvars - tfbackend ================================================ FILE: Terraform.sublime-settings ================================================ { "tab_size": 2, "translate_tabs_to_spaces": true, // Move '-' to sub-word separators "word_separators": "./\\()\"':,.;<>~!@#$%^&*|+=[]{}`~?", "sub_word_separators": "_-", } ================================================ FILE: Terraform.sublime-syntax ================================================ %YAML 1.2 # # This syntax definition is based on the Terraform guide: # https://www.terraform.io/docs/language/index.html # # As well as the HCL Native Syntax Spec: # https://github.com/hashicorp/hcl/blob/main/hclsyntax/spec.md # (previously https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md) # # For documentation on the .subline-syntax format: # https://www.sublimetext.com/docs/syntax.html # # Regex's in this file support the Oniguruma regex engine: # https://raw.githubusercontent.com/kkos/oniguruma/5.9.6/doc/RE # --- name: Terraform scope: source.terraform version: 2 # File Extensions: # # - ".tf": the standard file extension # https://www.terraform.io/docs/language/index.html file_extensions: - tf - nomad variables: # Identifiers: ID_Start (ID_Continue | '-')*; # # There is an undocumented exception # that an underscore character is also accepted # as an id start character. # # https://github.com/hashicorp/hcl/blob/main/hclsyntax/spec.md#identifiers # http://unicode.org/reports/tr31/#Table_Lexical_Classes_for_Identifiers ID_Start: '[\p{ID_Start}_]' ID_Continue: '[\p{ID_Continue}-]' identifier: (?:{{ID_Start}}{{ID_Continue}}*) # Exponent: "e" or "E" followed by an optional sign # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#numeric-literals exponent: ([Ee][+-]?) # Character Escapes: # # - \n: newline # - \r: carriage return # - \t: tab # - \": quote # - \\: backslash # - \uNNNN: unicode char (NNNN is 4 hex digits) # - \uNNNNNNNN: unicode char (NNNNNNNN us 8 digits) # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#template-expressions char_escapes: \\[nrt"\\]|\\u(\h{8}|\h{4}) # String literals (basically static and single-line strings) # for usage in look-aheads. # # https://github.com/hashicorp/hcl/blob/main/hclsyntax/spec.md#template-expressions string_literal: '"(?:[^"]|{{char_escapes}})*"' # Template literals # # https://github.com/hashicorp/hcl/blob/main/hclsyntax/spec.md#template-literals template_literal: '(?:\$\$|%%)\{' # A block label # # https://github.com/hashicorp/hcl/blob/main/hclsyntax/spec.md#structural-elements label: (?:{{identifier}}|{{string_literal}}) # Terraform Named Values # # https://www.terraform.io/docs/language/expressions/references.html named_values: (?:var|local|module|data|path|terraform|each|count|self) # Block types that are known to Terraform. # # data: https://developer.hashicorp.com/terraform/language/data-sources # ephemeral: https://developer.hashicorp.com/terraform/language/resources/ephemeral # resource: https://developer.hashicorp.com/terraform/language/resources/syntax terraform_typed_and_named_blocks: (?:data|ephemeral|resource) # module: https://developer.hashicorp.com/terraform/language/modules/syntax # output: https://developer.hashicorp.com/terraform/language/values/outputs # provider: https://developer.hashicorp.com/terraform/language/providers/configuration # variable: https://developer.hashicorp.com/terraform/language/values/variables terraform_named_blocks: (?:module|output|provider|variable) # locals: https://developer.hashicorp.com/terraform/language/values/locals # terraform: https://developer.hashicorp.com/terraform/language/terraform#terraform-block-syntax # (Currently unused because they do not have special behavior implemented.) terraform_other_blocks: (?:locals|terraform) # Terraform built-in type keywords # # https://www.terraform.io/docs/language/expressions/type-constraints.html#primitive-types # https://www.terraform.io/docs/language/expressions/type-constraints.html#dynamic-types-the-quot-any-quot-constraint terraform_type_keywords: (?:any|string|number|bool) # Built-In Functions # # https://developer.hashicorp.com/terraform/language/functions builtin_functions: |- (?x: # numbers abs | ceil | floor | log | max | min | parseint | pow | signum # string | chomp | endswith | format | formatlist | indent | join | lower | regex | regexall | replace | split | startswith | strcontains | strrev | substr | templatestring | title | trim | trimprefix | trimsuffix | trimspace | upper # collection | alltrue | anytrue | chunklist | coalesce | coalescelist | compact | concat | contains | distinct | element | flatten | index | keys | length | list | lookup | map | matchkeys | merge | one | range | reverse | setintersection | setproduct | setsubtract | setunion | slice | sort | sum | transpose | values | zipmap # encoding | base64decode | base64encode | base64gzip | csvdecode | jsondecode | jsonencode | textdecodebase64 | textencodebase64 | urlencode | yamldecode | yamlencode # filesystem | abspath | dirname | pathexpand | basename | file | fileexists | fileset | filebase64 | templatefile # date and time | formatdate | plantimestamp | timeadd | timecmp | timestamp # hash and crypto | base64sha256 | base64sha512 | bcrypt | filebase64sha256 | filebase64sha512 | filemd5 | filesha1 | filesha256 | filesha512 | md5 | rsadecrypt | sha1 | sha256 | sha512 | uuid | uuidv5 # ip network | cidrhost | cidrnetmask | cidrsubnet | cidrsubnets # type conversion | can | issensitive | nonsensitive | sensitive | tobool | tolist | tomap | tonumber | toset | tostring | try | type # terraform-specific | provider::terraform::(?:encode_tfvars | decode_tfvars | encode_expr) # deprecated/old | filemd1 ) # IPs and CIDR ## IPv6 pattern stolen lovingly from https://github.com/tijn/hosts.tmLanguage, ## where Michael Lyons adapted them from David M. Szydek https://stackoverflow.com/a/17871737. zero_to_32: (?:3[0-2]|[12][0-9]|[0-9]) zero_to_128: (?:12[0-8]|1[01][0-9]|[1-9][0-9]|[0-9]) zero_to_255: (?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9][0-9])|(?:[1-9][0-9])|[0-9]) zero_to_65535: (?:6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]) ipv4: (?:(?:{{zero_to_255}}\.){3}{{zero_to_255}}) ipv6: |- (?xi: (?:::(?:ffff(?::0{1,4}){0,1}:){0,1}{{ipv4}}) # ::255.255.255.255 ::ffff:255.255.255.255 ::ffff:0:255.255.255.255 (IPv4-mapped IPv6 addresses and IPv4-translated addresses) |(?:(?:[0-9a-f]{1,4}:){1,4}:{{ipv4}}) # 2001:db8:3:4::192.0.2.33 64:ff9b::192.0.2.33 (IPv4-Embedded IPv6 Address) |(?:fe80:(?::[0-9a-f]{1,4}){0,4}%[0-9a-z]{1,}) # fe80::7:8%eth0 fe80::7:8%1 (link-local IPv6 addresses with zone index) |(?:(?:[0-9a-f]{1,4}:){7,7} [0-9a-f]{1,4}) # 1:2:3:4:5:6:7:8 | (?:[0-9a-f]{1,4}: (?::[0-9a-f]{1,4}){1,6}) # 1::3:4:5:6:7:8 1::3:4:5:6:7:8 1::8 |(?:(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,5}) # 1::4:5:6:7:8 1:2::4:5:6:7:8 1:2::8 |(?:(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,4}) # 1::5:6:7:8 1:2:3::5:6:7:8 1:2:3::8 |(?:(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,3}) # 1::6:7:8 1:2:3:4::6:7:8 1:2:3:4::8 |(?:(?:[0-9a-f]{1,4}:){1,5}(?::[0-9a-f]{1,4}){1,2}) # 1::7:8 1:2:3:4:5::7:8 1:2:3:4:5::8 |(?:(?:[0-9a-f]{1,4}:){1,6} :[0-9a-f]{1,4}) # 1::8 1:2:3:4:5:6::8 1:2:3:4:5:6::8 |(?:(?:[0-9a-f]{1,4}:){1,7} :) # 1:: 1:2:3:4:5:6:7:: |(?::(?:(?::[0-9a-f]{1,4}){1,7}|:)) # ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 :: ) contexts: main: - include: comments - include: attribute-definition - include: imports - include: blocks - include: expressions comments: - include: inline-comments - include: block-comments # Expressions: # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#expression-terms expressions: - include: literals - include: operators - include: brackets - include: objects - include: attribute-access - include: functions - include: parens - include: identifiers - include: illegal-strays comma: - match: \, comment: Commas - used in certain expressions scope: punctuation.separator.terraform parens: - match: \( scope: punctuation.section.parens.begin.terraform comment: Parens - matched *after* function syntax push: paren-body paren-body: - meta_scope: meta.parens.terraform - match: \) scope: punctuation.section.parens.end.terraform pop: 1 - include: expressions # Literal Values: Numbers, Language Constants, and Strings # # Strings are _technically_ part of the "expression sub-language", # but make the most sense to be part of this stack. # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#literal-values literals: - include: numeric-literals - include: language-constants - include: string-literals - include: heredoc - include: type-keywords - include: named-value-references named-value-references: - match: \b{{named_values}}\b comment: Special variables available only to Terraform. scope: variable.language.terraform type-keywords: - match: \b{{terraform_type_keywords}}\b comment: Type keywords known to Terraform. scope: storage.type.terraform # Inline Comments: begin at the operator, end at the end of the line. # # https://www.terraform.io/docs/language/syntax/configuration.html#comments # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#comments-and-whitespace inline-comments: - match: '#|//' comment: Inline Comments scope: punctuation.definition.comment.terraform push: inline-comment-body inline-comment-body: - meta_scope: comment.line.terraform - match: $\n? scope: punctuation.definition.comment.terraform pop: 1 # Block comments: start and end delimiters for multi-line comments. # # https://www.terraform.io/docs/language/syntax/configuration.html#comments # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#comments-and-whitespace block-comments: - match: /\* comment: Block comments scope: punctuation.definition.comment.terraform push: block-comments-body block-comments-body: - meta_scope: comment.block.terraform - match: \*/ scope: punctuation.definition.comment.terraform pop: 1 # Language Constants: booleans and `null`. # # https://www.terraform.io/docs/language/expressions/types.html#literal-expressions # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#literal-values language-constants: - match: \btrue\b scope: constant.language.boolean.true.terraform - match: \bfalse\b scope: constant.language.boolean.false.terraform - match: \bnull\b scope: constant.language.null.terraform # Numbers: Integers, fractions and exponents # # https://www.terraform.io/docs/language/expressions/types.html # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#numeric-literals numeric-literals: - match: \b\d+{{exponent}}\d+\b comment: Integer, no fraction, optional exponent scope: meta.number.float.decimal.terraform constant.numeric.value.terraform - match: \b\d+(\.)\d+(?:{{exponent}}\d+)?\b comment: Integer, fraction, optional exponent scope: meta.number.float.decimal.terraform constant.numeric.value.terraform captures: 1: punctuation.separator.decimal.terraform - match: \b\d+\b comment: Integers scope: meta.number.integer.decimal.terraform constant.numeric.value.terraform # Strings: # # https://www.terraform.io/docs/language/expressions/types.html # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#template-expressions string-literals: - include: ip-address-strings - match: \" comment: Strings scope: punctuation.definition.string.begin.terraform push: string-body string-body: - meta_scope: meta.string.terraform string.quoted.double.terraform - match: \" scope: punctuation.definition.string.end.terraform pop: 1 - match: \n scope: invalid.illegal.unclosed-string.terraform pop: 1 - include: character-escapes - include: string-interpolation - include: aws-acl character-escapes: - match: '{{char_escapes}}' comment: Character Escapes scope: constant.character.escape.terraform template-literals: - match: '{{template_literal}}' comment: Template Literal scope: constant.character.escape.terraform aws-acl: - match: (?=\barn:aws:) push: aws-acl-body aws-acl-body: - clear_scopes: 1 # Clear the string.* scope. - meta_scope: variable.language.acl.terraform - match: ([$%]\{)(~)? captures: 1: punctuation.section.interpolation.begin.terraform 2: keyword.operator.template.trim.left.terraform push: acl-interpolation-body - match: :|/ scope: punctuation.separator.sequence.terraform - match: \* scope: constant.other.wildcard.asterisk.terraform - match: (?![\w-]) pop: 1 acl-interpolation-body: - meta_scope: meta.interpolation.terraform - meta_content_scope: source.terraform - include: string-interpolation-body ip-address-strings: - match: (")({{ipv6}})(?:(/)({{zero_to_128}}))?(") scope: meta.string.terraform string.quoted.double.terraform captures: 1: punctuation.definition.string.begin.terraform 2: meta.number.integer.other.terraform constant.numeric.ip-address.v6.terraform 3: punctuation.separator.terraform 4: constant.other.range.terraform 5: punctuation.definition.string.end.terraform - match: (")((\[){{ipv6}}(\]))(?:(/)({{zero_to_128}})|(:)({{zero_to_65535}}))?(") scope: meta.string.terraform string.quoted.double.terraform captures: 1: punctuation.definition.string.begin.terraform 2: meta.number.integer.other.terraform constant.numeric.ip-address.v6.terraform 3: punctuation.definition.constant.begin.terraform 4: punctuation.definition.constant.end.terraform 5: punctuation.separator.terraform 6: constant.other.range.terraform 7: punctuation.separator.terraform 8: constant.other.port.terraform 9: punctuation.definition.string.end.terraform - match: (")({{ipv4}})(?:(/)({{zero_to_32}})|(:)({{zero_to_65535}}))?(") scope: meta.string.terraform string.quoted.double.terraform captures: 1: punctuation.definition.string.begin.terraform 2: meta.number.integer.other.terraform constant.numeric.ip-address.v4.terraform 3: punctuation.separator.terraform 4: constant.other.range.terraform 5: punctuation.separator.terraform 6: constant.other.port.terraform 7: punctuation.definition.string.end.terraform # String Interpolation: ("${" | "${~") Expression ("}" | "~}" # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#templates string-interpolation: - include: template-literals - match: ([$%]\{)(~)? captures: 1: punctuation.section.interpolation.begin.terraform 2: keyword.operator.template.trim.left.terraform push: string-interpolation-body string-interpolation-body: - clear_scopes: 1 # Clear the string.* scope. - meta_scope: meta.interpolation.terraform - meta_content_scope: source.terraform - match: (~)?(\}) captures: 1: keyword.operator.template.trim.right.terraform 2: punctuation.section.interpolation.end.terraform pop: 1 - match: \bif\b scope: keyword.control.conditional.if.terraform - match: \belse\b scope: keyword.control.conditional.else.terraform - match: \bendif\b scope: keyword.control.conditional.end.terraform - match: \bfor\b scope: keyword.control.loop.for.terraform - match: \bendfor\b scope: keyword.control.loop.end.terraform - match: \bin\b scope: keyword.control.loop.in.terraform - include: expressions # String Heredocs # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#template-expressions heredoc: - match: (\<\<\-?)\s*({{identifier}})\s*$ comment: String Heredoc's captures: 1: keyword.operator.heredoc.terraform 2: keyword.control.heredoc.terraform push: heredoc-body heredoc-body: - meta_content_scope: meta.string.terraform string.unquoted.heredoc.terraform - match: ^\s*\2\s*$ comment: The heredoc token identifier (second capture above). scope: keyword.control.heredoc.terraform pop: 1 - include: string-interpolation # Operators: # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#operators-and-delimiters # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#operations operators: - match: \>\= # >= scope: keyword.operator.comparison.terraform - match: \<\= # <= scope: keyword.operator.comparison.terraform - match: \=\= # == scope: keyword.operator.comparison.terraform - match: \!\= # != scope: keyword.operator.comparison.terraform - match: \+ # + scope: keyword.operator.arithmetic.terraform - match: \- # - scope: keyword.operator.arithmetic.terraform - match: \* # * scope: keyword.operator.arithmetic.terraform - match: \/ # / scope: keyword.operator.arithmetic.terraform - match: \% # % scope: keyword.operator.arithmetic.terraform - match: \&\& # && scope: keyword.operator.logical.terraform - match: \|\| # || scope: keyword.operator.logical.terraform - match: \! # ! scope: keyword.operator.logical.terraform - match: \> # > scope: keyword.operator.comparison.terraform - match: \< # < scope: keyword.operator.comparison.terraform - match: \? # ? scope: keyword.operator.ternary.terraform - match: \.\.\. # ... scope: keyword.operator.terraform - match: ':' # : scope: keyword.operator.ternary.terraform # Terraform "import" statements # # https://www.terraform.io/docs/cli/import/usage.html imports: - match: \b(terraform)\s+(import)\b comment: Importing resources captures: 1: support.constant.terraform 2: keyword.control.import.terraform push: import-body import-body: - match: \" comment: String literal label scope: punctuation.definition.string.begin.terraform push: literal-label-body - match: '{{identifier}}' comment: Identifier label scope: entity.name.label.terraform - include: numeric-literals - include: attribute-access - match: $\n? comment: Pop at newline pop: 1 literal-label-body: - meta_scope: meta.string.terraform string.quoted.double.terraform - match: \" scope: punctuation.definition.string.end.terraform pop: 1 # Brackets: matches tuples and subscript notation # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#index-operator brackets: - match: \[ scope: punctuation.section.brackets.begin.terraform push: bracket-body bracket-body: - meta_scope: meta.brackets.terraform - match: (\*)?\] comment: Full-splat operator scope: punctuation.section.brackets.end.terraform captures: 1: keyword.operator.splat.terraform pop: 1 - include: comma - include: comments - include: tuple-for-expression - include: expressions # Objects: collection values # # Allows keys as identifiers, strings, and computed values wrapped in parens. # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#collection-values objects: - match: \{ scope: punctuation.section.braces.begin.terraform push: object-body object-body: - meta_scope: meta.braces.terraform - match: \} scope: punctuation.section.braces.end.terraform pop: 1 - include: object-for-expression - include: comments - match: (?=({{identifier}}|\".*?\")\s*=) push: - object-value - assignment-operator - object-literal-key - match: \( comment: Computed object key (any expression between parens) scope: punctuation.section.parens.begin.terraform push: - object-value - assignment-operator - object-computed-key - include: Packages/Terraform/JSON (Terraform).sublime-syntax#object-body object-computed-key: - meta_scope: meta.mapping.key.terraform meta.parens.terraform - include: paren-body object-literal-key: - match: '{{identifier}}' scope: meta.mapping.key.terraform meta.string.terraform string.unquoted.terraform pop: 1 - match: (\").*?(\") scope: meta.mapping.key.terraform meta.string.terraform string.quoted.double.terraform captures: 1: punctuation.definition.string.begin.terraform 2: punctuation.definition.string.end.terraform pop: 1 - include: else-pop assignment-operator: - match: = scope: keyword.operator.assignment.terraform pop: 1 - include: else-pop # Object key values: pop at comma, newline, and closing-bracket # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#collection-values object-value: - include: comments - match: \, comment: Pop scope on comma. scope: punctuation.separator.terraform pop: 1 - match: $\n? comment: Pop scope on EOL. pop: 1 - match: (?=\}) comment: Lookahead (don't consume) and pop scope on a bracket. scope: punctuation.section.braces.end.terraform pop: 1 - include: expressions # Attribute Access: "." Identifier # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#attribute-access-operator attribute-access: - match: \. scope: punctuation.accessor.dot.terraform push: member member: - include: comments - match: '{{identifier}}' comment: Attribute access scope: variable.other.member.terraform pop: 1 - match: \d+ comment: Subscript scope: meta.number.integer.decimal.terraform constant.numeric.value.terraform pop: 1 - match: \* comment: Attribute-only splat scope: keyword.operator.splat.terraform pop: 1 - include: else-pop # Attribute Definition: Identifier "=" Expression Newline # # The "=" operator cannot be immediately followed by "=" # ">", as those are other operators, not attr definitions. # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#attribute-definitions attribute-definition: - match: (?=(\()?({{identifier}})(\))?\s*(\=(?![\=\>]))) push: - assignment-operator - attribute-key attribute-key: - match: \((?={{identifier}}\)) scope: punctuation.section.parens.begin.terraform set: - attribute-key-end - attribute-key # https://developer.hashicorp.com/terraform/language/meta-arguments/for_each - match: for_each\b scope: variable.declaration.terraform keyword.control.loop.for.terraform pop: 1 # https://developer.hashicorp.com/terraform/language/meta-arguments/count - match: count\b scope: variable.declaration.terraform keyword.control.conditional.terraform pop: 1 - match: '{{identifier}}' scope: variable.declaration.terraform variable.other.readwrite.terraform pop: 1 attribute-key-end: - meta_scope: meta.parens.terraform - match: \) scope: punctuation.section.parens.end.terraform pop: 1 # Functions: Terraform builtins and unknown # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#functions-and-function-calls # https://www.terraform.io/docs/language/expressions/function-calls.html functions: - match: (?={{builtin_functions}}\() push: builtin-function-name - match: (?=(?:{{identifier}}::)*{{identifier}}\() push: other-function-name builtin-function-name: - meta_content_scope: meta.function-call.identifier.terraform - include: function-argument-list - include: namespaces - match: '{{identifier}}' scope: support.function.builtin.terraform other-function-name: - meta_content_scope: meta.function-call.identifier.terraform - include: function-argument-list - include: namespaces - match: '{{identifier}}' scope: variable.function.terraform function-argument-list: - match: \( scope: punctuation.section.parens.begin.terraform set: function-argument-list-body function-argument-list-body: - meta_scope: meta.function-call.arguments.terraform meta.parens.terraform - match: \) scope: punctuation.section.parens.end.terraform pop: 1 - include: comments - include: expressions - include: comma # Tuple for-Expression: # # "[" "for" Identifier ("," Identifier)? "in" Expression ":" Expression ("if" Expression)? "]"; # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#for-expressions # https://www.terraform.io/docs/language/expressions/for.html tuple-for-expression: - match: \bfor\b comment: for expression (arrays) scope: keyword.control.loop.for.terraform set: tuple-for-expression-body tuple-for-expression-body: - meta_content_scope: meta.brackets.terraform - match: \] scope: meta.brackets.terraform punctuation.section.brackets.end.terraform pop: 1 - include: for-expression-body # Object for-Expression: # # "{" "for" Identifier ("," Identifier)? "in" Expression ":" Expression "=>" Expression "..."? ("if" Expression)? "}"; # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#for-expressions # https://www.terraform.io/docs/language/expressions/for.html object-for-expression: - match: \bfor\b comment: for expression (arrays) scope: keyword.control.loop.for.terraform set: object-for-expression-body object-for-expression-body: - meta_content_scope: meta.braces.terraform - match: \} scope: meta.braces.terraform punctuation.section.braces.end.terraform pop: 1 - match: \=\> scope: punctuation.separator.key-value.terraform - include: for-expression-body # Shared body syntax for tuple and object for-expressions. # They require different `set` blocks because they are # pop'd with different characters and objects allow `=>`. for-expression-body: - match: \bin\b scope: keyword.operator.iteration.in.terraform - match: \bif\b scope: keyword.control.conditional.terraform - match: '\:' scope: punctuation.section.block.loop.for.terraform - include: expressions - include: comments - include: comma namespaces: - match: ({{identifier}})(::) captures: 1: variable.namespace.terraform 2: punctuation.accessor.double-colon.terraform identifiers: - match: '{{identifier}}' scope: variable.other.readwrite.terraform illegal-strays: - match: '[\])}]' scope: invalid.illegal.stray.terraform # Blocks: Identifier (StringLit|Identifier)* "{" Newline Body "}" Newline; # # https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#structural-elements blocks: - include: typed-and-named-blocks - include: named-blocks - include: generic-blocks typed-and-named-blocks: # Special case for two-label resources, # where the first denotes the type and the second the name. - match: (?=\b{{terraform_typed_and_named_blocks}}(\s+{{label}}){2}\s*\{) push: - body - block-name-label - block-type-label - block-declaration named-blocks: # Special case for two-label resources, # where the first denotes the type and the second the name. - match: (?=\b{{terraform_named_blocks}}\s+{{label}}\s*\{) push: - body - block-name-label - block-declaration generic-blocks: - match: (?=\b({{identifier}})(\s+{{label}})*\s*\{) push: - body - generic-block-labels - block-declaration block-declaration: - match: '{{identifier}}' scope: keyword.declaration.terraform pop: 1 - include: else-pop block-type-label: - match: \" scope: punctuation.definition.string.begin.terraform set: block-type-label-body - match: '{{identifier}}' scope: support.type.terraform pop: 1 - include: else-pop block-type-label-body: - meta_scope: meta.string.terraform - meta_content_scope: support.type.terraform - match: \" scope: punctuation.definition.string.end.terraform pop: 1 - include: character-escapes block-name-label: - match: \" scope: punctuation.definition.string.begin.terraform set: block-name-label-body - match: '{{identifier}}' scope: entity.name.label.terraform pop: 1 - include: else-pop block-name-label-body: - meta_scope: meta.string.terraform - meta_content_scope: entity.name.label.terraform - match: \" scope: punctuation.definition.string.end.terraform pop: 1 - include: character-escapes generic-block-labels: # Labels probably have a meaning, but we don't know which, # so we just scope them as (un-)quoted strings. - match: \" scope: punctuation.definition.string.begin.terraform push: generic-block-label-body - match: '{{identifier}}' scope: string.unquoted.double.terraform - include: else-pop generic-block-label-body: - meta_scope: meta.string.terraform string.quoted.double.terraform - match: \" scope: punctuation.definition.string.end.terraform pop: 1 - include: character-escapes body: - meta_content_scope: meta.block.head.terraform - match: \{ scope: punctuation.section.block.begin.terraform set: body-body - include: else-pop body-body: - meta_scope: meta.block.body.terraform - match: \} scope: punctuation.section.block.end.terraform pop: 1 - include: main else-pop: - match: (?=\S) pop: 1 ================================================ FILE: messages/2.0.0.md ================================================ v2.0.0 - 2025-05-11 ------------------- The package has been adopted by the SublimeText GitHub org and now lives at for the community to maintain. This is accompanied by many changes to bring the syntax definition up to current standards, courtesy of @deathaxe, @FichteFoll, and @michaelblyons. In summary, the syntax has been aligned with current standards as they have developed over time for the default syntaxes and various other third-party syntaxes. For a detailed list of changes, please refer to the full changelog at . Note that this release is only compatible with ST builds 4180 and higher. The old version is still available for installation on older builds but is not maintained anymore. ================================================ FILE: messages.json ================================================ { "2.0.0": "messages/2.0.0.md" } ================================================ FILE: preview.tf ================================================ #---------------------------------------------------------------------- # Project API #---------------------------------------------------------------------- resource "aws_instance" "api" { count = "${var.api_count}" connection { user = "ubuntu", key_file = "${var.key_path}" } provider "remote-exec" { inline = [ # Run inline commands ] } } /* * This is the API public DNS address */ output "api-public" { value = "${aws_instance.api.public_dns}" } variable "name" { type = string description = "describe your variable" } ================================================ FILE: snippets/data.sublime-snippet ================================================ data source.terraform data block ================================================ FILE: snippets/module.sublime-snippet ================================================ module source.terraform module block ================================================ FILE: snippets/module_github.sublime-snippet ================================================ moduleG source.terraform module (github public) ================================================ FILE: snippets/module_github_private.sublime-snippet ================================================ moduleGS source.terraform module (github ssh) ================================================ FILE: snippets/module_path.sublime-snippet ================================================ moduleP source.terraform module (path) ================================================ FILE: snippets/output.sublime-snippet ================================================ output source.terraform output block ================================================ FILE: snippets/provider.sublime-snippet ================================================ provider source.terraform provider block ================================================ FILE: snippets/provisioner.sublime-snippet ================================================ provisioner source.terraform provisioner block ================================================ FILE: snippets/resource.sublime-snippet ================================================ resource source.terraform resource block ================================================ FILE: snippets/variable_empty.sublime-snippet ================================================ variableE source.terraform variable (empty) ================================================ FILE: snippets/variable_map.sublime-snippet ================================================ variableM source.terraform variable (map) ================================================ FILE: snippets/variable_string.sublime-snippet ================================================ variableS source.terraform variable (string) ================================================ FILE: tests/syntax_test_reindent.tf ================================================ # SYNTAX TEST reindent-unchanged "Terraform.sublime-syntax" provider "name" { attr1 = { key1 = { key11 = { key111 = 0 key112 = [ "0", "1" ] }, key12 = [ 0, 1, ], key13 = ( var.member + var.other ) } } attr2 = jsondecode( { "key1": { "key11": [ 0, 1 ], "key12": { "key121": "value", "key122": 0 } } } ) } ================================================ FILE: tests/syntax_test_scope.hcl ================================================ # SYNTAX TEST "HCL.sublime-syntax" # Same as normal Terraform syntax, hence nothing special to test here. # <- source.hcl ================================================ FILE: tests/syntax_test_scope.tf ================================================ # SYNTAX TEST "Terraform.sublime-syntax" ///////////////////////////////////////////////////////////////////// // INLINE COMMENTS ///////////////////////////////////////////////////////////////////// ///// // Start of line inline comments with `#`. ///// # inline comment # ^ source.terraform comment.line.terraform ///// // Start of line inline comments with `//`. ///// // foo # ^ source.terraform comment.line.terraform ///// // Matches at random place in line + punctuation for `#`. ///// # bar # ^ - comment - punctuation # ^ punctuation.definition.comment.terraform # ^^^^^ comment.line.terraform ///// // Matches at random place in line + punctuation for `//`. ///// // baz # blah # ^ - comment - punctuation # ^^ punctuation.definition.comment.terraform # ^^^^^^^^^^^^^ comment.line.terraform ///////////////////////////////////////////////////////////////////// // BLOCK COMMENTS ///////////////////////////////////////////////////////////////////// ///// // Matches for a single line. ///// /* foo */ # ^ - comment - punctuation # ^^ punctuation.definition.comment.terraform # ^^^^^^^^ comment.block.terraform # ^^ punctuation.definition.comment.terraform ///// // Matches over multiple lines. ///// /* # ^ - comment - punctuation # ^^ punctuation.definition.comment.terraform # ^^^^ comment.block.terraform foo # ^^^^ comment.block.terraform */ # ^^^^ comment.block.terraform # ^^ punctuation.definition.comment.terraform ///// // Matches inline comments after block ends. ///// /* comment */ // inline # ^ - comment - punctuation # ^^ punctuation.definition.comment.terraform # ^^^^^^^^^^^^ comment.block.terraform # ^^ punctuation.definition.comment.terraform # ^^^ - comment - punctuation # ^^ punctuation.definition.comment.terraform # ^^^^^^^^ comment.line.terraform ///////////////////////////////////////////////////////////////////// // LANGUAGE CONSTANTS ///////////////////////////////////////////////////////////////////// ///// // Matches `true`. ///// true # ^ - constant # ^^^^ constant.language.boolean.true.terraform # ^ - constant ///// // Matches `false`. ///// false # ^ - constant # ^^^^^ constant.language.boolean.false.terraform # ^ - constant ///// // Matches `null`. ///// null # ^ - constant # ^^^^ constant.language.null.terraform # ^ - constant ///////////////////////////////////////////////////////////////////// // INTEGER CONSTANTS ///////////////////////////////////////////////////////////////////// ///// // Matches integers. ///// 444 # ^ - meta.number - constant # ^^^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ - meta.number - constant ///// // Matches zero. ///// 0 # ^ - meta.number - constant # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ - meta.number - constant ///// // Matches one. ///// 1 # ^ - meta.number - constant # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ - meta.number - constant ///// // Matches large integers. ///// 26345645634561 # ^ - meta.number - constant # ^^^^^^^^^^^^^^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ - meta.number - constant ///// // Ignores integers inside identifiers. ///// aws_route53_zone.main.zone_id # ^^^^^^^^^^^^^^^^ - numeric - constant # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^ variable.other.member.terraform ///////////////////////////////////////////////////////////////////// // FLOATING-POINT CONSTANTS ///////////////////////////////////////////////////////////////////// ///// // Matches floating-point numbers. ///// 1.2 # ^ - meta.number - constant # ^^^ meta.number.float.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.decimal.terraform # ^ - meta.number - constant ///// // Matches large floating-point numbers. ///// 61.28888888888 # ^ - meta.number - constant # ^^^^^^^^^^^^^^ meta.number.float.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.decimal.terraform # ^ - meta.number - constant ///// // Matches integers with exponents. ///// 1e12 # ^ - meta.number - constant # ^^^^ meta.number.float.decimal.terraform constant.numeric.value.terraform # ^ - meta.number - constant ///// // Matches floats with exponents. ///// 1.4E12 # ^ - meta.number - constant # ^^^^^^ meta.number.float.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.decimal.terraform # ^ - meta.number - constant ///// // Matches floats with postive signed exponents. ///// 1.4e+12 # ^ - meta.number - constant # ^^^^^^^ meta.number.float.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.decimal.terraform # ^ - meta.number - constant ///// // Matches floats with negative signed exponents. ///// 1.4E-12 # ^ - meta.number - constant # ^^^^^^^ meta.number.float.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.decimal.terraform # ^ - meta.number - constant ///////////////////////////////////////////////////////////////////// // STRINGS ///////////////////////////////////////////////////////////////////// ///// // Matches punctuation and assigns meta_scope. ///// "a string" # ^ - punctuation - string # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^ string.quoted.double.terraform # ^ punctuation.definition.string.end.terraform # ^ - punctuation - string ///// // Matches character escapes. ///// "a \n b \r c \t d \" e \udead f \udeadbeef" # ^ - punctuation - string # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.terraform # ^^ constant.character.escape.terraform # ^^ constant.character.escape.terraform # ^^ constant.character.escape.terraform # ^^ constant.character.escape.terraform # ^^^^^ constant.character.escape.terraform # ^^^^^^^^^^ constant.character.escape.terraform # ^ punctuation.definition.string.end.terraform ///// // Matches IPs and CIDR ///// "1.2.3.4" # ^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^ meta.number.integer.other.terraform constant.numeric.ip-address.v4.terraform # ^ punctuation.definition.string.end.terraform "1.2.3.4/32" # ^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^ meta.number.integer.other.terraform constant.numeric.ip-address.v4.terraform # ^ punctuation.separator.terraform # ^^ constant.other.range.terraform # ^ punctuation.definition.string.end.terraform "1.2.3.4:8080" # ^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^ meta.number.integer.other.terraform constant.numeric.ip-address.v4.terraform # ^ punctuation.separator.terraform # ^^^^ constant.other.port.terraform # ^ punctuation.definition.string.end.terraform "1.2.3.4/33" # ^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^ - constant - punctuation # ^ punctuation.definition.string.end.terraform "256.2.3.4" # ^^^^^^^^^^^ - constant "::1" # ^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^ meta.number.integer.other.terraform constant.numeric.ip-address.v6.terraform # ^ punctuation.definition.string.end.terraform "deed" # ^^^^^^ meta.string.terraform string.quoted.double.terraform - constant # ^ punctuation.definition.string.begin.terraform # ^ punctuation.definition.string.end.terraform "deed:10:10" # ^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform - constant # ^ punctuation.definition.string.begin.terraform # ^ punctuation.definition.string.end.terraform "1:2:3:4:5:6:7:8" # ^^^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^ meta.number.integer.other.terraform constant.numeric.ip-address.v6.terraform # ^ punctuation.definition.string.end.terraform "1:2:3:4:5:6:7:8:8080" # ^^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^ - constant - punctuation # ^ punctuation.definition.string.end.terraform "1:2:3:4:5:6:7:8/128" # ^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^ meta.number.integer.other.terraform constant.numeric.ip-address.v6.terraform # ^ punctuation.separator.terraform # ^^^ constant.other.range.terraform # ^ punctuation.definition.string.end.terraform "1:2:3:4:5:6:7:8/129" # ^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^ - constant - punctuation # ^ punctuation.definition.string.end.terraform "[1:2:3:4:5:6:7:8]/128" # ^^^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^ meta.number.integer.other.terraform constant.numeric.ip-address.v6.terraform # ^ punctuation.definition.constant.begin.terraform # ^ punctuation.definition.constant.end.terraform # ^ punctuation.separator.terraform # ^^^ constant.other.range.terraform # ^ punctuation.definition.string.end.terraform "[1:2:3:4:5:6:7:8]:8080" # ^^^^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^ meta.number.integer.other.terraform constant.numeric.ip-address.v6.terraform # ^ punctuation.definition.constant.begin.terraform # ^ punctuation.definition.constant.end.terraform # ^ punctuation.separator.terraform # ^^^^ constant.other.port.terraform # ^ punctuation.definition.string.end.terraform "[1:2:3:4:5:6:7:8]/129" # ^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^ - constant - punctuation ///// // Unclosed strings ///// " # ^ meta.string.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^ invalid.illegal.unclosed-string.terraform ///////////////////////////////////////////////////////////////////// // Identifiers ///////////////////////////////////////////////////////////////////// this_is_an_identifier # ^^^^^^^^^^^^^^^^^^^^^ variable.other.readwrite.terraform identifier.member_access # ^^^^^^^^^^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^^^^ variable.other.member.terraform identifier-with-hyphens # ^^^^^^^^^^^^^^^^^^^^^^^ variable.other.readwrite.terraform __EOF__ # ^^^^^^^ variable.other.readwrite.terraform identifier. // comment # <- comment ///////////////////////////////////////////////////////////////////// // STRING INTERPOLATION ///////////////////////////////////////////////////////////////////// ///// // Correct scopes during interpolation. ///// "some ${interpolation} string" # ^ - punctuation - string # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform # ^^^^^ string.quoted.double.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^^^^^^^^^^^ meta.interpolation.terraform # ^^^^^^^^^^^^ source.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^^^^^^^ string.quoted.double.terraform # ^ punctuation.definition.string.end.terraform # ^ - punctuation - string ///// // Matches left-trim and right-trim. ///// "%{~ fff ~}" # ^^^^^^^^^^^^ meta.string.terraform # ^^^^^^^^^^ meta.interpolation.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^ meta.interpolation.terraform keyword.operator.template.trim.left.terraform # ^^^^^ source.terraform # ^ keyword.operator.template.trim.right.terraform # ^ punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform ///// // Matches operators ///// "${ something ? true : false }" # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ punctuation.section.interpolation.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.terraform # ^ keyword.operator.ternary.terraform # ^^^^ meta.interpolation.terraform constant.language.boolean.true.terraform # ^ meta.interpolation.terraform keyword.operator.ternary.terraform # ^^^^^ meta.interpolation.terraform constant.language.boolean.false.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform ///// // Dot-access attributes in string interpolation ///// "hello ${aws_instance.ubuntu}" # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^ string.quoted.double.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform # ^ meta.interpolation.terraform punctuation.accessor.dot.terraform # ^^^^^^ meta.interpolation.terraform variable.other.member.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform ///// // Handles function calls ///// "${formatdate("DD MMM YYYY hh:mm ZZZ", "2018-01-02T23:12:01Z")}" # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^^^^^^^ meta.interpolation.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform ///// // Handles nested function calls. ///// id = "db-final-snapshot-${md5(timestamp())}" # ^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^ string.quoted.double.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^ meta.interpolation.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^^^^^^^ meta.interpolation.terraform meta.function-call.arguments.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform ///// // Includes objects. //// "something ${{test = 3}}" # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^ string.quoted.double.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^ meta.interpolation.terraform meta.braces.terraform punctuation.section.braces.begin.terraform # ^^^^ meta.interpolation.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.interpolation.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.interpolation.terraform source.terraform meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.interpolation.terraform meta.braces.terraform punctuation.section.braces.end.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform ///// // Includes tuples. //// "something ${[1, 2, 3]}" # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^ string.quoted.double.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^ meta.interpolation.terraform punctuation.section.brackets.begin.terraform # ^ meta.interpolation.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.interpolation.terraform punctuation.separator.terraform # ^ meta.interpolation.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.interpolation.terraform punctuation.separator.terraform # ^ meta.interpolation.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.interpolation.terraform punctuation.section.brackets.end.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform ///// // Includes named values. ///// "${var.something}" # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^ meta.interpolation.terraform variable.language.terraform # ^ meta.interpolation.terraform punctuation.accessor.dot.terraform # ^^^^^^^^^ meta.interpolation.terraform variable.other.member.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform ///// // Handles regexes (various punctuation). ///// records = ["${replace("hostname.domain.com:1234", "/(.*):[0-9]{0,26}/", "$1")}"] # ^^^^^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform # ^ punctuation.section.brackets.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^^^^ meta.interpolation.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ punctuation.section.brackets.end.terraform # ^ - meta - string - variable - punctuation ///// // Handles nested interpolation. ///// "${file("${path.module}/text_files/ecs_app")}" # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^ meta.interpolation.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.interpolation.terraform meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^ meta.interpolation.terraform meta.function-call.arguments.terraform meta.interpolation.terraform variable.language.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform # ^^^^^^ meta.interpolation.terraform meta.function-call.arguments.terraform meta.interpolation.terraform variable.other.member.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ meta.interpolation.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform ///////////////////////////////////////////////////////////////////// // Template If Directives ///////////////////////////////////////////////////////////////////// ///// // Matches if/endif directives. ///// "${ if name == "Mary" }${name}${ endif ~}" # ^ - string - punctuation # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform # ^^ meta.interpolation.terraform keyword.control.conditional.if.terraform # ^^ meta.interpolation.terraform keyword.operator.comparison.terraform # ^ source.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^ source.terraform meta.interpolation.terraform string.quoted.double.terraform # ^ source.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ punctuation.section.interpolation.end.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^ punctuation.section.interpolation.end.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^^ meta.interpolation.terraform keyword.control.conditional.end.terraform # ^ meta.interpolation.terraform keyword.operator.template.trim.right.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ - string - punctuation ///// // Matches if/else/endif directives. ///// "%{ if name == "Mary" }${name}%{ else }${ "Mary" }%{ endif ~}" # ^ - string - punctuation # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform # ^^ meta.interpolation.terraform keyword.control.conditional.if.terraform # ^^ meta.interpolation.terraform keyword.operator.comparison.terraform # ^ source.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^ source.terraform meta.interpolation.terraform string.quoted.double.terraform # ^ source.terraform meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ punctuation.section.interpolation.end.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^ punctuation.section.interpolation.end.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^ meta.interpolation.terraform keyword.control.conditional.else.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^ meta.interpolation.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^ meta.interpolation.terraform string.quoted.double.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ punctuation.section.interpolation.end.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^^ meta.interpolation.terraform keyword.control.conditional.end.terraform # ^ meta.interpolation.terraform keyword.operator.template.trim.right.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ - string - punctuation ///// // Matches for/in/endfor directives. ///// "%{ for name in var.names ~}${name}%{ endfor ~}" # ^ - string - punctuation # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.interpolation.terraform # ^^ keyword.control.loop.in.terraform # ^^^ meta.interpolation.terraform variable.language.terraform # ^ meta.interpolation.terraform punctuation.accessor.dot.terraform # ^^^^^ meta.interpolation.terraform variable.other.member.terraform # ^ keyword.operator.template.trim.right.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^^ meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^^^ keyword.control.loop.end.terraform # ^ meta.interpolation.terraform keyword.operator.template.trim.right.terraform # ^ meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ - string - punctuation ///////////////////////////////////////////////////////////////////// // TEMPLATE LITERALS ///////////////////////////////////////////////////////////////////// ///// // Template literal using `$` character ///// "some $${interpolation} string" # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^ constant.character.escape.terraform # ^ punctuation.definition.string.end.terraform ///// // Template literal using `%` character ///// "some %%{interpolation} string" # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^ constant.character.escape.terraform # ^ punctuation.definition.string.end.terraform ///////////////////////////////////////////////////////////////////// // Operators ///////////////////////////////////////////////////////////////////// ///// // Comparison ///// a == b # ^ - keyword - operator # ^^ keyword.operator.comparison.terraform # ^ - keyword - operator a != b # ^ - keyword - operator # ^^ keyword.operator.comparison.terraform # ^ - keyword - operator a < b # ^ - keyword - operator # ^ keyword.operator.comparison.terraform # ^ - keyword - operator a <= b # ^ - keyword - operator # ^^ keyword.operator.comparison.terraform # ^ - keyword - operator a > b # ^ - keyword - operator # ^ keyword.operator.comparison.terraform # ^ - keyword - operator a >= b # ^ - keyword - operator # ^^ keyword.operator.comparison.terraform # ^ - keyword - operator ///// // Arithmetic ///// a + b # ^ - keyword - operator # ^ keyword.operator.arithmetic.terraform # ^ - keyword - operator a - b # ^ - keyword - operator # ^ keyword.operator.arithmetic.terraform # ^ - keyword - operator a * b # ^ - keyword - operator # ^ keyword.operator.arithmetic.terraform # ^ - keyword - operator a / b # ^ - keyword - operator # ^ keyword.operator.arithmetic.terraform # ^ - keyword - operator a % b # ^ - keyword - operator # ^ keyword.operator.arithmetic.terraform # ^ - keyword - operator - a # ^ - keyword - operator # ^ keyword.operator.arithmetic.terraform # ^ - keyword - operator ///// // Logic ///// a && b # ^^ - keyword - operator # ^^ keyword.operator.logical.terraform # ^^ - keyword - operator a || b # ^^ - keyword - operator # ^^ keyword.operator.logical.terraform # ^^ - keyword - operator !a # ^^ - keyword - operator # ^ keyword.operator.logical.terraform # ^^ - keyword - operator ///// // Conditional ///// length(some_list) > 0 ? some_list[0] : default # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^^^^^^^ meta.function-call.arguments.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ keyword.operator.comparison.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ keyword.operator.ternary.terraform # ^ punctuation.section.brackets.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform # ^ keyword.operator.ternary.terraform ///// // Ellipsis ///// hhh([55, 2453, 2]...) # ^^^ meta.function-call.identifier.terraform variable.function.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ punctuation.section.brackets.begin.terraform # ^^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.terraform # ^^^^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform # ^^^ keyword.operator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///////////////////////////////////////////////////////////////////// // Brackets: Index Operations and Arrays ///////////////////////////////////////////////////////////////////// ///// // Index Operations ///// thing[1] # ^ - punctuation # ^ punctuation.section.brackets.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform # ^ - punctuation ///// // Arrays of literals ///// ["a", "b", "c"] # ^^^^^^^^^^^^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.begin.terraform # ^ punctuation.definition.string.begin.terraform # ^^^ string.quoted.double.terraform # ^ punctuation.definition.string.end.terraform # ^ punctuation.separator.terraform # ^ punctuation.definition.string.begin.terraform # ^^^ string.quoted.double.terraform # ^ punctuation.definition.string.end.terraform # ^ punctuation.separator.terraform # ^ punctuation.definition.string.begin.terraform # ^^^ string.quoted.double.terraform # ^ punctuation.definition.string.end.terraform # ^ punctuation.section.brackets.end.terraform ///// // Allows inline comments ///// [1, /* inline */ 2] # ^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.terraform # ^^ punctuation.definition.comment.terraform # ^^^^^^^^^^^^ comment.block.terraform # ^^ punctuation.definition.comment.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform ///// // Allows expression over multiple lines ///// [ # ^ punctuation.section.brackets.begin.terraform 1, # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.terraform 2 # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform ] # ^ punctuation.section.brackets.end.terraform ///// // Allows operators ///// [ 1 + 2 ] # ^^^^^^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ keyword.operator.arithmetic.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform ///// // Splat operator ///// tuple[*].foo.bar[0] # ^ punctuation.section.brackets.begin.terraform # ^ punctuation.section.brackets.end.terraform keyword.operator.splat.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.accessor.dot.terraform # ^^^ variable.other.member.terraform # ^ punctuation.accessor.dot.terraform # ^^^ variable.other.member.terraform # ^ punctuation.section.brackets.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform ///// // Handle nested arrays ///// counts = [ # ^^^^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform # ^ punctuation.section.brackets.begin.terraform [ 1, 2], # ^ punctuation.section.brackets.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.separator.terraform [ 6, 7] # ^ punctuation.section.brackets.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform ] # ^ punctuation.section.brackets.end.terraform # ^ - punctuation ///// // Attribute-access inside arrays ///// [ aws_instance.ubuntu, aws_instance.freebsd ] # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.begin.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^ variable.other.member.terraform # ^ punctuation.separator.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^ variable.other.member.terraform # ^ punctuation.section.brackets.end.terraform ///// // Includes functions. ///// [ upper("ggh") ] # ^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.begin.terraform # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ punctuation.section.brackets.end.terraform ///// // Include objects. ///// [{a = 1}, {g = 2}] # ^ meta.brackets.terraform - meta.braces # ^^^^^^^ meta.brackets.terraform meta.braces.terraform # ^^ meta.brackets.terraform - meta.braces # ^^^^^^^ meta.brackets.terraform meta.braces.terraform # ^ meta.brackets.terraform - meta.braces # ^ punctuation.section.brackets.begin.terraform # ^ meta.braces.terraform punctuation.section.braces.begin.terraform # ^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.braces.terraform punctuation.section.braces.end.terraform # ^ punctuation.separator.terraform # ^ meta.braces.terraform punctuation.section.braces.begin.terraform # ^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.braces.terraform punctuation.section.braces.end.terraform # ^ punctuation.section.brackets.end.terraform ///// // Includes named values ///// [local.thing1, local.thing2] # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.begin.terraform # ^^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^ variable.other.member.terraform # ^ punctuation.separator.terraform # ^^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^ variable.other.member.terraform # ^ punctuation.section.brackets.end.terraform ///////////////////////////////////////////////////////////////////// // Collections: Objects ///////////////////////////////////////////////////////////////////// ///// // Key/value pairs separated by newlines. ///// { # ^ meta.braces.terraform punctuation.section.braces.begin.terraform name = "John" # ^^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^ meta.braces.terraform string.quoted.double.terraform age = 52 # ^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.braces.terraform keyword.operator.assignment.terraform # ^^ meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform } # ^ meta.braces.terraform punctuation.section.braces.end.terraform ///// // Key/value pairs separated by commas. ///// {name = "John", age = 52} # ^^^^^^^^^^^^^^^^^^^^^^^^^ meta.braces.terraform # ^ punctuation.section.braces.begin.terraform # ^^^^ meta.mapping.key.terraform string.unquoted.terraform # ^ keyword.operator.assignment.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^ string.quoted.double.terraform # ^ punctuation.separator.terraform # ^^^ meta.mapping.key.terraform string.unquoted.terraform # ^ punctuation.section.braces.end.terraform ///// // Allows operators in key values. ///// { name = 1 + 1 } # ^^^^^^^^^^^^^^^^ meta.braces.terraform # ^ punctuation.section.braces.begin.terraform # ^^^^ meta.mapping.key.terraform string.unquoted.terraform # ^ keyword.operator.assignment.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ keyword.operator.arithmetic.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.braces.end.terraform # ^ - meta ///// // Allows tuples as key values. ///// { list = [ 1, 2, 3 ]} # ^^^^^^^^^ meta.braces.terraform - meta.brackets # ^^^^^^^^^^^ meta.braces.terraform meta.brackets.terraform # ^ meta.braces.terraform - meta.brackets # ^ punctuation.section.braces.begin.terraform # ^^^^ meta.mapping.key.terraform string.unquoted.terraform # ^ keyword.operator.assignment.terraform # ^ punctuation.section.brackets.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.braces.end.terraform # ^ - meta ///// // Allows function calls as values. ///// { # ^ meta.braces.terraform punctuation.section.braces.begin.terraform a = upper("l"), # ^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.braces.terraform keyword.operator.assignment.terraform # ^^^^^ meta.braces.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.braces.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.braces.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.braces.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.braces.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.braces.terraform punctuation.separator.terraform } # ^ meta.braces.terraform punctuation.section.braces.end.terraform ///// // Allows nested collection literals. ///// { # ^ meta.braces.terraform punctuation.section.braces.begin.terraform obj1 = { # ^^^^ meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.braces.terraform meta.braces.terraform punctuation.section.braces.begin.terraform obj2 = { # ^^^^ meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.begin.terraform value = 5 # ^^^^^ meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.braces.terraform meta.braces.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.braces.terraform meta.braces.terraform meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform } # ^ meta.braces.terraform meta.braces.terraform meta.braces.terraform punctuation.section.braces.end.terraform } # ^ meta.braces.terraform meta.braces.terraform punctuation.section.braces.end.terraform } # ^ meta.braces.terraform punctuation.section.braces.end.terraform # ^ - meta ///// // Allows attribute-access as rvalue, including named values. ///// { lvalue = var.rvalue } # ^^^^^^^^^^^^^^^^^^^^^^^ meta.braces.terraform # ^ punctuation.section.braces.begin.terraform # ^^^^^^ meta.mapping.key.terraform string.unquoted.terraform # ^ keyword.operator.assignment.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^ variable.other.member.terraform # ^ punctuation.section.braces.end.terraform # ^ - meta ///// // Allows strings as keys. ///// {"gggg" = "gggg"} # ^^^^^^^^^^^^^^^^^ meta.braces.terraform # ^ punctuation.section.braces.begin.terraform # ^ meta.mapping.key.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^ meta.mapping.key.terraform string.quoted.double.terraform # ^ meta.mapping.key.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ keyword.operator.assignment.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^ string.quoted.double.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ punctuation.section.braces.end.terraform ///// // Allows expressions + operators as keys. ///// {(1 + 2) = "gggg"} # ^ meta.braces.terraform - meta.parens # ^^^^^^^ meta.braces.terraform meta.mapping.key.terraform meta.parens.terraform # ^^^^^^^^^^ meta.braces.terraform - meta.parens # ^ punctuation.section.braces.begin.terraform # ^ punctuation.section.parens.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ keyword.operator.arithmetic.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.parens.end.terraform # ^ keyword.operator.assignment.terraform # ^^^^^^ string.quoted.double.terraform # ^ punctuation.section.braces.end.terraform ///// // Allows function calls as keys. ///// {(func()) = 1} # ^ meta.braces.terraform - meta.parens # ^^^^^^^^ meta.braces.terraform meta.mapping.key.terraform meta.parens.terraform # ^^^^^ meta.braces.terraform - meta.parens # ^ punctuation.section.braces.begin.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^ meta.function-call.identifier.terraform variable.function.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ punctuation.section.parens.end.terraform # ^ keyword.operator.assignment.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.braces.end.terraform ///// // Allows attribute-access as keys. //// {(var.path) = 1} # ^ meta.braces.terraform - meta.parens # ^^^^^^^^^^ meta.braces.terraform meta.mapping.key.terraform meta.parens.terraform # ^^^^^ meta.braces.terraform - meta.parens # ^ punctuation.section.braces.begin.terraform # ^ punctuation.section.parens.begin.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.section.parens.end.terraform # ^ keyword.operator.assignment.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.braces.end.terraform ///////////////////////////////////////////////////////////////////// // Attribute Access ///////////////////////////////////////////////////////////////////// ///// // Matches dot-access ///// aws_instance.ubuntu[*].private_dns # ^ punctuation.accessor.dot.terraform # ^^^^^^ variable.other.member.terraform # ^ punctuation.section.brackets.begin.terraform # ^ punctuation.section.brackets.end.terraform keyword.operator.splat.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^^ variable.other.member.terraform # ^ - variable - punctuation ///// // Ignores dot-access in string literals ///// "aws_instance.ubuntu" # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^ - variable # ^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.terraform ///// // Matches inside for-expressions ///// [for l in var.letters: upper(l)] # ^ punctuation.section.brackets.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^ variable.other.member.terraform # ^ punctuation.section.block.loop.for.terraform # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ punctuation.section.brackets.end.terraform ///// // Attribute-only splat ///// tuple.*.foo.bar[0] # ^ punctuation.accessor.dot.terraform # ^ keyword.operator.splat.terraform # ^ punctuation.accessor.dot.terraform # ^^^ variable.other.member.terraform # ^ punctuation.accessor.dot.terraform # ^^^ variable.other.member.terraform # ^ punctuation.section.brackets.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform ///// // Matches subscript indexes ///// aws_route53_zone.project.name_servers.1 # ^ punctuation.accessor.dot.terraform # ^^^^^^^ variable.other.member.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^^^ variable.other.member.terraform # ^ punctuation.accessor.dot.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ - constant - punctuation - variable ///////////////////////////////////////////////////////////////////// // Attribute Definition ///////////////////////////////////////////////////////////////////// ///// // Basic definition ///// attribute = "string" # ^^^^^^^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform # ^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^ punctuation.definition.string.end.terraform provider = google-beta.impersonated # ^^^^^^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform # ^^^^^^^^^^^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^^^ variable.other.member.terraform ///// // Meta-arguments //// for_each = toset([]) # ^^^^^^^^ keyword.control.loop.for.terraform # ^ keyword.operator.assignment.terraform # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^ punctuation.section.brackets.begin.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.parens.end.terraform count = length(var.availability_zones) # ^^^^^ variable.declaration.terraform keyword.control.conditional.terraform # ^ keyword.operator.assignment.terraform # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^^^^^^^^^ variable.other.member.terraform # ^ punctuation.section.parens.end.terraform ///// // Populate an attribute from a variable value ///// (foo) = "baz" # ^ punctuation.section.parens.begin.terraform # ^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ punctuation.section.parens.end.terraform # ^ keyword.operator.assignment.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^ string.quoted.double.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform ///////////////////////////////////////////////////////////////////// // Function Calls ///////////////////////////////////////////////////////////////////// ///// // Basic call. ///// thing(l) # ^^^^^ meta.function-call.identifier.terraform variable.function.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // Matches parameters, attribute-access, literals, operators, commas. ///// cidrthingy(aws_vpc.main.cidr_block, 4, count.index+1) # ^^^^^^^^^^ meta.function-call.identifier.terraform variable.function.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^ variable.other.member.terraform # ^ punctuation.separator.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.terraform # ^^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^ variable.other.member.terraform # ^ keyword.operator.arithmetic.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.parens.end.terraform # ^ - meta - function-call - variable ///// // Matches arrays and splat as parameters. ///// y6y([55, 2453, 2]..., [55555555]) # ^^^ meta.function-call.identifier.terraform variable.function.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^^^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^^^ meta.function-call.arguments.terraform keyword.operator.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^^^^^^^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // Matches objects as parameters. ///// some({a = 1, b = "2"}) # ^^^^ meta.function-call.identifier.terraform variable.function.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // Nested function calls. ///// func(thing(yep(1))) # ^^^^ meta.function-call.identifier.terraform variable.function.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^^^ meta.function-call.arguments.terraform meta.function-call.identifier.terraform variable.function.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform meta.function-call.identifier.terraform variable.function.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ - function ///// // Parameters spanning multiple lines. ///// func( # ^^^^ meta.function-call.identifier.terraform variable.function.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform 1, # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform 2 # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform ) # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // Allow object for-expressions. //// thing({for i, v in ["a"]: v => i...}) # ^^^^^ meta.function-call.identifier.terraform variable.function.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^ meta.braces.terraform punctuation.section.braces.begin.terraform # ^^^ meta.braces.terraform keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^ punctuation.separator.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^ punctuation.section.brackets.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.block.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ punctuation.separator.key-value.terraform # ^ variable.other.readwrite.terraform # ^^^ keyword.operator.terraform # ^ punctuation.section.braces.end.terraform # ^ punctuation.section.parens.end.terraform ///// // Allow tuple for-expressions. ///// func([for v in ["a", "b"]: v]) # ^^^^ meta.function-call.identifier.terraform variable.function.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^ punctuation.section.brackets.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^ punctuation.section.brackets.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.separator.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.block.loop.for.terraform # ^ variable.other.readwrite.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.parens.end.terraform ///////////////////////////////////////////////////////////////////// // Built-in Terraform Functions // TODO: match % placeholders in format()-family first parameters // TODO: match regexs in regex()-family first parameters ////////////////////////`///////////////////////////////////////////// ///// // Numeric Functions ///// abs(23) # ^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ceil(5.1) # ^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^ meta.function-call.arguments.terraform meta.number.float.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform floor(5) # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform log(50, 10) # ^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform max(12, 54, 3) # ^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform min(12, 54, 3) # ^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform pow(3, 2) # ^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform signum(-13) # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform keyword.operator.arithmetic.terraform # ^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // String Functions ///// chomp("hello\n") # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform constant.character.escape.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform format("Hello, %s!", "Ander") # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform formatlist("Hello, %s!", ["Valentina", "Ander"]) # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform indent(2, "[\n foo,\n bar,\n]\n") # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform join(", ", ["foo", "bar", "baz"]) # ^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform lower("HELLO") # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform regex("[a-z]+", "53453453.345345aaabbbccc23454") # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform regexall("[a-z]+", "1234abcd5678efgh9") # ^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform replace("1 + 2 + 3", "+", "-") # ^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform split(",", "foo") # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform strrev("hello") # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform substr("🤔🤷", 0, 1) # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform title("hello world") # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform trimspace(" hello\n\n") # ^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform upper("hello") # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // Collection Functions ///// chunklist(["a", "b"], 2) # ^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform coalesce("a", "b") # ^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform coalescelist([], ["c", "d"]) # ^^^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform compact(["a", "", "b"]) # ^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform concat(["a"], ["c"]) # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform contains(["a"], "a") # ^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform distinct(["a", "b", "a"]) # ^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform element(["a", "b"], 1) # ^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform flatten([[["a", "b"]], ["c"]]) # ^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform index(["a"], "b") # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform keys({a=1, c=2}) # ^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform length([]) # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform list("a", "b", "c") # ^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform lookup({a="ay", b="bee"}, "a", "what?") # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform map("a", "b") # ^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform matchkeys(["i-123", "i-abc"], ["us-west", "us-east"], ["us-east"]) # ^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform merge({a="b"}, {e="f"}) # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform range(1, 4) # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform reverse([1, 2, 3]) # ^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform setintersection(["a", "b"], ["b", "c"]) # ^^^^^^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform setproduct(["development"], ["app1", "app2"]) # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform setunion(["a"], ["b"], ["d"]) # ^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform slice(["a", "b"], 1, 1) # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform sort(["e", "d"]) # ^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform transpose({a = ["1", "2"], b = ["2", "3"]}) # ^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform values({a=3, c=2, d=1}) # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform zipmap(["a", "b"], [1, 2]) # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.brackets.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // Encoding Functions ///// base64decode("SGVsbG8gV29ybGQ=") # ^^^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform base64encode("Hello World") # ^^^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform base64gzip("Hello World") # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform csvdecode("a,b,c\n1,2,3\n4,5,6") # ^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform jsondecode("{\"hello\": \"world\"}") # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform jsonencode({hello="world"}) # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.begin.terraform # ^^^^^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform urlencode("Hello World") # ^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform yamldecode("true") # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform - constant # ^^^^ meta.function-call.arguments.terraform meta.string.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.string.terraform string.quoted.double.terraform punctuation.definition.string.end.terraform - constant # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform yamlencode({a = "b", c = "d"}) # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // Filesystem Functions ///// abspath(path.root) # ^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.section.parens.end.terraform dirname("foo/bar/baz.txt") # ^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^ punctuation.definition.string.end.terraform # ^ punctuation.section.parens.end.terraform pathexpand("~/.ssh/id_rsa") # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^ punctuation.definition.string.end.terraform # ^ punctuation.section.parens.end.terraform basename("foo/bar/baz.txt") # ^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^^^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^ punctuation.definition.string.end.terraform # ^ punctuation.section.parens.end.terraform file("${path.module}/hello.txt") # ^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.interpolation.terraform variable.language.terraform # ^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform # ^^^^^^ meta.function-call.arguments.terraform meta.interpolation.terraform variable.other.member.terraform # ^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform fileexists("${path.module}/hello.txt") # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.interpolation.terraform variable.language.terraform # ^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform # ^^^^^^ meta.function-call.arguments.terraform meta.interpolation.terraform variable.other.member.terraform # ^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform fileset(path.module, "files/*.txt") # ^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^ variable.other.member.terraform # ^ punctuation.separator.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ string.quoted.double.terraform # ^ punctuation.section.parens.end.terraform filebase64("${path.module}/hello.txt") # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.interpolation.terraform variable.language.terraform # ^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform # ^^^^^^ meta.function-call.arguments.terraform meta.interpolation.terraform variable.other.member.terraform # ^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform templatefile("${path.module}/backends.tmpl", { # ^^^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.interpolation.terraform variable.language.terraform # ^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform # ^^^^^^ meta.function-call.arguments.terraform meta.interpolation.terraform variable.other.member.terraform # ^ meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.begin.terraform port = 8080, # ^^^^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^^^^ meta.function-call.arguments.terraform meta.braces.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform ip_addrs = ["10.0.0.1", "10.0.0.2"] # ^^^^^^^^ meta.function-call.arguments.terraform meta.braces.terraform meta.mapping.key.terraform string.unquoted.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform keyword.operator.assignment.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.brackets.begin.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^ meta.function-call.arguments.terraform meta.braces.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.brackets.end.terraform }) # ^ meta.function-call.arguments.terraform meta.braces.terraform punctuation.section.braces.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // Date & Time Functions ///// formatdate("DD MMM YYYY hh:mm ZZZ", "2018-01-02T23:12:01Z") # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform timeadd("2017-11-22T00:00:00Z", "10m") # ^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform timestamp() # ^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // Hash & Crypto Functions ///// base64sha256("hello world") # ^^^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform base64sha512("hello world") # ^^^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform bcrypt("hello world") # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform filebase64sha256(file("filename")) # ^^^^^^^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ - function filebase64sha512(file("filename")) # ^^^^^^^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ - function filemd5(file("filename")) # ^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform filemd1(file("filename")) # ^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ - function filesha256(file("filename")) # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ - function filesha512(file("filename")) # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ - function md5("hello world") # ^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform rsadecrypt(filebase64("${path.module}/ciphertext"), file("privatekey.pem")) # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^^^^^^^^ meta.function-call.arguments.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.begin.terraform # ^^^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform meta.interpolation.terraform variable.language.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.accessor.dot.terraform # ^^^^^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform meta.interpolation.terraform variable.other.member.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform meta.interpolation.terraform punctuation.section.interpolation.end.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^^^^ meta.function-call.arguments.terraform meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ - function sha1("hello world") # ^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform sha256("hello world") # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform sha512("hello world") # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform uuid() # ^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform uuidv5("dns", "www.terraform.io") # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // IP Network Functions ///// cidrhost("10.12.127.0/20", 16) # ^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform cidrnetmask("172.16.0.0/12") # ^^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform cidrsubnet("172.16.0.0/12", 4, 2) # ^^^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^ meta.function-call.arguments.terraform string.quoted.double.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform ///// // Type Conversions Functions ///// tobool(true) # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^ constant.language.boolean.true.terraform # ^ punctuation.section.parens.end.terraform tobool("true") # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^ punctuation.definition.string.end.terraform # ^ punctuation.section.parens.end.terraform tolist(["a", "b", "c"]) # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^ punctuation.section.brackets.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.separator.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.separator.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.parens.end.terraform tomap({a = 1, b = 2}) # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform meta.parens.terraform - meta.brackets # ^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform meta.braces.terraform # ^ meta.function-call.arguments.terraform meta.parens.terraform - meta.brackets # ^ punctuation.section.parens.begin.terraform # ^ punctuation.section.braces.begin.terraform # ^ meta.mapping.key.terraform string.unquoted.terraform # ^ keyword.operator.assignment.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.terraform # ^ meta.mapping.key.terraform string.unquoted.terraform # ^ keyword.operator.assignment.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.braces.end.terraform # ^ punctuation.section.parens.end.terraform tonumber(1) # ^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.parens.end.terraform toset(["a", "b", "c"]) # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform meta.parens.terraform - meta.brackets # ^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform meta.brackets.terraform # ^ meta.function-call.arguments.terraform meta.parens.terraform - meta.brackets # ^ punctuation.section.parens.begin.terraform # ^ punctuation.section.brackets.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.separator.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.separator.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.parens.end.terraform tostring("hello") # ^^^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.section.parens.end.terraform provider::terraform::encode_tfvars({ # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.identifier.terraform # ^ meta.function-call.arguments.terraform meta.parens.terraform - meta.braces # ^ meta.function-call.arguments.terraform meta.parens.terraform meta.braces.terraform # ^^^^^^^^ variable.namespace.terraform # ^^ punctuation.accessor.double-colon.terraform # ^^^^^^^^^ variable.namespace.terraform # ^^ punctuation.accessor.double-colon.terraform # ^^^^^^^^^^^^^ support.function.builtin.terraform # ^ punctuation.section.parens.begin.terraform # ^ punctuation.section.braces.begin.terraform example = "Hello!" }) #^^^^ meta.function-call.arguments.terraform meta.parens.terraform meta.braces.terraform # ^ meta.function-call.arguments.terraform meta.parens.terraform - meta.braces # ^ punctuation.section.braces.end.terraform # ^ punctuation.section.parens.end.terraform my::namespace::func("args") # ^^^^^^^^^^^^^^^^^^^ meta.function-call.identifier.terraform # ^^ variable.namespace.terraform # ^^ punctuation.accessor.double-colon.terraform # ^^^^^^^^^ variable.namespace.terraform # ^^ punctuation.accessor.double-colon.terraform # ^^^^ variable.function.terraform # ^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.section.parens.end.terraform ///////////////////////////////////////////////////////////////////// // TUPLE FOR-EXPRESSIONS ///////////////////////////////////////////////////////////////////// ///// // Basic expression. ///// [for s in var.list : upper(s)] # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.section.block.loop.for.terraform # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ punctuation.section.brackets.end.terraform ///// // Object or map source value. //// [for k, v in var.map : length(k) + length(v)] # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^ punctuation.separator.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^ variable.other.member.terraform # ^ punctuation.section.block.loop.for.terraform # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ keyword.operator.arithmetic.terraform # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^ punctuation.section.brackets.end.terraform ///// // Complex right-side expressions. //// [for o in var.list : o.interfaces[0].name] # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.section.block.loop.for.terraform # ^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^ variable.other.member.terraform # ^ punctuation.section.brackets.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.section.brackets.end.terraform ///// // Legacy splat expression attribute access. ///// [for o in var.list : o.interfaces][0].name # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.section.block.loop.for.terraform # ^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^ variable.other.member.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.brackets.begin.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform ///// // Multi-line for-expressions. ///// value = [ # ^ - meta.brackets # ^^ meta.brackets.terraform # ^^^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform # ^ punctuation.section.brackets.begin.terraform for instance in aws_instance.ubuntu: # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^^^ keyword.control.loop.for.terraform # ^^^^^^^^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^^^^^^^^^^^^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^ variable.other.member.terraform # ^ punctuation.section.block.loop.for.terraform instance.private_dns # ^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^^^^^^^^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^^ variable.other.member.terraform ] #^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.end.terraform # ^ - meta.brackets ///// // Match conditional on right-side expression. ///// value = [ # ^ - meta.brackets # ^^ meta.brackets.terraform # ^^^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform # ^ punctuation.section.brackets.begin.terraform for instance in aws_instance.ubuntu: # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^^^ keyword.control.loop.for.terraform # ^^^^^^^^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^^^^^^^^^^^^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^ variable.other.member.terraform # ^ punctuation.section.block.loop.for.terraform (instance.public_ip != "" ? list(instance.private_ip, instance.public_ip) : list(instance.private_ip)) # ^ meta.brackets.terraform - meta.parens # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform meta.parens.terraform # ^ meta.brackets.terraform - meta.parens # ^ punctuation.section.parens.begin.terraform # ^^^^^^^^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^ variable.other.member.terraform # ^^ keyword.operator.comparison.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ keyword.operator.ternary.terraform # ^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^^^^^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^ variable.other.member.terraform # ^ punctuation.separator.terraform # ^^^^^^^^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^ variable.other.member.terraform # ^ punctuation.section.parens.end.terraform # ^ keyword.operator.ternary.terraform # ^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^^^^^^^^^^^^^^^^^^^^^ meta.function-call.arguments.terraform meta.parens.terraform # ^ punctuation.section.parens.begin.terraform # ^^^^^^^^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^ variable.other.member.terraform # ^ punctuation.section.parens.end.terraform # ^ punctuation.section.parens.end.terraform ] #^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.end.terraform # ^ - meta.brackets ///// // Match brackets on right-side expression. ///// value = [ # ^^^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform # ^ punctuation.section.brackets.begin.terraform for instance in aws_instance.ubuntu: # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform # ^^^ keyword.control.loop.for.terraform # ^^^^^^^^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^^^^^^^^^^^^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^ variable.other.member.terraform # ^ punctuation.section.block.loop.for.terraform (instance.public_ip != "" ? [instance.private_ip, instance.public_ip] : [instance.private_ip]) # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform meta.parens.terraform - meta.parens meta.brackets # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform meta.parens.terraform meta.brackets.terraform # ^^^ meta.brackets.terraform meta.parens.terraform - meta.parens meta.brackets # ^^^^^^^^^^^^^^^^^^^^^ meta.brackets.terraform meta.parens.terraform meta.brackets.terraform # ^ meta.brackets.terraform meta.parens.terraform - meta.parens meta.brackets # ^ meta.brackets.terraform - meta.parens # ^ punctuation.section.parens.begin.terraform # ^^^^^^^^ variable.other.readwrite.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^ variable.other.member.terraform # ^^ keyword.operator.comparison.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ keyword.operator.ternary.terraform # ^ punctuation.section.brackets.begin.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^ variable.other.member.terraform # ^ punctuation.separator.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^ variable.other.member.terraform # ^ punctuation.section.brackets.end.terraform # ^ keyword.operator.ternary.terraform # ^ punctuation.section.brackets.begin.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^ variable.other.member.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.parens.end.terraform ] # <- meta.brackets.terraform #^^^^ meta.brackets.terraform # ^ punctuation.section.brackets.end.terraform # ^ - meta.brackets ///// // Match if-conditionals on right-side. ///// [for s in var.list : upper(s) if s != ""] # ^ punctuation.section.brackets.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.section.block.loop.for.terraform # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^^ keyword.control.conditional.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.comparison.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ punctuation.section.brackets.end.terraform ///// // Matches bracket-literals as range expression. ///// [for i, v in ["a", "b", "c"]: v if i < 2] # ^^^^^^^^^^^^^ meta.brackets.terraform - meta.brackets meta.brackets # ^^^^^^^^^^^^^^^ meta.brackets.terraform meta.brackets.terraform # ^^^^^^^^^^^^^ meta.brackets.terraform - meta.brackets meta.brackets # ^ punctuation.section.brackets.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^ punctuation.separator.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^ punctuation.section.brackets.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.separator.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.separator.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.block.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.control.conditional.terraform # ^ variable.other.readwrite.terraform # ^ keyword.operator.comparison.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.section.brackets.end.terraform ///////////////////////////////////////////////////////////////////// // OBJECT FOR-EXPRESSIONS ///////////////////////////////////////////////////////////////////// ///// // Matches basic syntax. ///// {for i, v in ["a", "b"]: v => i} # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.braces.terraform # ^ punctuation.section.braces.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^ punctuation.separator.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^ punctuation.section.brackets.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.separator.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.block.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ punctuation.separator.key-value.terraform # ^ variable.other.readwrite.terraform # ^ punctuation.section.braces.end.terraform # ^ - meta ///// // Matches ellipsis. ///// {for i, v in ["a"]: v => i...} # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.braces.terraform # ^ punctuation.section.braces.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^ punctuation.separator.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^ punctuation.section.brackets.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^ string.quoted.double.terraform # ^ punctuation.section.brackets.end.terraform # ^ punctuation.section.block.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ punctuation.separator.key-value.terraform # ^ variable.other.readwrite.terraform # ^^^ keyword.operator.terraform # ^ punctuation.section.braces.end.terraform ///// // Matches if-conditional. ///// {for s in var.list : substr(s, 0, 1) => s... if s != ""} # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.braces.terraform # ^ punctuation.section.braces.begin.terraform # ^^^ keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.section.block.loop.for.terraform # ^^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.separator.terraform # ^ meta.function-call.arguments.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform # ^^ punctuation.separator.key-value.terraform # ^ variable.other.readwrite.terraform # ^^^ keyword.operator.terraform # ^^ keyword.control.conditional.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.comparison.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform # ^ punctuation.section.braces.end.terraform ///// // Matches over multiple-lines. ///// value = { # ^^^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform # ^ - meta.braces # ^ meta.braces.terraform punctuation.section.braces.begin.terraform for l in var.letters: l => # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.braces.terraform # ^^^ meta.braces.terraform keyword.control.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ keyword.operator.iteration.in.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^ variable.other.member.terraform # ^ punctuation.section.block.loop.for.terraform # ^ variable.other.readwrite.terraform # ^^ punctuation.separator.key-value.terraform upper(l) # ^^^^^^^^^^ meta.braces.terraform # ^^^^^ meta.function-call.identifier.terraform support.function.builtin.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^ meta.function-call.arguments.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform } # <- meta.braces.terraform #^^^^ meta.braces.terraform # ^ punctuation.section.braces.end.terraform # ^ - meta.braces ///////////////////////////////////////////////////////////////////// // BLOCKS ///////////////////////////////////////////////////////////////////// ///// // Inline block with no labels. //// thing {} # ^^^^^^^ meta.block.head.terraform # ^^^^^ keyword.declaration.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform ///// // Inline block with string labels. ///// thing "label1" "label2\"" {} # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.head.terraform # ^^^^^ keyword.declaration.terraform # ^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^ punctuation.definition.string.end.terraform # ^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^ constant.character.escape.terraform # ^ punctuation.definition.string.end.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform ///// // Inline block with identifier labels. ///// thing thing1 thing2 thing3 {} # ^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.head.terraform # ^^^^^ keyword.declaration.terraform # ^^^^^^ string.unquoted.double.terraform # ^^^^^^ string.unquoted.double.terraform # ^^^^^^ string.unquoted.double.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform ////// // Nested multi-line blocks with expressions. ///// resource "aws_security_group" "example" { # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.head.terraform # ^^^^^^^^ keyword.declaration.terraform # ^^^^^^^^^^^^^^^^^^^^ meta.string.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^^^^^^^^^^^^ support.type.terraform # ^ punctuation.definition.string.end.terraform # ^^^^^^^^^ meta.string.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^ entity.name.label.terraform # ^ punctuation.definition.string.end.terraform # ^ meta.block.body.terraform punctuation.section.block.begin.terraform name = "example" # ^^^^^^^^^^^^^^^^ meta.block.body.terraform # ^^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform # ^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^ punctuation.definition.string.end.terraform dynamic "ingress" { #^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.body.terraform - meta.block meta.block meta.block # ^^^^^^^^^^^^^^^^^^ meta.block.body.terraform meta.block.head.terraform # ^^^^^^^ keyword.declaration.terraform # ^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^ punctuation.definition.string.end.terraform # ^ meta.block.body.terraform meta.block.body.terraform punctuation.section.block.begin.terraform for_each = var.service_ports # ^^^^^^^^ variable.declaration.terraform keyword.control.loop.for.terraform # ^ keyword.operator.assignment.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^^^^ variable.other.member.terraform content { # ^^^^^^^ meta.block.body.terraform meta.block.body.terraform meta.block.head.terraform # ^ meta.block.body.terraform meta.block.body.terraform - meta.type # ^^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform - meta.type # ^^^^^^^ keyword.declaration.terraform # ^ punctuation.section.block.begin.terraform from_port = ingress.value # ^^^^^^^^^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform variable.declaration.terraform variable.other.readwrite.terraform # ^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform keyword.operator.assignment.terraform # ^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform punctuation.accessor.dot.terraform # ^^^^^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform variable.other.member.terraform to_port = ingress.value # ^^^^^^^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform variable.declaration.terraform variable.other.readwrite.terraform # ^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform keyword.operator.assignment.terraform # ^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform punctuation.accessor.dot.terraform protocol = "tcp" + "IP" # ^^^^^^^^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform variable.declaration.terraform variable.other.readwrite.terraform # ^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform keyword.operator.assignment.terraform # ^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform string.quoted.double.terraform # ^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform keyword.operator.arithmetic.terraform # ^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform string.quoted.double.terraform punctuation.definition.string.begin.terraform # ^^^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform string.quoted.double.terraform } # ^ meta.block.body.terraform meta.block.body.terraform meta.block.body.terraform punctuation.section.block.end.terraform } # ^ meta.block.body.terraform meta.block.body.terraform punctuation.section.block.end.terraform } # ^ meta.block.body.terraform punctuation.section.block.end.terraform # ^ - meta ///// // Matches blocks with functions, objects, tuples. ///// thing label1 { # ^^^^^^^^^^^^^ meta.block.head.terraform # ^^^^^ keyword.declaration.terraform # ^^^^^^ string.unquoted.double.terraform # ^ meta.block.body.terraform punctuation.section.block.begin.terraform func = function(param1) # ^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.body.terraform # ^^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform # ^^^^^^^^ meta.function-call.identifier.terraform variable.function.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.begin.terraform # ^^^^^^ meta.function-call.arguments.terraform # ^ meta.function-call.arguments.terraform punctuation.section.parens.end.terraform obj = { # ^^^^^^^ meta.block.body.terraform - meta.braces # ^^ meta.block.body.terraform meta.braces.terraform # ^^^ variable.declaration.terraform variable.other.readwrite.terraform # ^ keyword.operator.assignment.terraform key = "value" # ^^^^^^^^^^^^^^^ meta.block.body.terraform meta.braces.terraform # ^^^ meta.mapping.key.terraform string.unquoted.terraform # ^ keyword.operator.assignment.terraform # ^^^^^^^ meta.string.terraform string.quoted.double.terraform } # ^ meta.block.body.terraform meta.braces.terraform punctuation.section.braces.end.terraform tuple = [1, 2] # ^^^^^ meta.block.body.terraform variable.declaration.terraform variable.other.readwrite.terraform # ^ meta.block.body.terraform keyword.operator.assignment.terraform # ^ meta.block.body.terraform punctuation.section.brackets.begin.terraform # ^ meta.block.body.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.block.body.terraform punctuation.separator.terraform # ^ meta.block.body.terraform meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ meta.block.body.terraform punctuation.section.brackets.end.terraform } # ^ meta.block.body.terraform punctuation.section.block.end.terraform # ^ - meta - block ///////////////////////////////////////////////////////////////////// // TERRAFORM NAMED VALUES ///////////////////////////////////////////////////////////////////// var.something # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^ variable.other.member.terraform local.something # ^^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^ variable.other.member.terraform module.name.output_name # ^^^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^^ variable.other.member.terraform data.data_type.name # ^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^ variable.other.member.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform path.module # ^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^ variable.other.member.terraform terraform.workspace # ^^^^^^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^ variable.other.member.terraform count.index # ^^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^ variable.other.member.terraform each.key # ^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^ variable.other.member.terraform self.private_ip # ^^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^ variable.other.member.terraform ///////////////////////////////////////////////////////////////////// // TERRAFORM TOP-LEVEL BLOCK TYPES ///////////////////////////////////////////////////////////////////// resource "type" "name" {} # ^^^^^^^^^^^^^^^^^^^^^^^ meta.block.head.terraform # ^^^^^^^^ keyword.declaration.terraform # ^^^^^^ meta.string.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^ support.type.terraform # ^ punctuation.definition.string.end.terraform # ^^^^^^ meta.string.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^ entity.name.label.terraform # ^ punctuation.definition.string.end.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform ephemeral "type" "name" {} # ^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.head.terraform # ^^^^^^^^^ keyword.declaration.terraform # ^^^^^^ meta.string.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^ support.type.terraform # ^ punctuation.definition.string.end.terraform # ^^^^^^ meta.string.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^ entity.name.label.terraform # ^ punctuation.definition.string.end.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform data "type" name {} # ^^^^^^^^^^^^^^^^^ meta.block.head.terraform # ^^^^ keyword.declaration.terraform # ^^^^^^ meta.string.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^ support.type.terraform # ^ punctuation.definition.string.end.terraform # ^^^^ entity.name.label.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform provider "name" {} # ^^^^^^^^^^^^^^^^ meta.block.head.terraform # ^^^^^^^^ keyword.declaration.terraform # ^^^^^^ meta.string.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^ entity.name.label.terraform # ^ punctuation.definition.string.end.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform module name {} # ^^^^^^^^^^^^ meta.block.head.terraform # ^^^^^^ keyword.declaration.terraform # ^^^^ entity.name.label.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform variable "name" {} # ^^^^^^^^^^^^^^^^ meta.block.head.terraform # ^^^^^^^^ keyword.declaration.terraform # ^^^^^^ meta.string.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^ entity.name.label.terraform # ^ punctuation.definition.string.end.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform output "name"{} # ^^^^^^^^^^^^^ meta.block.head.terraform # ^^^^^^ keyword.declaration.terraform # ^^^^^^ meta.string.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^ entity.name.label.terraform # ^ punctuation.definition.string.end.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform locals {} # ^^^^^^^ meta.block.head.terraform # ^^^^^^ keyword.declaration.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform terraform {} # ^^^^^^^^^^ meta.block.head.terraform # ^^^^^^^^^ keyword.declaration.terraform # ^^ meta.block.body.terraform # ^ punctuation.section.block.begin.terraform # ^ punctuation.section.block.end.terraform ///////////////////////////////////////////////////////////////////// // TERRAFORM TYPE KEYWORDS ///////////////////////////////////////////////////////////////////// string # ^^^^^^ storage.type.terraform any # ^^^ storage.type.terraform number # ^^^^^^ storage.type.terraform bool # ^^^^ storage.type.terraform ///////////////////////////////////////////////////////////////////// // HEREDOCS ///////////////////////////////////////////////////////////////////// ///// // Basic example. ///// << EOF # ^^ keyword.operator.heredoc.terraform # ^^^ keyword.control.heredoc.terraform sdfdfsd # ^^^^^^^^ string.unquoted.heredoc.terraform EOF # ^^^^ keyword.control.heredoc.terraform ///// // With leading-spaces-operator. ///// <<- END # ^^^ keyword.operator.heredoc.terraform # ^^^ keyword.control.heredoc.terraform heredoc # ^^^^^^^^ string.unquoted.heredoc.terraform EOF # ^^^^ string.unquoted.heredoc.terraform END # ^^^^ keyword.control.heredoc.terraform ///// // Includes string interpolation. ///// <<- END # ^^^ keyword.operator.heredoc.terraform # ^^^ keyword.control.heredoc.terraform Hello, %{var.name} #^^^^^^^^^^^^^^^^^^^^^ meta.string.terraform #^^^^^^^^^^ string.unquoted.heredoc.terraform # ^^^^^^^^^^^ meta.interpolation.terraform # ^^ punctuation.section.interpolation.begin.terraform # ^^^^^^^^ source.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^ variable.other.member.terraform # ^ punctuation.section.interpolation.end.terraform END # ^^^^ keyword.control.heredoc.terraform <<__EOF__ # ^^ keyword.operator.heredoc.terraform # ^^^^^^^ keyword.control.heredoc.terraform aaa __EOF__ # ^^^^^^^^ keyword.control.heredoc.terraform ///////////////////////////////////////////////////////////////////// // IMPORTS ///////////////////////////////////////////////////////////////////// ///// // Import with attribute access. ///// terraform import aws_instance.example i-abcd1234 # ^^^^^^^^^ support.constant.terraform # ^^^^^^ keyword.control.import.terraform # ^^^^^^^^^^^^ entity.name.label.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^ variable.other.member.terraform # ^^^^^^^^^^ entity.name.label.terraform ///// // Import with numeric literals. ///// terraform import digitalocean_ssh_key.mykey 263654 # ^^^^^^^^^ support.constant.terraform # ^^^^^^ keyword.control.import.terraform # ^^^^^^^^^^^^^^^^^^^^ entity.name.label.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^ variable.other.member.terraform # ^^^^^^ meta.number.integer.decimal.terraform constant.numeric.value.terraform resource "aws_iam_role_policy" "attach-inline-policy-1" { name = "xxx" role = aws_iam_role.execution-role.name res_arn = "arn:aws:lambda:*:*:function:${var.environment}-xxx" # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.body.terraform meta.string.terraform # ^ string.quoted.double.terraform punctuation.definition.string.begin.terraform - variable # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ variable.language.acl.terraform # ^^ punctuation.section.interpolation.begin.terraform # ^^^^^^^^^^^^^^^ source.terraform source.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^^ variable.other.member.terraform # ^ punctuation.section.interpolation.end.terraform # ^ string.quoted.double.terraform punctuation.definition.string.end.terraform - variable policy = jsonencode({ Version = "2012-10-17" #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.body.terraform meta.function-call.arguments.terraform meta.braces.terraform # ^^^^^^^ meta.mapping.key.terraform string.unquoted.terraform # ^ keyword.operator.assignment.terraform # ^^^^^^^^^^^^ meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^ punctuation.definition.string.end.terraform # comment # ^^^^^^^^^^ comment.line.terraform "Statement": [ #^^^^^^^^^^^^^^^^^^^^^ meta.block.body.terraform meta.function-call.arguments.terraform #^^^^^^^ meta.braces.terraform # ^^^^^^^^^^^ meta.mapping.key.json string.quoted.double.json # ^ punctuation.definition.string.begin.json # ^ punctuation.definition.string.end.json # ^^ meta.braces.terraform # ^ punctuation.separator.key-value.json # ^ meta.mapping.value.json meta.sequence.json punctuation.section.sequence.begin.json # comment # ^^^^^^^^^^ comment.line.terraform { "Action": [ "lambda:InvokeFunction", "lambda:InvokeAsync" ], "Resource": "arn:aws:lambda:*:*:function:${var.environment}-xxx", #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.body.terraform meta.function-call.arguments.terraform meta.mapping.value.json meta.sequence.json #^^^^^^^^^^^^^^^ meta.mapping.json # ^^^^^^^^^^ meta.mapping.key.json string.quoted.double.json # ^^ meta.mapping.json # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.mapping.value.json meta.string.json - meta.interpolation # ^^^^^^^^^^^^^^^^^^ meta.mapping.value.json meta.string.json meta.interpolation.terraform - string # ^^^^^ meta.mapping.value.json meta.string.json - meta.interpolation # ^ meta.mapping.json # ^ punctuation.definition.string.begin.json # ^ punctuation.definition.string.end.json # ^ punctuation.separator.key-value.json # ^ string.quoted.double.json punctuation.definition.string.begin.json - variable # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ variable.language.acl.terraform # ^^ punctuation.section.interpolation.begin.terraform # ^^^^^^^^^^^^^^^ source.terraform source.terraform # ^^^ variable.language.terraform # ^ punctuation.accessor.dot.terraform # ^^^^^^^^^^^ variable.other.member.terraform # ^ punctuation.section.interpolation.end.terraform # ^ string.quoted.double.json punctuation.definition.string.end.json - variable # ^ punctuation.separator.sequence.json "IP": "1.2.3.4", #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.body.terraform meta.function-call.arguments.terraform meta.parens.terraform meta.mapping.value.json meta.sequence.json #^^^^^^^^^^^^^^^ meta.mapping.json # ^^^^ meta.mapping.key.json string.quoted.double.json # ^ punctuation.definition.string.begin.json # ^ punctuation.definition.string.end.json # ^^ meta.mapping.json # ^ punctuation.separator.key-value.json # ^^^^^^^^^ meta.mapping.value.json meta.string.terraform string.quoted.double.terraform # ^ punctuation.definition.string.begin.terraform # ^^^^^^^ meta.number.integer.other.terraform constant.numeric.ip-address.v4.terraform # ^ punctuation.definition.string.end.terraform # ^ meta.mapping.json punctuation.separator.sequence.json "Effect": "Allow" } ] }) } ] # <- invalid.illegal.stray.terraform } # <- invalid.illegal.stray.terraform ) # <- invalid.illegal.stray.terraform ================================================ FILE: tests/syntax_test_scope.tfplan ================================================ # SYNTAX TEST "Terraform Plan.sublime-syntax" Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create ! update-in-place - destroy -/+ destroy and then create replacement Terraform will perform the following actions: # aws_route53_record_cname_autodiscover_example_com must be replaced -/+ resource "aws_route53_record" "cname_autodiscover_example_com" { #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.changed.destroyed-then-created.diff #^^ punctuation.definition.changed.diff + allow_overwrite = (known after apply) #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.inserted.diff - markup markup # ^^^^^^^^^^^^^^^^^^^ comment.block.terraform ! fqdn = "autodiscover.example.com" -> (known after apply) #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.changed.updated-in-place.diff # ^^ keyword.operator.assignment.terraform # ^^^^^^^^^^^^^^^^^^^ comment.block.terraform ! id = "ABCDEABCDEABCDEA_autodiscover_CNAME" -> (known after apply) #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.changed.updated-in-place.diff # ^^ keyword.operator.assignment.terraform # ^^^^^^^^^^^^^^^^^^^ comment.block.terraform ! name = "autodiscover.example.com" -> (known after apply) #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.changed.updated-in-place.diff # ^^ keyword.operator.assignment.terraform # ^^^^^^^^^^^^^^^^^^^ comment.block.terraform # (4 unchanged attributes hidden) # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - markup } #^^^^ markup.changed.diff # aws_route53_record_cname_lyncdiscover_example_com will be destroyed - resource "aws_route53_record" "cname_lyncdiscover_example_com_old" { #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.deleted.diff - fqdn = "lyncdiscover.example.com" -> null #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.deleted.diff - markup markup # ^^ keyword.operator.assignment.terraform # ^^^^ constant.language.null.terraform - id = "ABCDEABCDEABCDEA_lyncdiscover_CNAME" -> null - name = "lyncdiscover" -> null #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.deleted.diff # ^^ keyword.operator.assignment.terraform # ^^^^ constant.language.null.terraform - records = [ - "webdir.online.lync.com.", #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.deleted.diff ] -> null #^^^^^^^^^^^^^^^^ markup.deleted.diff - markup markup # ^^ keyword.operator.assignment.terraform # ^^^^ constant.language.null.terraform - ttl = 7200 -> null - type = "CNAME" -> null - zone_id = "ABCDEABCDEABCDEA" -> null } #^^^^ markup.deleted.diff - markup markup # aws_route53_record_cname_lyncdiscover_example_com will be created + resource "aws_route53_record" "cname_lyncdiscover_example_com_new" { + fqdn = (known after apply) #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.inserted.diff - markup markup # ^^^^^^^^^^^^^^^^^^^ comment.block.terraform + id = (known after apply) #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.inserted.diff # ^^^^^^^^^^^^^^^^^^^ comment.block.terraform + name = (known after apply) #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.inserted.diff # ^^^^^^^^^^^^^^^^^^^ comment.block.terraform + records = [ + "webdir.online.lync.com.", #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.inserted.diff - markup markup ] + ttl = 7200 + type = "CNAME" + zone_id = "ABCDEABCDEABCDEA" } #^^^^ markup.inserted.diff - markup markup # aws_route53_record_zone_example_com will be updated in-place ! resource "aws_route53_record" "cname_autodiscover_example_com" { #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.changed.updated-in-place.diff ! comment = "Records for the example.com domain" -> "Records for the example.com domains" #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.changed.updated-in-place.diff # ^^ keyword.operator.assignment.terraform id = "ABCDEABCDEABCDEA" name = "example.com" tags = { #^^^^^^^^^^^^^^^^^^^^^^^^ - markup "Provisioner" = "Terraform" "System" = "example" "Workspace" = "production" #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - markup } #^^^^^^^^ - markup # (3 unchanged attributes hidden) } #^^^^ markup.changed.diff - markup markup Plan: 2 to add, 1 to change, 2 to destroy. #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.block.summary.terraform # ^^^^^^^^ markup.inserted.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.sequence.terraform # ^^^^^^^^^^^ markup.changed.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.separator.sequence.terraform # ^^^^^^^^^^^^ markup.deleted.terraform # ^ meta.number.integer.decimal.terraform constant.numeric.value.terraform # ^ punctuation.terminator.terraform ================================================ FILE: tests/syntax_test_scope.tfvars ================================================ # SYNTAX TEST "Terraform-vars.sublime-syntax" # Same as normal Terraform syntax, hence nothing special to test here. # <- source.terraform-vars ================================================ FILE: tests/syntax_test_symbol.tf ================================================ # SYNTAX TEST "Terraform.sublime-syntax" terraform { #@@@@@@@@@ local-definition backend "gcs" { # @@@@@@@@@@@@@ local-definition prefix = "minecraft/state" bucket = "terraform-larkworthy" } } # You need to fill these locals out with the project, region and zone # Then to boot it up, run:- # gcloud auth application-default login # terraform init # terraform apply locals { #@@@@@@ local-definition # The Google Cloud Project ID that will host and pay for your Minecraft server project = "larkworthy-tester" region = "europe-west1" zone = "europe-west1-b" # Allow members of an external Google group to turn on the server # through the Cloud Console mobile app or https://console.cloud.google.com # Create a group at https://groups.google.com/forum/#!creategroup # and invite members by their email address. enable_switch_access_group = 1 minecraft_switch_access_group = "minecraft-switchers-lark@googlegroups.com" } provider "google" { #@@@@@@@@@@@@@@@@@ local-definition # @@@@@@ global-definition project = local.project region = local.region } # Create service account to run service with no permissions resource "google_service_account" "minecraft" { #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ local-definition # @@@@@@@@@ global-definition account_id = "minecraft" display_name = <