godot-gdscript-toolkit icon indicating copy to clipboard operation
godot-gdscript-toolkit copied to clipboard

Support for new "is not" syntax.

Open domdfcoding opened this issue 1 year ago • 0 comments

Godot 4.3 now supports "x is not y" syntax in addition to "not x is y" from previous versions. However, gdlint and gdformat crash when a file contains the new syntax.

The latest release (4.2.2) gives this error:

Traceback (most recent call last):
  File "venv/lib/python3.8/site-packages/lark/lexer.py", line 590, in lex
    yield lexer.next_token(lexer_state, parser_state)
  File "venv/lib/python3.8/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: <exception str() failed>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "venv/lib/python3.8/site-packages/gdtoolkit/formatter/__main__.py", line 209, in _format_code
    code_parse_tree = parser.parse(code, gather_metadata=True)
  File "venv/lib/python3.8/site-packages/gdtoolkit/parser/parser.py", line 62, in parse
    self._parser_with_metadata.parse(adjusted_code)
  File "venv/lib/python3.8/site-packages/lark/lark.py", line 645, in parse
    return self.parser.parse(text, start=start, on_error=on_error)
  File "venv/lib/python3.8/site-packages/lark/parser_frontends.py", line 96, in parse
    return self.parser.parse(stream, chosen_start, **kw)
  File "venv/lib/python3.8/site-packages/lark/parsers/lalr_parser.py", line 41, in parse
    return self.parser.parse(lexer, start)
  File "venv/lib/python3.8/site-packages/lark/parsers/lalr_parser.py", line 171, in parse
    return self.parse_from_state(parser_state)
  File "venv/lib/python3.8/site-packages/lark/parsers/lalr_parser.py", line 193, in parse_from_state
    raise e
  File "venv/lib/python3.8/site-packages/lark/parsers/lalr_parser.py", line 183, in parse_from_state
    for token in state.lexer.lex(state):
  File "venv/lib/python3.8/site-packages/lark/indenter.py", line 45, in _process
    for token in stream:
  File "venv/lib/python3.8/site-packages/lark/lexer.py", line 599, 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: <exception str() failed>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "venv/lib/python3.8/site-packages/gdtoolkit/common/exceptions.py", line 14, in lark_unexpected_token_to_str
    return f"{exception.get_context(code)}\n{exception}"
  File "venv/lib/python3.8/site-packages/lark/exceptions.py", line 256, in __str__
    % (self.token, self.line, self.column, self._format_expected(self.accepts or self.expected)))
  File "venv/lib/python3.8/site-packages/lark/exceptions.py", line 142, in _format_expected
    expected = [d[t_name].user_repr() if t_name in d else t_name for t_name in expected]
  File "venv/lib/python3.8/site-packages/lark/exceptions.py", line 142, in <listcomp>
    expected = [d[t_name].user_repr() if t_name in d else t_name for t_name in expected]
  File "venv/lib/python3.8/site-packages/lark/lexer.py", line 124, in user_repr
    return self.pattern.raw or self.name
AttributeError: 'PatternStr' object has no attribute 'raw'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "venv/bin/gdformat", line 8, in <module>
    sys.exit(main())
  File "venv/lib/python3.8/site-packages/gdtoolkit/formatter/__main__.py", line 78, in main
    _format_files(files, line_length, spaces_for_indent, safety_checks)
  File "venv/lib/python3.8/site-packages/gdtoolkit/formatter/__main__.py", line 167, in _format_files
    success, actually_formatted, formatted_code = _format_code(
  File "venv/lib/python3.8/site-packages/gdtoolkit/formatter/__main__.py", line 233, in _format_code
    lark_unexpected_token_to_str(
  File "venv/lib/python3.8/site-packages/gdtoolkit/common/exceptions.py", line 16, in lark_unexpected_token_to_str
    return f"{exception}".strip()
  File "venv/lib/python3.8/site-packages/lark/exceptions.py", line 256, in __str__
    % (self.token, self.line, self.column, self._format_expected(self.accepts or self.expected)))
  File "venv/lib/python3.8/site-packages/lark/exceptions.py", line 142, in _format_expected
    expected = [d[t_name].user_repr() if t_name in d else t_name for t_name in expected]
  File "venv/lib/python3.8/site-packages/lark/exceptions.py", line 142, in <listcomp>
    expected = [d[t_name].user_repr() if t_name in d else t_name for t_name in expected]
  File "venv/lib/python3.8/site-packages/lark/lexer.py", line 124, in user_repr
    return self.pattern.raw or self.name
AttributeError: 'PatternStr' object has no attribute 'raw'

The latest commit at the time of writing doesn't hit an unhandled exception but still errors:

Unexpected token Token('TYPE_HINT', 'Animal') at line 9, column 17.
Expected one of: 
	* "<<"
	* OR
	* STAR
	* MINUS
	* IN
	* ">="
	* "**"
	* SLASH
	* MORETHAN
	* ">>"
	* IS
	* VBAR
	* "<="
	* "=="
	* IF
	* COLON
	* PLUS
	* "&&"
	* AMPERSAND
	* NOT
	* AS
	* "!="
	* LESSTHAN
	* "||"
	* CIRCUMFLEX
	* PERCENT
	* AND
Previous tokens: [Token('TYPE_HINT', 'not')]

Failure: 1 problem found

domdfcoding avatar Aug 17 '24 13:08 domdfcoding