Skip to content

Parsing error when comparing strings within a string template directive #247

@mattsperle

Description

@mattsperle

Describe the bug

Parsing error when comparing strings within a string template directive. It seems to be an issue for string comparisons specifically. Comparing other types works as expected.

Software:

  • OS: Linux
  • Python version: 3.12.3
  • python-hcl2 version: 7.3.1

Snippet of HCL2 code causing the unexpected behaviour:

locals {
  service = "kms%{ if var.id != "primary" }-${var.id}%{ endif }"
}

Expected behavior

I would expect it to return

'service': 'kms%{ if var.id != "primary"}-${var.id}%{ endif }'}

instead of throwing an exception.

Exception traceback (if applicable):

Traceback (most recent call last):
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser_state.py", line 77, in feed_token
    action, arg = states[state][token.type]
                  ~~~~~~~~~~~~~^^^^^^^^^^^^
KeyError: 'RBRACE'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/msperle/git/kms/terraform/kms/test.py", line 5, in <module>
    hcl2.load(f)
  File "/home/msperle/.venv/lib/python3.12/site-packages/hcl2/api.py", line 16, in load
    return loads(file.read(), with_meta=with_meta)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/hcl2/api.py", line 29, in loads
    tree = parser().parse(text + "\n")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/lark.py", line 677, in parse
    return self.parser.parse(text, start=start, on_error=on_error)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parser_frontends.py", line 131, in parse
    return self.parser.parse(stream, chosen_start, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 42, in parse
    return self.parser.parse(lexer, start)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 88, in parse
    return self.parse_from_state(parser_state)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 111, in parse_from_state
    raise e
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 102, in parse_from_state
    state.feed_token(token)
  File "/home/msperle/.venv/lib/python3.12/site-packages/lark/parsers/lalr_parser_state.py", line 80, in feed_token
    raise UnexpectedToken(token, expected, state=self, interactive_parser=None)
lark.exceptions.UnexpectedToken: Unexpected token Token('RBRACE', '}') at line 32, column 1.
Expected one of: 
        * LBRACE

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions