1306 Commits

Author SHA1 Message Date
Alex Crichton
f7706d5816 Rollup merge of #47705 - pietroalbini:fix-47673, r=petrochenkov
Fix ICE when use trees have multiple empty nested groups

The issue was caused by an oversight of mine in the original use_nested_groups PR, where different paths were resolved with the same `NodeId` in some cases (such as in `use {{}, {}};`).

Fixes #47673
r? @petrochenkov
2018-01-25 13:49:53 -08:00
Alex Crichton
98b375483c Rollup merge of #47502 - petrochenkov:label, r=eddyb
AST/HIR: Add a separate structure for labels
2018-01-25 12:48:49 -06:00
Pietro Albini
0847ac0265
Fix wrong span for nested empty groups 2018-01-24 23:46:02 +01:00
Pietro Albini
5faba281ad
Fix ICE when use trees have multiple empty nested groups 2018-01-24 13:13:39 +01:00
Vadim Petrochenkov
2d56abfbeb AST/HIR: Add a separate structure for labels 2018-01-22 23:13:12 +03:00
Manish Goregaokar
dc5475257f Review fixes 2018-01-22 15:29:34 +05:30
Manish Goregaokar
00ce770e34 Store a list of local macros on the resolver; use for resolving intra-doc macro links 2018-01-22 15:24:30 +05:30
Manish Goregaokar
7ac48d793b Resolve foreign macros 2018-01-22 15:24:29 +05:30
Manish Goregaokar
c0af89723d Fix tidy 2018-01-22 15:24:29 +05:30
Manish Goregaokar
4f10f676d9 Handle relative paths 2018-01-22 15:24:29 +05:30
Manish Goregaokar
140e77f71d Make resolve_hir_path and resolve_str_path fallible 2018-01-22 15:24:28 +05:30
Guillaume Gomez
a1c3449a9c Rollup merge of #47512 - GuillaumeGomez:e0659, r=petrochenkov
Add E0659 for ambiguous names

Still on the tracks of the "no error without error code" road.
2018-01-21 23:11:39 +01:00
bors
97520ccb10 Auto merge of #47116 - estebank:non-accessible-ctor, r=petrochenkov
Tweaks to invalid ctor messages

 - Do not suggest using a constructor that isn't accessible
 - Suggest the appropriate syntax (`()`/`{}` as appropriate)
 - Add note when trying to use `Self` as a ctor

CC #22488, fix #47085.
2018-01-21 16:52:09 +00:00
Esteban Küber
067405044c Fix tests by keepeing needed suggestions 2018-01-20 12:02:40 -08:00
Zack M. Davis
14982db2d6 in which the unused-parens lint comes to cover function and method args
Resolves #46137.
2018-01-18 08:33:58 -08:00
Guillaume Gomez
f66e711f8b Add E0659 for ambiguous names 2018-01-18 10:01:21 +01:00
kennytm
fb1f01dc05 Rollup merge of #47498 - dominikWin:missing-module-name, r=petrochenkov
Make non-found module name optional

No longer uses a magic string for missing or root module.
2018-01-18 01:57:29 +08:00
kennytm
4cb87899d9 Rollup merge of #47444 - etaoins:dont-include-bang-in-macro-suggestion, r=estebank
Don't include bang in macro replacement suggestion

When we suggest the replacement for a macro we include the "!" in the suggested replacement but the span only contains the name of the macro itself. Using that replacement would cause a duplicate "!" in the resulting code.

I originally tried to extend the span to be replaced by 1 byte in rust-lang/rust#47424. However, @zackmdavis pointed out that there can be whitespace between the macro name and the bang.

Instead, just remove the bang from the suggested replacement.

Fixes #47418

r? @estebank
2018-01-18 01:57:20 +08:00
Dominik Winecki
1dcfd144b9 Make non-found module name optional
No longer uses a magic string for missing or root module.
2018-01-16 14:47:14 -05:00
Esteban Küber
282f75a4ce Review comments: remove enum suggestion 2018-01-15 15:20:48 -08:00
Esteban Küber
4a7691692c Further tweaks to the output
- Properly address Variant Ctors
- Show signature if span of trait method without `self` is not available
2018-01-15 12:35:15 -08:00
Carol (Nichols || Goulding)
e168aa385b
Reexport -> re-export in prose and documentation comments 2018-01-15 13:36:53 -05:00
Carol (Nichols || Goulding)
90fcd4476c
Reexport -> re-export in error messages 2018-01-15 13:36:52 -05:00
Esteban Küber
445f339ba9 address review comments 2018-01-15 02:03:03 -08:00
Esteban Küber
38546ba9fa Add note when trying to use Self as a ctor 2018-01-15 02:03:03 -08:00
Esteban Küber
ce9ef37fe6 Readd suggestion in enum variants with incorrect args 2018-01-15 02:03:03 -08:00
Esteban Küber
a317da42b1 Suggest the correct syntax for different struct types 2018-01-15 02:03:02 -08:00
Esteban Küber
9bab0f09d3 Hide suggestion to use struct ctor when it is not visible 2018-01-15 02:03:02 -08:00
Ryan Cumming
ecd47a91c7 Don't include bang in macro replacement suggestion
When we suggest the replacement for a macro we include the "!" in the
suggested replacement but the span only contains the name of the macro
itself. Using that replacement would cause a duplicate "!" in the
resulting code.

I originally tried to extend the span to be replaced by 1 byte in
rust-lang/rust#47424. However, @zackmdavis pointed out that there can be
whitespace between the macro name and the bang.

Instead, just remove the bang from the suggested replacement.

Fixes #47418
2018-01-15 18:09:52 +11:00
leonardo.yvens
f93183adb4 Remove impl Foo for .. in favor of auto trait Foo
No longer parse it.
Remove AutoTrait variant from AST and HIR.
Remove backwards compatibility lint.
Remove coherence checks, they make no sense for the new syntax.
Remove from rustdoc.
2018-01-13 18:48:00 +03:00
bors
ca092937aa Auto merge of #47181 - michaelwoerister:var-len-def-index, r=eddyb
Use DefIndex encoding that works better with on-disk variable length integer representations.

Use the least instead of the most significant bit for representing the address space.

r? @eddyb
2018-01-13 09:11:59 +00:00
bors
0b90e4e8cd Auto merge of #46551 - jseyfried:improve_legacy_modern_macro_interaction, r=nrc
macros: improve 1.0/2.0 interaction

This PR supports using unhygienic macros from hygienic macros without breaking the latter's hygiene.
```rust
// crate A:
#[macro_export]
macro_rules! m1 { () => {
    f(); // unhygienic: this macro needs `f` in its environment
    fn g() {} // (1) unhygienic: `g` is usable outside the macro definition
} }

// crate B:
#![feature(decl_macro)]
extern crate A;
use A::m1;

macro m2() {
    fn f() {} // (2)
    m1!(); // After this PR, `f()` in the expansion resolves to (2), not (3)
    g(); // After this PR, this resolves to `fn g() {}` from the above expansion.
         // Today, it is a resolution error.
}

fn test() {
    fn f() {} // (3)
    m2!(); // Today, `m2!()` can see (3) even though it should be hygienic.
    fn g() {} // Today, this conflicts with `fn g() {}` from the expansion, even though it should be hygienic.
}
```

Once this PR lands, you can make an existing unhygienic macro hygienic by wrapping it in a hygienic macro. There is an [example](b766fa887d) of this in the tests.

r? @nrc
2018-01-12 10:00:09 +00:00
Michael Woerister
c9d25e3269 Use different DefIndex representation that is better suited for variable length integer encodings. 2018-01-08 14:15:17 +01:00
Malo Jaffré
3f073c409a Try to fix a perf regression by updating log
Upgrade `log` to `0.4` in multiple crates.
2018-01-07 16:54:05 +01:00
bors
a704583d43 Auto merge of #47156 - petrochenkov:extpath, r=nikomatsakis
Support `extern` in paths

Implement the primary alternative to https://github.com/rust-lang/rust/pull/46613 + https://github.com/rust-lang/rust/pull/45771, achieving the same effect without requiring changes to other imports.
Both need to be experimentally evaluated before making further progress.

The PR also adds docs for all these related features into the unstable book.

cc https://github.com/rust-lang/rust/issues/44660
r? @nikomatsakis
2018-01-07 00:51:42 +00:00
kennytm
b63f89783d Rollup merge of #47170 - eddyb:us-vs-usize, r=nikomatsakis
rustc: use {U,I}size instead of {U,I}s shorthands.

`Us`/`Is` come from a time when `us` and `is` were the literal suffixes that are now `usize` / `isize`.

r? @nikomatsakis
2018-01-07 02:36:02 +08:00
Alex Crichton
8c9bf663d4 rustc: Don't use relative paths for extended errors
These no longer work now that Cargo changes the cwd of rustc while it's running.
Instead use an absolute path that's set by rustbuild.
2018-01-04 07:21:22 -08:00
Eduard-Mihai Burtescu
210ac01792 rustc: use {U,I}size instead of {U,I}s shorthands. 2018-01-04 03:12:04 +02:00
Vadim Petrochenkov
32db83b16e Support extern in paths 2018-01-03 18:09:20 +03:00
bors
b24d12e622 Auto merge of #47031 - topecongiro:issue-41719, r=jseyfried
Report an error when resolving non-ident macro path failed

Closes #41719.

Please feel free to bikeshed on the error message.
2017-12-28 10:28:16 +00:00
Seiichi Uchida
d882691046 Prefer to use attr::contains_name() and attr::find_by_name() 2017-12-28 12:32:24 +09:00
topecongiro
d1b287cf32 Report an error when resolving non-ident macro path failed 2017-12-28 00:46:27 +09:00
bors
1699293083 Auto merge of #46864 - estebank:closure-type-err-sp, r=nikomatsakis
Closure type error ui tweak

Do not point at the same span on all notes/help messages, and instead
show them without a span.
2017-12-23 04:40:39 +00:00
Jonas Platte
78493ed21a Add GenericParam, refactor Generics in ast, hir, rustdoc
The Generics now contain one Vec of an enum for the generic parameters,
rather than two separate Vec's for lifetime and type parameters.

Additionally, places that previously used Vec<LifetimeDef> now use
Vec<GenericParam> instead.
2017-12-21 13:38:10 +01:00
Esteban Küber
eed98d55fb Various tweaks 2017-12-20 11:03:26 -08:00
Esteban Küber
61181aeead Point at def span on redefined name diagnostic 2017-12-17 22:44:32 -08:00
Alex Burka
aaeae4c72e error for impl trait alias 2017-12-14 12:56:26 -05:00
Alex Burka
f1c4a922fe stub out trait aliases in resolve 2017-12-14 12:56:26 -05:00
Jeffrey Seyfried
d052d28d70 Improve interaction between macros 2.0 and macro_rules!. 2017-12-13 13:33:03 -08:00
bors
3dfbc88a62 Auto merge of #46550 - jseyfried:cleanup_builtin_hygiene, r=nrc
macros: hygienize use of `core`/`std` in builtin macros

Today, if a builtin macro wants to access an item from `core` or `std` (depending `#![no_std]`), it generates `::core::path::to::item` or `::std::path::to::item` respectively (c.f. `fn std_path()` in `libsyntax/ext/base.rs`).

This PR refactors the builtin macros to instead always emit `$crate::path::to::item` here. That is, the def site of builtin macros is taken to be in `extern crate core;` or `extern crate std;`. Since builtin macros are macros 1.0 (i.e. mostly unhygienic), changing the def site can only effect the resolution of `$crate`.

r? @nrc
2017-12-13 11:09:55 +00:00