Commit Graph

836 Commits

Author SHA1 Message Date
Jeffrey Seyfried
54cd4d1472 Add and use resolve_name_in_lexical_scope and
exclude the prelude from `resolve_name(.., allow_private_imports = true)`.
2016-03-25 22:22:15 +00:00
Jeffrey Seyfried
5a8845e40b Refactor away DefModifiers::PRELUDE 2016-03-25 22:22:15 +00:00
Jeffrey Seyfried
febef471e3 Refactor how the prelude is handled 2016-03-25 22:22:12 +00:00
Vadim Petrochenkov
b418cd2306 Cleanup
+ Fix a comment and add a test based on it
2016-03-25 00:41:09 +03:00
Vadim Petrochenkov
77f033bac1 Lift the restriction on reusing names of primitive types 2016-03-25 00:41:09 +03:00
Vadim Petrochenkov
8d4b1d1cf3 Introduce name resolution fallback for primitive types 2016-03-25 00:41:09 +03:00
Felix S. Klock II
213d57983d Expose attached attributes to FnKind abstraction so that I can look at them in borrowck. 2016-03-21 18:36:22 +01:00
tiehuis
1138866b1f Alter E0412 help message wording
The initial wording does not make sense due to an extra 'to'.

There are two potential candidates we can change this to:
 - 'you can import it into scope'
 - 'to import it into scope'

In keeping the changes minimal, we choose the first, as this is more in line with the grammar of the extended candidates help message.
2016-03-20 16:02:31 +13:00
Jeffrey Seyfried
65ec4dfe61 Improve diagnostics for duplicate names 2016-03-16 08:52:31 +00:00
bors
06074ac004 Auto merge of #32141 - jseyfried:fix_resolution_in_lexical_scopes, r=nikomatsakis
Fix name resolution in lexical scopes

Currently, `resolve_item_in_lexical_scope` does not check the "ribs" (type parameters and local variables). This can allow items that should be shadowed by type parameters to be named.

For example,
```rust
struct T { i: i32 }
fn f<T>() {
    let t = T { i: 0 }; // This use of `T` resolves to the struct, not the type parameter
}

mod Foo {
    pub fn f() {}
}
fn g<Foo>() {
    Foo::f(); // This use of `Foo` resolves to the module, not the type parameter
}
```

This PR changes `resolve_item_in_lexical_scope` so that it fails when the item is shadowed by a rib (fixes #32120).
This is a [breaking-change], but it looks unlikely to cause breakage in practice.

r? @nikomatsakis
2016-03-12 21:55:14 -08:00
Jeffrey Seyfried
e926f281df Comment resolve_item_in_lexical_scope 2016-03-11 23:59:02 +00:00
Jeffrey Seyfried
87708b7b1f Refactor away check_ribs 2016-03-08 23:28:34 +00:00
Jeffrey Seyfried
210109cf7b Include the crate root in the ribs 2016-03-08 23:28:34 +00:00
Jeffrey Seyfried
7f3491c39d Fix name resolution in lexical scopes 2016-03-08 23:28:33 +00:00
Jeffrey Seyfried
2998564615 Refactor away ExternalExports 2016-03-06 05:46:49 +00:00
Jeffrey Seyfried
b3572ae15a Finish encapsulating the details of import resolution in resolve_imports 2016-03-04 20:48:55 +00:00
Jeffrey Seyfried
20b99d303d Start importing bindings from globs as soon as the glob path is known. 2016-03-04 20:48:51 +00:00
Jeffrey Seyfried
fb4710ce21 Add a field in Module for the ResolverArenas 2016-03-04 20:48:50 +00:00
Jeffrey Seyfried
6b94bc345c Add an arena for import directives 2016-03-04 20:48:49 +00:00
bors
7cee8b9ffb Auto merge of #31824 - jseyfried:privacy_in_resolve, r=nikomatsakis
This PR privacy checks paths as they are resolved instead of in `librustc_privacy` (fixes #12334 and fixes #31779). This removes the need for the `LastPrivate` system introduced in PR #9735, the limitations of which cause #31779.

This PR also reports privacy violations in paths to intra- and inter-crate items the same way -- it always reports the first inaccessible segment of the path.

Since it fixes #31779, this is a [breaking-change]. For example, the following code would break:
```rust
mod foo {
    pub use foo::bar::S;
    mod bar { // `bar` should be private to `foo`
        pub struct S;
    }
}

impl foo::S {
    fn f() {}
}

fn main() {
    foo::bar::S::f(); // This is now a privacy error
}
```

r? @alexcrichton
2016-03-03 02:21:28 +00:00
vegai
bd7e422996 Add a span note on type definition spot 2016-03-02 07:06:22 +02:00
vegai
59fafcf00c span_note => fileline_note 2016-03-01 21:33:35 +02:00
bors
9c6a0088fb Auto merge of #31857 - jseyfried:fix_scoping, r=nikomatsakis
This fixes a bug (#31845) introduced in #31105 in which lexical scopes contain items from all anonymous module ancestors, even if the path to the anonymous module includes a normal module:
```rust
fn f() {
    fn g() {}
    mod foo {
        fn h() {
           g(); // This erroneously resolves on nightly
        }
    }
}
```

This is a [breaking-change] on nightly but not on stable or beta.
r? @nikomatsakis
2016-02-26 04:38:28 +00:00
Jeffrey Seyfried
b20d567c2b Privacy check paths in resolve and typeck 2016-02-26 00:37:27 +00:00
Jeffrey Seyfried
07957ffb2e Refactor Module's field extern_crate_did: Option<DefId> to extern_crate_id: Option<NodeId> 2016-02-26 00:37:27 +00:00
Jeffrey Seyfried
8f32fdecfb Remove LastPrivate 2016-02-26 00:37:27 +00:00
Jeffrey Seyfried
2942cf7b0a Improve unused import detection 2016-02-24 13:13:46 +00:00
Jeffrey Seyfried
197326d17b Resolve: include normal modules in the ribs 2016-02-24 06:31:55 +00:00
Jeffrey Seyfried
3358fb11da Fix the visibility of extern crate declarations and stop warning on pub extern crate 2016-02-24 01:34:14 +00:00
bors
2d14b39204 Auto merge of #31747 - jseyfried:stop_resolve_after_fail, r=nrc
Now that #31461 is merged, a failing resolution can never become indeterminate or succeed, so we no longer have to keep trying to resolve failing import directives.
r? @nrc
2016-02-20 14:33:13 +00:00
bors
cfabd17372 Auto merge of #31674 - VladUreche:issue/21221, r=nikomatsakis
This commit adds functionality that allows the name resolution pass
to search for entities (traits/types/enums/structs) by name, in
order to show recommendations along with the errors.

For now, only E0405 and E0412 have suggestions attached, as per the
request in bug #21221, but it's likely other errors can also benefit
from the ability to generate suggestions.
2016-02-20 10:40:42 +00:00
bors
28a3e8bb51 Auto merge of #31742 - frewsxcv:needless-lifetimes, r=pnkfelix
These explicit lifetimes can be ommitted because of lifetime elision
rules. Instances were found using rust-clippy.
2016-02-19 13:49:46 +00:00
bors
917db28b55 Auto merge of #31716 - jseyfried:fix_privacy_for_def_err, r=nrc
Fixes #31714
2016-02-19 02:18:25 +00:00
Vlad Ureche
88af8fa0b1 Show candidates for names not in scope
This commit adds functionality that allows the name resolution pass
to search for entities (traits/types/enums/structs) by name, in
order to show recommendations along with the errors.

For now, only E0405 and E0412 have suggestions attached, as per the
request in bug #21221, but it's likely other errors can also benefit
from the ability to generate suggestions.
2016-02-19 01:10:36 +01:00
Corey Farwell
5850d16d52 Remove unnecessary explicit lifetime bounds.
These explicit lifetimes can be ommitted because of lifetime elision
rules. Instances were found using rust-clippy.
2016-02-18 08:37:10 -05:00
Jeffrey Seyfried
5ad84f1301 Replace the field imports in Module with unresolved_imports and refactor away resolved_import_count 2016-02-18 00:02:50 +00:00
bors
0d1cd9bd6a Auto merge of #31685 - petrochenkov:patrefact2, r=eddyb
And split `PatKind::Enum` into `PatKind::TupleStruct` and `PatKind::Path`.
This is the HIR part of https://github.com/rust-lang/rust/pull/31581.
This is also kind of a preparation for https://github.com/rust-lang/rfcs/pull/1492.

r? @eddyb
2016-02-17 06:01:49 +00:00
Jeffrey Seyfried
1b5d2f21d6 Don't compute LastPrivate data for Def::Err. 2016-02-16 22:22:57 +00:00
Vadim Petrochenkov
06755d90ce Split PatKind::Enum into PatKind::TupleStruct and PatKind::Path 2016-02-16 00:40:38 +03:00
Vadim Petrochenkov
9b40e1e5b3 Rename hir::Pat_ and its variants 2016-02-14 15:25:12 +03:00
Jeffrey Seyfried
81d5d02c37 Rename Module field anonymous_children to module_children, expand it to include both named an anonymous modules, and fix #31644 2016-02-14 09:05:37 +00:00
Jeffrey Seyfried
4af85643b1 Rename Module field children to resolutions 2016-02-14 08:47:55 +00:00
Jonas Schievink
8ac5f87db8 Autoderef in librustc_resolve 2016-02-12 19:28:42 +01:00
Oliver Schneider
625e78b700 [breaking-change] don't glob export ast::{UintTy, IntTy} variants 2016-02-11 12:34:48 +01:00
Oliver Schneider
ccf48bcd40 [breaking-change] don't glob export ast::FloatTy variants 2016-02-11 12:34:48 +01:00
Jeffrey Seyfried
3c62d90202 Reallow methods from traits that are shadowed by non-import items 2016-02-08 02:25:10 +00:00
Jeffrey Seyfried
7000e70825 Replace children and import_resolutions with a single NameResolution-valued map.
Refactor away resolve_name_in_module in resolve_imports.rs

Rewrite and improve the core name resolution procedure in NameResolution::result and Module::resolve_name

Refactor the duplicate checking code into NameResolution::try_define
2016-02-08 02:25:08 +00:00
Jeffrey Seyfried
d881eee608 Change try_define_child to return a Result instead of an Option 2016-02-08 02:25:07 +00:00
Jeffrey Seyfried
16e7ff1bff Write and use increment_outstanding_references_for and decrement_outstanding_references_for 2016-02-08 02:25:05 +00:00
Jeffrey Seyfried
96b4dc4b87 Refactor away the fields id and is_public of ImportResolution and rename ImportResolution to NameResolution 2016-02-08 02:25:03 +00:00