Commit graph

1482 commits

Author SHA1 Message Date
bors
970102f24c Auto merge of #52589 - petrochenkov:derlint, r=alexcrichton
Attach deprecation lint `proc_macro_derive_resolution_fallback` to a specific node id

So it can be `allow`-ed from inside the derive.

cc https://github.com/rust-lang/rust/pull/51952
2018-07-23 11:39:50 +00:00
bors
02b0479c26 Auto merge of #52568 - oli-obk:span_bug_error, r=varkor
Fix loop label resolution around constants

And make `delay_span_bug` a little more helpful

r? @varkor

fixes #52442
fixes #52443
2018-07-23 01:02:32 +00:00
Vadim Petrochenkov
79b5ebf576 Attach deprecation lint proc_macro_derive_resolution_fallback to a specific node id 2018-07-21 22:07:34 +03:00
Oliver Schneider
e93635325b Properly scope label resolution 2018-07-20 16:18:22 +02:00
Vadim Petrochenkov
e7aeb2b1c7 resolve: Add more comments to in-module resolution 2018-07-20 12:22:25 +03:00
Vadim Petrochenkov
32453db332 resolve: Fully prohibit shadowing of in-scope names by globs in macro paths 2018-07-20 12:22:24 +03:00
Vadim Petrochenkov
2eb83ee527 data_structures: Add a reference wrapper for pointer-indexed maps/sets
Use `ptr::eq` for comparing pointers
2018-07-20 12:22:24 +03:00
Vadim Petrochenkov
414a86e759 resolve: Add some comments to in-module resolution 2018-07-20 12:22:24 +03:00
Vadim Petrochenkov
c2533b64a3 resolve: Remove SingleImports in favor of a simple set 2018-07-20 12:22:24 +03:00
Vadim Petrochenkov
22143491bc resolve: Rename global_macros to macro_prelude
Rename `shadows_glob` to `shadowed_glob`
2018-07-20 12:22:24 +03:00
Vadim Petrochenkov
c44f72430c resolve: Remove unused parameter from resolve_ident_in_module 2018-07-20 12:22:24 +03:00
bors
c7cba3d33f Auto merge of #52024 - oli-obk:existential_parse, r=nikomatsakis
Implement existential types

(not for associated types yet)

r? @nikomatsakis

cc @Centril @varkor @alexreg
2018-07-19 21:14:01 +00:00
Oliver Schneider
53d2ebb0ad Implement existential types 2018-07-18 10:53:08 +02:00
Alex Crichton
bb2398f8e9 rustc: Fix a suggestion for the proc_macro feature
This feature is stable, we shouldn't suggest it any more! Instead suggest the
real feature, `use_extern_macros`.
2018-07-17 07:14:54 -07:00
Alex Crichton
65f3007fa8 rustc: Stabilize much of the proc_macro feature
This commit stabilizes some of the `proc_macro` language feature as well as a
number of APIs in the `proc_macro` crate as [previously discussed][1]. This
means that on stable Rust you can now define custom procedural macros which
operate as attributes attached to items or `macro_rules!`-like bang-style
invocations. This extends the suite of currently stable procedural macros,
custom derives, with custom attributes and custom bang macros.

Note though that despite the stabilization in this commit procedural macros are
still not usable on stable Rust. To stabilize that we'll need to stabilize at
least part of the `use_extern_macros` feature. Currently you can define a
procedural macro attribute but you can't import it to call it!

A summary of the changes made in this PR (as well as the various consequences)
is:

* The `proc_macro` language and library features are now stable.
* Other APIs not stabilized in the `proc_macro` crate are now named under a
  different feature, such as `proc_macro_diagnostic` or `proc_macro_span`.
* A few checks in resolution for `proc_macro` being enabled have switched over
  to `use_extern_macros` being enabled. This means that code using
  `#![feature(proc_macro)]` today will likely need to move to
  `#![feature(use_extern_macros)]`.

It's intended that this PR, once landed, will be followed up with an attempt to
stabilize a small slice of `use_extern_macros` just for procedural macros to
make this feature 100% usable on stable.

[1]: https://internals.rust-lang.org/t/help-stabilize-a-subset-of-macros-2-0/7252
2018-07-16 07:58:06 -07:00
bors
82e5c9c8e2 Auto merge of #52383 - petrochenkov:pmns, r=alexcrichton
resolve: Functions introducing procedural macros reserve a slot in the macro namespace as well

Similarly to https://github.com/rust-lang/rust/pull/52234, this gives us symmetry between internal and external views of a crate, but in this case it's always an error to call a procedural macro in the same crate in which it's defined.

Closes https://github.com/rust-lang/rust/issues/52225
2018-07-15 19:35:06 +00:00
Vadim Petrochenkov
431aefb2d4 Functions introducing procedural macros reserve a slot in the macro namespace as well 2018-07-14 20:10:07 +03:00
Vadim Petrochenkov
4d1a30c92b Remove most of PartialEq impls from AST and HIR structures 2018-07-14 14:56:57 +03:00
Alex Crichton
0b969a9d68 rustc: Lint against #[macro_use] in 2018 idioms
This commit adds a lint to the compiler to warn against the `#[macro_use]`
directive as part of the `rust_2018_idioms` lint. This lint is turned off by
default and is only enabled when the `use_extern_macros` feature is also
enabled.

The lint here isn't fully fleshed out as it's just a simple warning rather than
suggestions of how to actually import the macro, but hopefully it's a good base
to start from!

cc #52043
2018-07-12 14:10:39 -07:00
kennytm
9fc126c375
Rollup merge of #52287 - ljedrz:dyn_librustc_resolve, r=petrochenkov
Deny bare trait objects in src/librustc_resolve

Enforce `#![deny(bare_trait_objects)]` in `src/librustc_resolve`.
2018-07-12 20:25:30 +08:00
bors
d334027c58 Auto merge of #52230 - alexcrichton:attr-and-derive, r=petrochenkov
rustc: Search all derives for inert attributes

This commit fixes an apparent mistake in librustc_resolve where when the
`proc_macro` feature is enabled (or `rust_2018_preview`) the resolution of
custom attributes for custom derive was tweaked. Previously when an attribute
failed to resolve it was attempted to locate if there is a custom derive also in
scope which declares the attribute, but only the first custom derive directive
was search.

Instead this commit fixes the loop to search all custom derive invocations
looking for any which register the attribute in question.

Closes #52219
2018-07-12 10:16:19 +00:00
ljedrz
8fecbe3e78 Deny bare trait objects in src/librustc_resolve 2018-07-12 10:15:35 +02:00
Mark Rousskov
322632ac10
Rollup merge of #51952 - petrochenkov:transmark, r=alexcrichton
hygiene: Decouple transparencies from expansion IDs

And remove fallback to parent modules during resolution of names in scope.

This is a breaking change for users of unstable macros 2.0 (both procedural and declarative), code like this:
```rust
#![feature(decl_macro)]

macro m($S: ident) {
    struct $S;
    mod m {
        type A = $S;
    }
}

fn main() {
    m!(S);
}
```
or equivalent
```rust
#![feature(decl_macro)]

macro m($S: ident) {
    mod m {
        type A = $S;
    }
}

fn main() {
    struct S;
    m!(S);
}
```
stops working due to module boundaries being properly enforced.

For proc macro derives this is still reported as a compatibility warning to give `actix_derive`, `diesel_derives` and `palette_derive` time to fix their issues.

Fixes https://github.com/rust-lang/rust/issues/50504 in accordance with [this comment](https://github.com/rust-lang/rust/issues/50504#issuecomment-399764767).
2018-07-11 12:38:33 -06:00
Felix Rabe
299ee4798c
Fix typo in E0433 docs 2018-07-11 07:43:10 +02:00
Alex Crichton
743a8171a9 rustc: Search all derives for inert attributes
This commit fixes an apparent mistake in librustc_resolve where when the
`proc_macro` feature is enabled (or `rust_2018_preview`) the resolution of
custom attributes for custom derive was tweaked. Previously when an attribute
failed to resolve it was attempted to locate if there is a custom derive also in
scope which declares the attribute, but only the first custom derive directive
was search.

Instead this commit fixes the loop to search all custom derive invocations
looking for any which register the attribute in question.

Closes #52219
2018-07-10 15:09:01 -07:00
Zack M. Davis
96b151bd9c in which use suggestions meet edition 2018
The intent here is to resolve #52202.
2018-07-09 23:21:29 -07:00
Vadim Petrochenkov
fc74e35981 Remove fallback to parent modules from lexical resolution 2018-07-08 18:16:09 +03:00
Vadim Petrochenkov
94ef9f57f5 hygiene: Decouple transparencies from expansion IDs 2018-07-08 16:17:37 +03:00
Takanori Ishibashi
2e8d9d7a25 absoluate -> absolute 2018-07-01 17:37:42 +09:00
bors
bfc1ee4968 Auto merge of #51762 - petrochenkov:oh-hi-mark, r=oli-obk
hygiene: Implement transparent marks and use them for call-site hygiene in proc-macros

Fixes https://github.com/rust-lang/rust/issues/50050
2018-06-30 09:19:21 +00:00
bors
acf50b79be Auto merge of #51806 - oli-obk:lowering_cleanups1, r=cramertj
Lowering cleanups [1/N]
2018-06-30 07:10:18 +00:00
Vadim Petrochenkov
84f1bc8b66 Address comments 2018-06-30 01:53:32 +03:00
Vadim Petrochenkov
b69d51162b Restore the old behavior of $crate in nested macro_rules
`$crate` is not resolved at def-site of a macro, but rather at "transitive def-site"
2018-06-30 01:53:32 +03:00
Vadim Petrochenkov
9f92fce77c Fortify dummy span checking 2018-06-30 01:53:32 +03:00
Vadim Petrochenkov
99ecdb3f5f hygiene: Implement transparent marks 2018-06-30 01:53:32 +03:00
Vadim Petrochenkov
09856c85b7 expansion: Give names to some fields of SyntaxExtension 2018-06-30 01:53:32 +03:00
Vadim Petrochenkov
1328bdeef8 resolve: Cleanup resolve_crate_root 2018-06-30 01:53:32 +03:00
Vadim Petrochenkov
d7072b5bb4 Fix rebase 2018-06-28 11:04:51 +03:00
Vadim Petrochenkov
f0622dfe5d Use Idents for associated item definitions in HIR
Remove emulation of hygiene with gensyms
2018-06-28 11:04:50 +03:00
Vadim Petrochenkov
e8215a4f6f Use Idents for path segments in HIR 2018-06-28 11:04:50 +03:00
Vadim Petrochenkov
d347270e0c Implement #[macro_export(local_inner_macros)] 2018-06-27 13:10:16 +03:00
Oliver Schneider
9eb75613f0 Generate DefIds for the impl trait of async functions 2018-06-27 11:17:55 +02:00
Vadim Petrochenkov
fffe9fbb51 hygiene: More descriptive names for things involved in late hygienic name resolution 2018-06-23 20:09:21 +03:00
Vadim Petrochenkov
a12726460e expansion: Rename Expansion to AstFragment 2018-06-23 20:09:21 +03:00
Vadim Petrochenkov
869fa27d13 hygiene: Rename MarkKind to Transparency
Move `is_builtin` for `Mark` to a separate flag
2018-06-23 20:09:21 +03:00
Taylor Cramer
85e4866320 PathParameters -> GenericArgs fixes 2018-06-21 23:24:51 -07:00
Taylor Cramer
083a7eaa1a Add path parameters to std_path 2018-06-21 22:38:06 -07:00
Taylor Cramer
d64e577fa3 Async methods 2018-06-21 22:38:05 -07:00
Taylor Cramer
cf844b547d async await desugaring and tests 2018-06-21 22:36:36 -07:00
varkor
991efa4284 Address various comments 2018-06-20 12:23:33 +01:00