about summary refs log tree commit diff
path: root/src/libsyntax/parse/lexer/tokentrees.rs
AgeCommit message (Collapse)AuthorLines
2019-11-10move syntax::parse -> librustc_parseMazdak Farrokhzad-280/+0
also move MACRO_ARGUMENTS -> librustc_parse
2019-11-07move PResult to librustc_errorsMazdak Farrokhzad-1/+2
2019-11-07syntax::parser::token -> syntax::tokenMazdak Farrokhzad-1/+1
2019-10-30Reduce ammount of errors given unclosed delimiterEsteban Küber-1/+8
When in a file with a non-terminated item, catch the error and consume the block instead of trying to recover it more granularly in order to reduce the amount of unrelated errors that would be fixed after adding the missing closing brace. Also point out the possible location of the missing closing brace.
2019-10-25move Attribute::with_desugared_doc to librustdocMazdak Farrokhzad-1/+2
2019-10-15Collect occurrences of for mismatched braces diagnosticwangxiangqing-1/+1
Change-Id: I20ba0b62308370ee961141fa1aefc4b9c9f0cb3a
2019-10-13Collect occurrences of for mismatched braces diagnosticwangxiangqing-1/+4
Change-Id: I20ba0b62308370ee961141fa1aefc4b9c9f0cb3a
2019-10-13Collect occurrences of for mismatched braces diagnosticwangxiangqing-2/+16
Change-Id: I20ba0b62308370ee961141fa1aefc4b9c9f0cb3a
2019-08-19glue tokens when building token streamAleksey Kladov-8/+32
2019-08-05add unknown tokenAleksey Kladov-1/+1
2019-07-04don't rely on spans when checking tokens for jointnessAleksey Kladov-12/+18
2019-07-04remove peek_span_src_raw from StringReaderAleksey Kladov-7/+8
2019-06-08syntax: Remove `Deref` impl from `Token`Vadim Petrochenkov-1/+1
2019-06-06syntax: Add some helper methods to `Token`Vadim Petrochenkov-2/+2
2019-06-06syntax: Use `Token` in `StringReader` and `TokenTreesReader`Vadim Petrochenkov-23/+20
2019-06-06syntax: Use `Token` in `TokenTree::Token`Vadim Petrochenkov-1/+1
2019-06-06syntax: Rename `TokenAndSpan` into `Token`Vadim Petrochenkov-2/+2
2019-06-06syntax: Rename `Token` into `TokenKind`Vadim Petrochenkov-1/+1
2019-05-13move raw span to tt readerAleksey Kladov-1/+2
See https://github.com/rust-lang/rust/pull/50838/files#r283296243 for explanation how jointness checking works with *next* pair
2019-05-13move span and token to tt readerAleksey Kladov-26/+34
2019-05-13Move token tree related lexer state to a separate structAleksey Kladov-31/+65
We only used a bunch of fields when tokenizing into a token tree, so let's move them out of the base lexer
2019-02-07Deduplicate mismatched delimiter errorsEsteban Küber-15/+15
Delay unmatched delimiter errors until after the parser has run to deduplicate them when parsing and attempt recovering intelligently.
2019-02-07libsyntax => 2018Taiki Endo-4/+4
2019-01-08Make `TokenStream` less recursive.Nicholas Nethercote-4/+4
`TokenStream` is currently recursive in *two* ways: - the `TokenTree` variant contains a `ThinTokenStream`, which can contain a `TokenStream`; - the `TokenStream` variant contains a `Vec<TokenStream>`. The latter is not necessary and causes significant complexity. This commit replaces it with the simpler `Vec<(TokenTree, IsJoint)>`. This reduces complexity significantly. In particular, `StreamCursor` is eliminated, and `Cursor` becomes much simpler, consisting now of just a `TokenStream` and an index. The commit also removes the `Extend` impl for `TokenStream`, because it is only used in tests. (The commit also removes those tests.) Overall, the commit reduces the number of lines of code by almost 200.
2018-12-25Remove licensesMark Rousskov-10/+0
2018-12-23Rollup merge of #56964 - nnethercote:TokenStream-IsJoint, r=petrochenkovMazdak Farrokhzad-3/+2
Remove `TokenStream::JointTree`. This is done by adding a new `IsJoint` field to `TokenStream::Tree`, which simplifies a lot of `match` statements. And likewise for `CursorKind`. The commit also adds a new method `TokenTree:stream()` which can replace a choice between `.into()` and `.joint()`.
2018-12-20Remove `TokenStream::JointTree`.Nicholas Nethercote-3/+2
This is done by adding a new `IsJoint` field to `TokenStream::Tree`, which simplifies a lot of `match` statements. And likewise for `CursorKind`. The commit also adds a new method `TokenTree:stream()` which can replace a choice between `.into()` and `.joint()`.
2018-12-19Rollup merge of #56910 - estebank:unclosed-eof, r=oli-obkPietro Albini-1/+9
Do not point at delim spans for complete correct blocks Fix #56834.
2018-12-17Do not point at delim spans for complete correct blocksEsteban Küber-1/+9
2018-12-12Rename `TokenStream::concat` and remove `TokenStream::concat_rc_vec`.Nicholas Nethercote-3/+3
`TokenStream::new` is a better name for the former, and the latter is now just equivalent to `TokenStream::Stream`.
2018-12-10Remove `tokenstream::Delimited`.Nicholas Nethercote-4/+5
Because it's an extra type layer that doesn't really help; in a couple of places it actively gets in the way, and overall removing it makes the code nicer. It does, however, move `tokenstream::TokenTree` further away from the `TokenTree` in `quote.rs`. More importantly, this change reduces the size of `TokenStream` from 48 bytes to 40 bytes on x86-64, which is enough to slightly reduce instruction counts on numerous benchmarks, the best by 1.5%. Note that `open_tt` and `close_tt` have gone from being methods on `Delimited` to associated methods of `TokenTree`.
2018-09-09Don't compute padding of braces unless they are unmatchedEsteban Küber-23/+20
2018-09-09Auto merge of #53902 - dtolnay:group, r=petrochenkovbors-3/+3
proc_macro::Group::span_open and span_close Before this addition, every delimited group like `(`...`)` `[`...`]` `{`...`}` has only a single Span that covers the full source location from opening delimiter to closing delimiter. This makes it impossible for a procedural macro to trigger an error pointing to just the opening or closing delimiter. The Rust compiler does not seem to have the same limitation: ```rust mod m { type T = } ``` ```console error: expected type, found `}` --> src/main.rs:3:1 | 3 | } | ^ ``` On that same input, a procedural macro would be forced to trigger the error on the last token inside the block, on the entire block, or on the next token after the block, none of which is really what you want for an error like above. This commit adds `group.span_open()` and `group.span_close()` which access the Span associated with just the opening delimiter and just the closing delimiter of the group. Relevant to Syn as we implement real error messages for when parsing fails in a procedural macro: https://github.com/dtolnay/syn/issues/476. ```diff impl Group { fn span(&self) -> Span; + fn span_open(&self) -> Span; + fn span_close(&self) -> Span; } ``` Fixes #48187 r? @alexcrichton
2018-09-08Track distinct spans for open and close delimiterDavid Tolnay-3/+3
2018-09-05Change wording of unclosed delimiter labelEsteban Küber-1/+4
2018-09-05Provide more context for unenclosed delimitersEsteban Küber-2/+38
* When encountering EOF, point at the last opening brace that does not have the same indentation level as its close delimiter. * When encountering the wrong type of close delimiter, point at the likely correct open delimiter to give a better idea of what went wrong.
2018-09-05Reword un-closed delimiter labelEsteban Küber-2/+2
2018-08-17Rollup merge of #53373 - estebank:unclosed, r=petrochenkovkennytm-11/+19
Tweak unclosed delimiter parser error
2018-08-15Do not emit "incorrect close delimiter" twice in the same placeEsteban Küber-11/+17
2018-08-15Tweak unclosed delimiter parser errorEsteban Küber-2/+4
2018-08-13A few cleanups and minor improvements for the lexerljedrz-0/+5
2018-06-09Crate-ify and delete unused code in syntax::parseMark Simulacrum-1/+1
2018-05-18rustc: Fix joint-ness of stringified token-streamsAlex Crichton-11/+12
This commit fixes `StringReader`'s parsing of tokens which have been stringified through procedural macros. Whether or not a token tree is joint is defined by span information, but when working with procedural macros these spans are often dummy and/or overridden which means that they end up considering all operators joint if they can! The fix here is to track the raw source span as opposed to the overridden span. With this information we can more accurately classify `Punct` structs as either joint or not. Closes #50700
2017-08-30Make fields of `Span` privateVadim Petrochenkov-4/+3
2017-08-15use field init shorthand EVERYWHEREZack M. Davis-1/+1
Like #43008 (f668999), but _much more aggressive_.
2017-06-26Implement `quote!` and other `proc_macro` API.Jeffrey Seyfried-4/+8
2017-03-03Integrate `TokenStream`.Jeffrey Seyfried-13/+11
2017-01-23Remove `open_span` and `close_span` from `Delimited`.Jeffrey Seyfried-5/+1
2017-01-17Introduce `string_reader.parse_all_token_trees()`.Jeffrey Seyfried-0/+138