Commit graph

49 commits

Author SHA1 Message Date
bors
ee7bb94044 Auto merge of #56117 - petrochenkov:iempty, r=eddyb
resolve: Make "empty import canaries" invisible from other crates

Empty imports `use prefix::{};` are desugared into `use prefix::{self as _};` to make sure the prefix is checked for privacy/stability/etc.
This caused issues in cross-crate scenarios because gensyms are lost in crate metadata (the `_` is a gensym).

Fixes https://github.com/rust-lang/rust/issues/55811
2018-11-21 12:54:10 +00:00
Vadim Petrochenkov
1e4cf740cf resolve: Make "empty import canaries" invisible from other crates 2018-11-21 03:59:25 +03:00
Vadim Petrochenkov
d4934c748f Add a couple more tests 2018-11-21 01:28:07 +03:00
Vadim Petrochenkov
1af682a557 Stabilize extern_crate_item_prelude 2018-11-21 01:27:23 +03:00
Vadim Petrochenkov
38025e0dca Fix rebase 2018-11-18 14:41:06 +03:00
Vadim Petrochenkov
139d109241 Add a couple more tests + address review comments 2018-11-18 13:58:40 +03:00
Vadim Petrochenkov
4fc3c13e32 resolve: Avoid sentence breaks in diagnostics 2018-11-18 13:58:36 +03:00
Vadim Petrochenkov
cfd762954b resolve: Tweak some articles in ambiguity diagnostics 2018-11-18 13:57:03 +03:00
Vadim Petrochenkov
f0ea1c6f1e resolve: Improve diagnostics for resolution ambiguities 2018-11-18 13:51:40 +03:00
Felix S. Klock II
a2e090624e Removed #[rustc_error] from tests that are all // compile-pass.
I also added `// skip-codegen` to each one, to address potential concerns
that this change would otherwise slow down our test suite spending time
generating code for files that are really just meant to be checks of
compiler diagnostics.

(However, I will say: My preference is to not use `// skip-codegen` if
one can avoid it. We can use all the testing of how we drive LLVM that
we can get...)

(Updated post rebase.)
2018-11-07 13:09:52 +01:00
Vadim Petrochenkov
dd68685e48 resolve: Fix ICE in macro import error recovery 2018-10-30 00:21:39 +03:00
Vadim Petrochenkov
acdbd0643c resolve: More precise spans for privacy errors 2018-10-28 02:56:12 +03:00
Vadim Petrochenkov
b45b4daba7 resolve: Absolute paths may be undetermined on 2018 edition
due to macro-expanded `extern crate` items adding names to extern prelude.
2018-10-28 02:56:11 +03:00
Vadim Petrochenkov
d1e337bded Prohibit macro-expanded extern crate items shadowing crates passed with --extern 2018-10-24 01:33:35 +03:00
Vadim Petrochenkov
faefc83a7a Feature gate extern prelude additions from extern crate items
Fix rustdoc and fulldeps tests
2018-10-24 00:14:50 +03:00
Vadim Petrochenkov
0f625ac48d Add extern crate items to extern prelude 2018-10-24 00:14:50 +03:00
François Mockers
2ba567fc27 fix other tests failing due to change in case or new suggestion for extern crate 2018-10-17 01:21:40 +02:00
Vadim Petrochenkov
0d8e9cd4df Reapply the macro_rules disambiguation changes from master 2018-10-05 11:46:12 +04:00
Vadim Petrochenkov
050bd32958 resolve: Merge resolution for macro_rules into the common early in-scope resolution function
`fn resolve_legacy_scope`/`fn resolve_lexical_macro_path_segment` -> `fn early_resolve_ident_in_lexical_scope`
2018-10-05 11:40:40 +04:00
Vadim Petrochenkov
078fc52cbc resolve: Prefer macro_rules definitions to in-module macro definitions in some cases 2018-10-03 16:12:39 +04:00
Diogo Sousa
2d7edf908d Use full name to identify a macro in a FileName.
Before this two macros with same name would be indistinguishable inside a
`FileName`.  This caused a bug in incremental compilation (see #53097) since
two different macros would map out to the same `StableFilemapId`.

Fixes #53097.
2018-09-19 01:12:13 +01:00
Vadim Petrochenkov
2dce3779bb resolve: More precise spans for ambiguous resolution errors
Add labels to ambiguous resolution errors
2018-09-08 14:15:11 +03:00
Vadim Petrochenkov
c56adf6413 cleanup: Add main functions to some UI tests 2018-08-31 18:56:15 +03:00
Vadim Petrochenkov
77f2a2fe35 Turn the error for module-relative access to macro-expanded macro_export macros into a deprecation lint 2018-08-24 02:51:41 +03:00
bors
24bc544db4 Auto merge of #53509 - petrochenkov:wildregr, r=alexcrichton
resolve: Reject some inaccessible candidates sooner during import resolution

This allows import resolution to progress in cases like #53140

Fixes #53140
2018-08-22 06:54:22 +00:00
bors
d0d81b7fc1 Auto merge of #53471 - petrochenkov:biattr2, r=oli-obk
resolve: Some macro resolution refactoring

Work towards completing https://github.com/rust-lang/rust/pull/50911#issuecomment-411605393

The last commit also fixes https://github.com/rust-lang/rust/issues/53269 by not using `def_id()` on `Def::Err` and also fixes https://github.com/rust-lang/rust/issues/53512.
2018-08-21 20:33:31 +00:00
Vadim Petrochenkov
82619ea2bd resolve: Unify reporting of ambiguity errors for macro paths 2018-08-21 01:01:50 +03:00
Vadim Petrochenkov
c2788a88ca resolve: Refactor away MacroBinding
`fn resolve_legacy_scope` can now resolve only to `macro_rules!` items,
`fn resolve_lexical_macro_path_segment` is for everything else - modularized macros, preludes
2018-08-20 23:56:48 +03:00
Vadim Petrochenkov
7b47fd793f resolve: Reject some inaccessible candidates sooner during import resolution
This allows import resolution to progress in cases like #53140
2018-08-20 00:07:08 +03:00
Matthias Krüger
71120ef1e5 Fix typos found by codespell. 2018-08-19 17:41:28 +02:00
Vadim Petrochenkov
a0958048b6 Stabilize use_extern_macros 2018-08-17 13:14:26 +03:00
David Wood
3fc7ab2373
Merged migrated compile-fail tests and ui tests. Fixes #46841. 2018-08-14 11:12:09 +02:00
Vadim Petrochenkov
dd0a766e06 Prohibit using macro-expanded macro_export macros through module-relative paths 2018-08-12 22:07:09 +03:00
Vadim Petrochenkov
cb64672e0c Enable macro modularization implicitly if one of "advanced" macro features is enabled
Do not mark all builtin attributes as used when macro modularization is enabled
2018-08-06 23:22:31 +03:00
Vadim Petrochenkov
44422409a4 resolve: Modularize crate-local #[macro_export] macro_rules 2018-07-29 19:30:13 +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
d1b027421e Turn deprecation lint legacy_imports into a hard error 2018-05-15 02:25:04 +03:00
Sergio Benitez
f756b072b3 Don't feature gate bang macros on 'proc_macro_path_invoc'. 2018-04-27 21:32:41 -07:00
Alex Crichton
79630d4fdf rustc: Tweak custom attribute capabilities
This commit starts to lay some groundwork for the stabilization of custom
attribute invocations and general procedural macros. It applies a number of
changes discussed on [internals] as well as a [recent issue][issue], namely:

* The path used to specify a custom attribute must be of length one and cannot
  be a global path. This'll help future-proof us against any ambiguities and
  give us more time to settle the precise syntax. In the meantime though a bare
  identifier can be used and imported to invoke a custom attribute macro. A new
  feature gate, `proc_macro_path_invoc`, was added to gate multi-segment paths
  and absolute paths.

* The set of items which can be annotated by a custom procedural attribute has
  been restricted. Statements, expressions, and modules are disallowed behind
  two new feature gates: `proc_macro_expr` and `proc_macro_mod`.

* The input to procedural macro attributes has been restricted and adjusted.
  Today an invocation like `#[foo(bar)]` will receive `(bar)` as the input token
  stream, but after this PR it will only receive `bar` (the delimiters were
  removed). Invocations like `#[foo]` are still allowed and will be invoked in
  the same way as `#[foo()]`. This is a **breaking change** for all nightly
  users as the syntax coming in to procedural macros will be tweaked slightly.

* Procedural macros (`foo!()` style) can only be expanded to item-like items by
  default. A separate feature gate, `proc_macro_non_items`, is required to
  expand to items like expressions, statements, etc.

Closes #50038

[internals]: https://internals.rust-lang.org/t/help-stabilize-a-subset-of-macros-2-0/7252
[issue]: https://github.com/rust-lang/rust/issues/50038
2018-04-20 19:56:16 -07:00
Eric Huss
6aa4dcb9cf Add empty main() to tests where it is missing. 2018-03-14 12:23:28 -07:00
Eric Huss
b4b7ccbd1c Add crate name to "main function not found" error message.
Fixes #44798 and rust-lang/cargo#4948.
2018-03-14 11:40:13 -07:00
Guillaume Gomez
2e104a77cf update tests 2018-03-14 00:53:24 +01:00
Vadim Petrochenkov
7ba5fd168a Update UI tests 2018-02-26 20:24:42 +03:00
Vadim Petrochenkov
fa2d9fc4b9 Update UI tests 2018-02-26 20:24:02 +03:00
Guillaume Gomez
5747fd6611 Update ui tests 2018-02-25 12:15:05 +01:00
Andy Russell
043d4615f2
use correct casing for rename suggestions
If the original name is uppercase, use camel case. Otherwise, use snake
case.
2018-01-28 20:48:54 -05:00
Guillaume Gomez
f66e711f8b Add E0659 for ambiguous names 2018-01-18 10:01:21 +01:00
Vadim Petrochenkov
1f5b201aff Remove NOTE/HELP annotations from UI tests 2017-12-14 23:26:39 +03:00
Vadim Petrochenkov
d4e51a8fb2 Move compile-fail tests with NOTE/HELP annotations to UI 2017-12-14 23:23:07 +03:00