这是indexloc提供的服务,不要输入任何密码
Skip to content

Bicep: Missing parser support for extension keyword #7364

@MadsVSChristensen

Description

@MadsVSChristensen

Describe the issue
The bicep parser doesn't support the extension keyword and throws a parsing error when it encounters it in a file.

I've created a pull request fixing the issue at the pycep repo.

Error ouput:

2025-11-10 09:09:05,065 [MainThread  ] [INFO ]  [bicep] start to parse 1 files
2025-11-10 09:09:05,084 [MainThread  ] [DEBUG]  [bicep] Couldn't parse main.bicep
Traceback (most recent call last):
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/lark/lexer.py", line 689, in lex
    yield lexer.next_token(lexer_state, parser_state)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/lark/lexer.py", line 622, in next_token
    raise UnexpectedCharacters(lex_state.text.text, line_ctr.char_pos, line_ctr.line, line_ctr.column,
lark.exceptions.UnexpectedCharacters: No terminal matches 'e' in the current parser context, at line 8 col 1

extension microsoftGraphV1
^
Expected one of: 
        * VAR
        * TYPE
        * OUTPUT
        * _CPP_COMMENT_NL
        * MODULE
        * AT
        * TARGETSCOPE
        * PARAM
        * METADATA
        * RESOURCE

Previous tokens: Token('_CPP_COMMENT_NL', '// Enable Microsoft Graph extension\n')


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/checkov/bicep/parser.py", line 24, in parse
    template = self.bicep_parser.parse(text=content)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/pycep/main.py", line 29, in parse
    tree = self._create_tree(text=text, file_path=file_path)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/pycep/main.py", line 53, in _create_tree
    return self.lark_parser.parse(bicep_text)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/lark/lark.py", line 677, in parse
    return self.parser.parse(text, start=start, on_error=on_error)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/lark/parser_frontends.py", line 131, in parse
    return self.parser.parse(stream, chosen_start, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 42, in parse
    return self.parser.parse(lexer, start)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 88, in parse
    return self.parse_from_state(parser_state)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 111, in parse_from_state
    raise e
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/lark/parsers/lalr_parser.py", line 100, in parse_from_state
    for token in state.lexer.lex(state):
                 ^^^^^^^^^^^^^^^^^^^^^^
  File ".../.cache/uv/archive-v0/byuoiA4g8gpozKNsrLhzc/lib/python3.12/site-packages/lark/lexer.py", line 698, in lex
    raise UnexpectedToken(token, e.allowed, state=parser_state, token_history=[last_token], terminals_by_name=self.root_lexer.terminals_by_name)
lark.exceptions.UnexpectedToken: Unexpected token Token('STRING', 'extension') at line 8, column 1.
Expected one of: 
        * VAR
        * TYPE
        * OUTPUT
        * _CPP_COMMENT_NL
        * MODULE
        * AT
        * TARGETSCOPE
        * PARAM
        * METADATA
        * RESOURCE
        * $END
Previous tokens: [Token('_CPP_COMMENT_NL', '// Enable Microsoft Graph extension\n')]

Example Value

// Simple extension
extension microsoftGraphV1

// Extension with config and alias
extension kubernetes with {
  namespace: 'default'
  kubeConfig: 'someKubeConfig'
} as k8s

// ... Do something with it

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions