mirror of https://github.com/rust-lang/rust.git
![]() Lexing precedes parsing, as you'd expect: `Lexer` creates a `TokenStream` and `Parser` then parses that `TokenStream`. But, in a horrendous violation of layering abstractions and common sense, `Lexer` depends on `Parser`! The `Lexer::unclosed_delim_err` method does some error recovery that relies on creating a `Parser` to do some post-processing of the `TokenStream` that the `Lexer` just created. This commit just removes `unclosed_delim_err`. This change removes `Lexer`'s dependency on `Parser`, and also means that `lex_token_tree`'s return value can have a more typical form. The cost is slightly worse error messages in two obscure cases, as shown in these tests: - tests/ui/parser/brace-in-let-chain.rs: there is slightly less explanation in this case involving an extra `{`. - tests/ui/parser/diff-markers/unclosed-delims{,-in-macro}.rs: the diff marker detection is no longer supported (because that detection is implemented in the parser). In my opinion this cost is outweighed by the magnitude of the code cleanup. |
||
---|---|---|
.. | ||
enum-2.rs | ||
enum-2.stderr | ||
enum.rs | ||
enum.stderr | ||
fn-arg.rs | ||
fn-arg.stderr | ||
item-with-attr.rs | ||
item-with-attr.stderr | ||
item.rs | ||
item.stderr | ||
statement.rs | ||
statement.stderr | ||
struct-expr.rs | ||
struct-expr.stderr | ||
struct.rs | ||
struct.stderr | ||
trait-item.rs | ||
trait-item.stderr | ||
tuple-struct.rs | ||
tuple-struct.stderr | ||
unclosed-delims-in-macro.rs | ||
unclosed-delims-in-macro.stderr | ||
unclosed-delims.rs | ||
unclosed-delims.stderr | ||
use-statement.rs | ||
use-statement.stderr |