about summary refs log tree commit diff
path: root/src/libsyntax
AgeCommit message (Collapse)AuthorLines
2016-05-03Rollup merge of #33334 - birkenfeld:issue29088, r=ManishearthManish Goregaokar-5/+4
lexer: do not display char confusingly in error message Current code leads to messages like `... use a \xHH escape: \u{e4}` which is confusing. The printed span already points to the offending character, which should be enough to identify the non-ASCII problem. Fixes: #29088
2016-05-03Rollup merge of #33309 - birkenfeld:pp, r=nrcManish Goregaokar-85/+44
Make libsyntax::print::pp more idiomatic Minor cleanup, and using VecDeque as a ring buffer instead of a vector.
2016-05-02assert we get at least two rendered lines backNiko Matsakis-2/+5
2016-05-02avoid double panicNiko Matsakis-1/+2
2016-05-02do not fail if len(rendered_lines) is == 1Niko Matsakis-10/+14
also handle more rendered-lines
2016-05-02update unit testsNiko Matsakis-39/+38
2016-05-02Finish up with 'old school' error modeJonathan Turner-12/+63
2016-05-02Add back in a 'old school' error formatJonathan Turner-50/+201
2016-05-02change color of warning to YELLOWNiko Matsakis-1/+1
2016-05-02fix snippet tests MORE!Niko Matsakis-2/+2
2016-05-02Nit: use Range::containsNiko Matsakis-7/+3
2016-05-02fix tests betterNiko Matsakis-5/+5
2016-05-02Nit: remove push_primary_span, which was never calledNiko Matsakis-4/+0
2016-05-02Nit: add commentNiko Matsakis-3/+5
2016-05-02only emit `^` at the start of a multi-line errorNiko Matsakis-143/+67
as a result, simplify elision code
2016-05-02Nit: use last_mut betterNiko Matsakis-4/+3
2016-05-02Nit: in emitter.rsNiko Matsakis-2/+1
2016-05-02Nit: address various style nitsNiko Matsakis-5/+10
2016-05-02Nit: do not use RLKNiko Matsakis-12/+14
2016-05-02Nit: do not import variants from StyleNiko Matsakis-24/+23
2016-05-02Do not import variants from RenderedLineKindNiko Matsakis-12/+12
2016-05-02Nit: comments should be uppercase letterNiko Matsakis-4/+4
2016-05-02refactor the Emitter traitNiko Matsakis-98/+74
There is now a CoreEmitter that everything desugars to, but without losing any information. Also remove RenderSpan::FileLine. This lets the rustc_driver tests build.
2016-05-02change errors from Yellow to MagentaNiko Matsakis-1/+1
The Yellow text is very hard to read with a white background.
2016-05-02WIP factor out RudimentaryEmitterNiko Matsakis-16/+31
2016-05-02replace fileline_{help,note} with {help,note}Niko Matsakis-29/+26
The extra filename and line was mainly there to keep the indentation relative to the main snippet; now that this doesn't include filename/line-number as a prefix, it is distracted.
2016-05-02thread tighter span for closures aroundNiko Matsakis-3/+3
Track the span corresponding to the `|...|` part of the closure.
2016-05-02refactor to use new snippet code and modelNiko Matsakis-723/+335
Major changes: - Remove old snippet rendering code and use the new stuff. - Introduce `span_label` method to add a label - Remove EndSpan mode and replace with a fn to get the last character of a span. - Stop using `Option<MultiSpan>` and just use an empty `MultiSpan` - and probably a bunch of other stuff :)
2016-05-02adapt JSON to new modelNiko Matsakis-119/+83
Each Span now carries a `is_primary` boolean along with an optional label. If there are multiple labels for a span, it will appear multiple times.
2016-05-02revamp MultiSpan and introduce new snippet codeNiko Matsakis-135/+1428
MultiSpan model is now: - set of primary spans - set of span+label pairs Primary spans render with `^^^`, secondary spans with `---`. Labels are placed next to the `^^^` or `---` marker as appropriate.
2016-05-02parser: change warning into an error on `T<A=B, C>`Georg Brandl-5/+1
Fixes: #32214
2016-05-02parser: do not try to continue with `unsafe` on foreign fnsGeorg Brandl-1/+1
The changed line makes it look like `unsafe` is allowed, but the first statement of `parse_item_foreign_fn` is: `self.expect_keyword(keywords::Fn)?;` So we get the strange "expected one of `fn`, `pub`, `static`, or `unsafe`, found `unsafe`". Fixes: #27361
2016-05-02lexer: do not display char confusingly in error messageGeorg Brandl-5/+4
Current code leads to messages like "... use a \xHH escape: \u{e4}" which is confusing. The printed span already points to the offending character, which should be enough to identify the non-ASCII problem. Fixes: #29088
2016-05-01parser: fix suppression of syntax errors in range RHSGeorg Brandl-9/+2
Invalid expressions on the RHS were just swallowed without generating an error. The new code more closely mirrors the code for parsing `..x` in the `parse_prefix_range_expr` method, where no cancel is done either. Fixes #33262.
2016-05-01libsyntax/pp: replace manual ring buffer with a VecDequeGeorg Brandl-52/+19
2016-05-01libsyntax/pp: minor modernizationsGeorg Brandl-40/+32
* implement Display on Token instead of custom tok_str() fn * use expression returns * remove redundant parens in asserts * remove "/* bad */" comments that appear to be related to early changes in memory management * and a few individual idiomatic changes
2016-04-30Auto merge of #32846 - jseyfried:allow_unconfigured_gated_expanded_items, r=nrcbors-3/+1
Avoid gated feature checking unconfigured expanded items Avoid gated feature checking unconfigured macro-expanded items (fixes #32840). Unconfigured items that are not macro-expanded are already not gated feature checked. r? @nrc
2016-04-28Rollup merge of #33218 - oli-obk:interned_str_cmp, r=nikomatsakisSteve Klabnik-3/+25
allow InternedString to be compared to &str directly
2016-04-28Auto merge of #33161 - jseyfried:parse_tuple_struct_field_vis, r=nikomatsakisbors-7/+38
Parse `pub(restricted)` visibilities on tuple struct fields Parse `pub(restricted)` on tuple struct fields (cc #32409). r? @nikomatsakis
2016-04-27Auto merge of #32791 - LeoTestard:feature-gate-clean, r=nikomatsakisbors-579/+462
Feature gate clean This PR does a bit of cleaning in the feature-gate-handling code of libsyntax. It also fixes two bugs (#32782 and #32648). Changes include: * Change the way the existing features are declared in `feature_gate.rs`. The array of features and the `Features` struct are now defined together by a single macro. `featureck.py` has been updated accordingly. Note: there are now three different arrays for active, removed and accepted features instead of a single one with a `Status` item to tell wether a feature is active, removed, or accepted. This is mainly due to the way I implemented my macro in the first time and I can switch back to a single array if needed. But an advantage of the way it is now is that when an active feature is used, the parser only searches through the list of active features. It goes through the other arrays only if the feature is not found. I like to think that error checking (in this case, checking that an used feature is active) does not slow down compilation of valid code. :) But this is not very important... * Feature-gate checking pass now use the `Features` structure instead of looking through a string vector. This should speed them up a bit. The construction of the `Features` struct should be faster too since it is build directly when parsing features instead of calling `has_feature` dozens of times. * The MacroVisitor pass has been removed, it was mostly useless since the `#[cfg]-stripping` phase happens before (fixes #32648). The features that must actually be checked before expansion are now checked at the time they are used. This also allows us to check attributes that are generated by macro expansion and not visible to MacroVisitor, but are also removed by macro expansion and thus not visible to PostExpansionVisitor either. This fixes #32782. Note that in order for `#[derive_*]` to be feature-gated but still accepted when generated by `#[derive(Trait)]`, I had to do a little bit of trickery with spans that I'm not totally confident into. Please review that part carefully. (It's in `libsyntax_ext/deriving/mod.rs`.):: Note: this is a [breaking change], since programs with feature-gated attributes on macro-generated macro invocations were not rejected before. For example: ```rust macro_rules! bar ( () => () ); macro_rules! foo ( () => ( #[allow_internal_unstable] //~ ERROR allow_internal_unstable side-steps bar!(); ); ); ``` foo!();
2016-04-27Make some fatal lexer errors recoverablemitaa-67/+108
2016-04-26allow InternedString to be compared to &str directlyOliver Schneider-3/+25
2016-04-25parse `pub(restricted)` visibilities for struct fieldsJeffrey Seyfried-7/+38
2016-04-25Rollup merge of #33041 - petrochenkov:path, r=nrc,ManishearthManish Goregaokar-665/+401
Paths are mostly parsed without taking whitespaces into account, e.g. `std :: vec :: Vec :: new ()` parses successfully, however, there are some special cases involving keywords `super`, `self` and `Self`. For example, `self::` is considered a path start only if there are no spaces between `self` and `::`. These restrictions probably made sense when `self` and friends weren't keywords, but now they are unnecessary. The first two commits remove this special treatment of whitespaces by removing `token::IdentStyle` entirely and therefore fix https://github.com/rust-lang/rust/issues/14109. This change also affects naked `self` and `super` (which are not tightly followed by `::`, obviously) they can now be parsed as paths, however they are still not resolved correctly in imports (cc @jseyfried, see `compile-fail/use-keyword.rs`), so https://github.com/rust-lang/rust/issues/29036 is not completely fixed. The third commit also makes `super`, `self`, `Self` and `static` keywords nominally (before this they acted as keywords for all purposes) and removes most of remaining \"special idents\". The last commit (before tests) contains some small improvements - some qualified paths with type parameters are parsed correctly, `parse_path` is not used for parsing single identifiers, imports are sanity checked for absence of type parameters - such type parameters can be generated by syntax extensions or by macros when https://github.com/rust-lang/rust/issues/10415 is fixed (~~soon!~~already!). This patch changes some pretty basic things in `libsyntax`, like `token::Token` and the keyword list, so it's a plugin-[breaking-change]. r? @eddyb
2016-04-24Remove some old code from libsyntaxVadim Petrochenkov-59/+14
2016-04-24syntax: Make `is_path_start` precise and improve some error messages about ↵Vadim Petrochenkov-35/+62
unexpected tokens
2016-04-24syntax: Check paths in visibilities for type parametersVadim Petrochenkov-83/+83
syntax: Merge PathParsingMode::NoTypesAllowed and PathParsingMode::ImportPrefix syntax: Rename PathParsingMode and its variants to better express their purpose syntax: Remove obsolete error message about 'self lifetime syntax: Remove ALLOW_MODULE_PATHS workaround syntax/resolve: Adjust some error messages resolve: Compare unhygienic (not renamed) names with keywords::Invalid, invalid identifiers may appear to be valid after renaming
2016-04-24syntax: Merge keywords and remaining special idents in one listVadim Petrochenkov-162/+111
Simplify the macro used for generation of keywords Make `Keyword::ident` private
2016-04-24syntax: Don't parse idents with `parse_path`Vadim Petrochenkov-9/+12
Lift some restrictions on type parameters in paths Sanity check import paths for type parameters
2016-04-24syntax: Make static/super/self/Self keywords + special ident cleanupVadim Petrochenkov-148/+100