amplify-education / python-hcl2

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

"No terminal matches '|' in the current parser context" when parsing multi-line conditional

xRokco opened this issue · comments

I have the following Terraform local:

my_local = {
    for k, v in local.map_a : k => v
    if lookup(local.map_b[v.id], "enabled", false)
    || (
      contains(local.map_c, v.id)
      && contains(local.map_d, v.id)
    )
  }

It returns the following error when I attempt to parse the file:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/lark/lexer.py", line 590, in lex
    yield lexer.next_token(lexer_state, parser_state)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/lark/lexer.py", line 528, in next_token
    raise UnexpectedCharacters(lex_state.text, line_ctr.char_pos, line_ctr.line, line_ctr.column,
lark.exceptions.UnexpectedCharacters: No terminal matches '|' in the current parser context, at line 20 col 5
    || (
    ^
Expected one of:
    * /<<(?P<heredoc>[a-zA-Z][a-zA-Z0-9._-]+)\n(?:.|\n)*?(?P=heredoc)/
    * BANG
    * /#.*\n/
    * COLON
    * RSQB
    * /[a-zA-Z_][a-zA-Z0-9_-]*/
    * LBRACE
    * STRING_LIT
    * RBRACE
    * DECIMAL
    * LSQB
    * /\n/
    * /<<-(?P<heredoc_trim>[a-zA-Z][a-zA-Z0-9._-]+)\n(?:.|\n)*?(?P=heredoc_trim)/
    * MINUS
    * /\/\/.*\n/
    * LPAR
    * COMMA
    * RPAR
Previous tokens: Token('__ANON_0', '\n')

I can fix this by moving the entire local on to a single line, or adjusting it like this:

my_local = {
    for k, v in local.map_a : k => v
    if lookup(local.map_b[v.id], "enabled", false) || (
      contains(local.map_c, v.id) && (
      contains(local.map_d, v.id))
    )
  }

Seems like as long as I put || or && at the start or end of a line it produces this error.