name: HCL Expression
scopeName: source.hclexpr
fileTypes: []
uuid: 6c358551-0381-4128-9ea3-277b21943b5c

patterns:

- comment: Comments
  name: comment.line.hcl
  begin: '#|//'
  end: $\n?
  captures:
    '0': {name: punctuation.definition.comment.hcl}

- comment: Block comments
  name: comment.block.hcl
  begin: /\*
  end: \*/
  captures:
    '0': {name: punctuation.definition.comment.hcl}

- comment: Language constants (true, false, null)
  name: constant.language.hcl
  match: \b(true|false|null)\b

- comment: Numbers
  name: constant.numeric.hcl
  match: \b([0-9]+)(.[0-9]+)?([eE][0-9]+)?\b

- comment: Function Calls
  begin: ([-\w]+)(\()
  beginCaptures:
    '1': {name: keyword.other.function.inline.hcl}
    '2': {name: keyword.other.section.begin.hcl}
  end: (\))
  endCaptures:
    '1': {name: keyword.other.section.end.hcl}
  patterns:
  - include: '$self'

- comment: Variables and Attribute Names
  match: '[-\w]+'
  captures:
    '0': {name: variable.other.hcl}

- comment: Heredoc Templates
  begin: (?>\s*<<(\w+))
  beginCaptures:
    '0': {name: punctuation.definition.string.begin.hcl}
    '1': {name: keyword.operator.heredoc.hcl}
  end: ^\s*\1$
  endCaptures:
    '0': {name: punctuation.definition.string.end.hcl keyword.operator.heredoc.hcl}
  patterns:
  - include: 'source.hcltemplate'

- comment: String Templates
  begin: \"
  beginCaptures:
    '0': {name: string.hcl punctuation.definition.string.begin.hcl}
  end: \"
  endCaptures:
    '0': {name: string.hcl punctuation.definition.string.end.hcl}
  patterns:
  - include: 'source.hcltemplate'
  - match: '(^"|$\{|%\{)+'
    name: "string.quoted.double.hcl"

- comment: Operators
  match: '(!=|==|>=|<=|&&|\|\||[-+*/%<>!?:])'
  captures:
    '0': {name: keyword.operator.hcl}

- comment: Parentheses
  begin: '\('
  beginCaptures:
    '0': {name: meta.brace.round.hcl}
  end: '\)'
  endCaptures:
    '0': {name: meta.brace.round.hcl}
  patterns:
  - include: '$self'

- comment: Tuple Constructor
  begin: '\['
  beginCaptures:
    '0': {name: meta.brace.square.hcl}
  end: '\]'
  endCaptures:
    '0': {name: meta.brace.square.hcl}
  patterns:
  - match: '(for|in)'
    captures:
      '0': {name: keyword.control.hcl}
  - include: '$self'

- comment: Object Constructor
  begin: '\{'
  beginCaptures:
    '0': {name: meta.brace.curly.hcl}
  end: '\}'
  endCaptures:
    '0': {name: meta.brace.curly.hcl}
  patterns:
  - match: '(for|in)'
    captures:
      '0': {name: keyword.control.hcl}
  - match: '(=>|\.\.\.)'
    captures:
      '0': {name: keyword.operator.hcl}
  - include: '$self'