23 Commits

Author SHA1 Message Date
Mazdak Farrokhzad
70cae78387 resolve: already-bound-check: account for or-patterns.
Also document `ast::Pat::walk`.
2019-09-05 08:33:09 +02:00
Mazdak Farrokhzad
dc91e229d2 resolve: move resolve_block to a better place. 2019-09-05 08:33:09 +02:00
Mazdak Farrokhzad
fd3b441846 resolve: move fresh_binding. 2019-09-05 08:33:09 +02:00
Mazdak Farrokhzad
f343e84f40 resolve: add type IdentMap<T> alias. 2019-09-05 08:33:09 +02:00
Mazdak Farrokhzad
219ddde26b resolve: extract try_resolve_as_non_binding. 2019-09-05 08:33:09 +02:00
Mazdak Farrokhzad
6d537d4020 resolve: simplify resolve_arm. 2019-09-05 08:33:09 +02:00
Mazdak Farrokhzad
f8835eeaf8 resolve: cleanup using with_rib, etc. 2019-09-05 08:33:09 +02:00
Mazdak Farrokhzad
af06bfb84c resolve: extract resolve_params. 2019-09-05 08:33:09 +02:00
Matthew Jasper
f70c90c677 Move type parameter shadowing errors to resolve
For some reason type checking did this. Further it didn't consider
hygiene.
2019-08-17 09:12:32 +01:00
Vadim Petrochenkov
ea81d8cedb resolve: Populate external modules in more automatic and lazy way
The modules are now populated implicitly on the first access
2019-08-16 21:10:12 +03:00
Vadim Petrochenkov
c76277340e resolve: ParentScope::default -> ParentScope::module 2019-08-15 20:47:15 +03:00
Vadim Petrochenkov
aca1353240 resolve: Add some comments to the main modules 2019-08-15 20:40:47 +03:00
Vadim Petrochenkov
1a1557c285 resolve: Add ParentScope::default, eliminate dummy_parent_scope
Remove some unnecessary parameters from functions
2019-08-15 20:40:18 +03:00
Vadim Petrochenkov
23b82c3229 resolve: Move macro resolution traces from Modules to Resolver
Traces already contain module info without that.
It's easy to forget to call `finalize_*` on a module.
In particular, macros enum and trait modules weren't finalized.
By happy accident macros weren't placed into those modules until now.
2019-08-15 20:39:27 +03:00
Vadim Petrochenkov
6cb28b6617 Ident::with_empty_ctxt -> Ident::with_dummy_span
`Ident` has had a full span rather than just a `SyntaxContext` for a long time now.
2019-08-15 20:39:26 +03:00
Jakub Adam Wieczorek
30db4ebdc2 Apply suggestions from code review
Co-Authored-By: Mazdak Farrokhzad <twingoow@gmail.com>
2019-08-10 21:09:53 +00:00
Jakub Adam Wieczorek
53a6304c2a Suggest using a qualified path in patterns with inconsistent bindings
A program like the following one:

```rust
enum E { A, B, C }
fn f(x: E) -> bool {
    match x {
        A | B => false,
        C => true
    }
}
```

is rejected by the compiler due to `E` variant paths not being in scope.
In this case `A`, `B` are resolved as pattern bindings and consequently
the pattern is considered invalid as the inner or-patterns do not bind
to the same set of identifiers.

This is expected but the compiler errors that follow could be surprising
or confusing to some users. This commit adds a help note explaining that
if the user desired to match against variants or consts, they should use
a qualified path. The note is restricted to cases where the identifier
starts with an upper-case sequence so as to reduce the false negatives.

Since this happens during resolution, there's no clean way to check what
the patterns match against. The syntactic criterium, however, is in line
with the convention that's assumed by the `non-camel-case-types` lint.
2019-08-10 21:09:53 +00:00
Vadim Petrochenkov
8cc8133973 Fix calls to resolver from rustdoc and HIR lowering
Cleanup some surrounding code.
Support resolution of intra doc links in unnamed block scopes.
(Paths from rustdoc now use early resolution and no longer need results of late resolution like all the built ribs.)

Fix one test hitting file path limits on Windows.
2019-08-10 13:16:06 +03:00
Vadim Petrochenkov
f360d795f1 resolve: Move some more code around
Move methods logically belonging to build-reduced-graph into `impl BuildReducedGraphVisitor` and `build_reduced_graph.rs`
Move types mostly specific to late resolution closer to the late resolution visitor
2019-08-10 13:16:06 +03:00
Vadim Petrochenkov
9c86ce76e5 resolve: Turn resolve_error into a method on Resolver
Rename it to `report_error` and move into `diagnostics.rs`

Also turn `check_unused` into a method on `Resolver`
2019-08-10 13:16:06 +03:00
Vadim Petrochenkov
6a347f3701 resolve: Remove Deref<Target=Resolver> implementations
It's now immediately clear what fields belong to the global resolver state and what are specific to passes/visitors.
2019-08-10 13:16:06 +03:00
Vadim Petrochenkov
df03e420e0 resolve: Track whole parent scope in the visitors
Instead of tracking current module and other components separately.
(`ParentScope` includes the module as a component.)
2019-08-10 13:16:06 +03:00
Vadim Petrochenkov
ff85d1c2d2 resolve: Move late resolution visitor into a separate file 2019-08-10 13:16:06 +03:00