Skip to content

Parsing error for multiline binary operators #246

@deitChi

Description

@deitChi

Describe the bug

Parsing error when there is a binary operator defined over multiple lines

Software:

  • OS: Linux (GH Runner ubuntu-latest)
  • Python version 3.10.18
  • python-hcl2 version python_hcl2-7.3.1

Snippet of HCL2 code causing the unexpected behaviour:

locals {
 dedup_keys_layer8 = {
    for k, v in local.action_keys_layer8 :
    k => v
    if !contains(keys(local.dedup_keys_layer9), k)
    && !contains(keys(local.dedup_keys_layer10), k)
  }

  dedup_keys_layer7 = {
    for k, v in local.action_keys_layer7 :
    k => v
    if !contains(keys(local.dedup_keys_layer8), k)
    && !contains(keys(local.dedup_keys_layer9), k)
    && !contains(keys(local.dedup_keys_layer10), k)
  }
}

Expected behavior

a verbose configuration (jdump) or similar for these binary operators, or even 'value know at apply' terraform style

Exception traceback (if applicable):

File "/home/codespace/.pyenv/versions/3.10.18/lib/python3.10/site-packages/hcl2/api.py", line 16, in load
    return loads(file.read(), with_meta=with_meta)
  File "/home/codespace/.pyenv/versions/3.10.18/lib/python3.10/site-packages/hcl2/api.py", line 29, in loads
    tree = parser().parse(text + "\n")
  File "/home/codespace/.pyenv/versions/3.10.18/lib/python3.10/site-packages/lark/lark.py", line 655, in parse
    return self.parser.parse(text, start=start, on_error=on_error)
  File "/home/codespace/.pyenv/versions/3.10.18/lib/python3.10/site-packages/lark/parser_frontends.py", line 104, in parse
    return self.parser.parse(stream, chosen_start, **kw)
  File "/home/codespace/.pyenv/versions/3.10.18/lib/python3.10/site-packages/lark/parsers/lalr_parser.py", line 42, in parse
    return self.parser.parse(lexer, start)
  File "/home/codespace/.pyenv/versions/3.10.18/lib/python3.10/site-packages/lark/parsers/lalr_parser.py", line 88, in parse
    return self.parse_from_state(parser_state)
  File "/home/codespace/.pyenv/versions/3.10.18/lib/python3.10/site-packages/lark/parsers/lalr_parser.py", line 111, in parse_from_state
    raise e
  File "/home/codespace/.pyenv/versions/3.10.18/lib/python3.10/site-packages/lark/parsers/lalr_parser.py", line 102, in parse_from_state
    state.feed_token(token)
  File "/home/codespace/.pyenv/versions/3.10.18/lib/python3.10/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('BINARY_OP', '&&') at line 139, column 5.
Expected one of: 
        * RPAR

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