User: juuz Date: 13 Apr 26 19:23 Revision: d3067241bcded304433a427a78ac6491eae8efeb Summary: Fix valid class tweaker files initially erroring until reopened (#2608) * Fix valid class tweaker files initially erroring until reopened The slightly hacky fix utilises a "fake token" that matches real-looking line starts. It's unused in the parser so the user will still see an error when possible, but eliminating the BAD_CHARACTER inputs for valid *characters* seems to fix the incorrect error highlighting. * CtParser: Make invalid_entry_start_holder private to remove unused PSI itf * Clarify comment TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10510&personal=false Index: src/main/grammars/CtLexer.flex =================================================================== --- src/main/grammars/CtLexer.flex (revision 6ad3fd78748db020eeac7c651cbe9dcd09f6df89) +++ src/main/grammars/CtLexer.flex (revision d3067241bcded304433a427a78ac6491eae8efeb) @@ -62,6 +62,7 @@ ACCESS_ELEMENT=accessible|transitive-accessible|extendable|transitive-extendable|mutable|transitive-mutable INJECT_INTERFACE_ELEMENT=inject-interface|transitive-inject-interface EXTEND_ENUM_ELEMENT=extend-enum|transitive-extend-enum +INCOMPLETE_ENTRY_START=[a-zA-Z-]+ CLASS_ELEMENT=class METHOD_ELEMENT=method FIELD_ELEMENT=field @@ -78,6 +79,9 @@ {ACCESS_ELEMENT} { yybegin(AW_ENTRY); return ACCESS_ELEMENT; } {INJECT_INTERFACE_ELEMENT} { yybegin(ITF_ENTRY_KEY); return INJECT_INTERFACE_ELEMENT; } {EXTEND_ENUM_ELEMENT} { yybegin(ENUM_NAME); return EXTEND_ENUM_ELEMENT; } + // Create tokens for incomplete or invalid inputs too if they look like real inputs (same characters) + // to prevent a bug where the entire file is erroring until reopened. + {INCOMPLETE_ENTRY_START} { return INCOMPLETE_ENTRY_START; } }
{ Index: src/main/grammars/CtParser.bnf =================================================================== --- src/main/grammars/CtParser.bnf (revision 6ad3fd78748db020eeac7c651cbe9dcd09f6df89) +++ src/main/grammars/CtParser.bnf (revision d3067241bcded304433a427a78ac6491eae8efeb) @@ -136,3 +136,6 @@ signature ::= CLASS_NAME_ELEMENT (LESS_THAN signature_element+ GREATER_THAN)? signature_element ::= OPEN_BRACKET* (PRIMITIVE | TYPE_VARIABLE | signature_class_element) signature_class_element ::= ASTERISK | ( (PLUS | MINUS)? SIGNATURE_CLASS_VALUE_START (LESS_THAN signature_element GREATER_THAN)? SIGNATURE_CLASS_VALUE_END ) + +// Unused rule to generate the INCOMPLETE_ENTRY_START token type used in the lexer. +private incomplete_entry_start_holder ::= INCOMPLETE_ENTRY_START