Commit Graph

60018 Commits

Author SHA1 Message Date
bors
65c043fdd2 Auto merge of #38154 - petrochenkov:altname, r=jseyfried
More systematic error reporting in path resolution

Path resolution for types, expressions and patterns used various heuristics to give more helpful messages on unresolved or incorrectly resolved paths.
This PR combines these heuristics and applies them to all non-import paths.

First a path is resolved in all namespaces, starting from its primary namespace (to give messages like "expected function, found macro, you probably forgot `!`").
If this resolution doesn't give a desired result we create a base error - either "path is not resolved" or "path is resolved, but the resolution is not acceptable in this context".
Other helps and notes are applied to this base error using heuristics.

Here's the list of heuristics for a path with a last segment `name` in order.
First we issue special messages for unresolved `Self` and `self`.
Second we try to find free items named `name` in other modules and suggest to import them.
Then we try to find fields and associated items named `name` and suggest `self.name` or `Self::name`.
After that we try several deterministic context dependent heuristics like "expected value, found struct, you probably forgot `{}`".
If nothing of the above works we try to find candidates with other names using Levenshtein distance.

---

Some alternatives/notes/unresolved questions:
- ~~I had a strong desire to migrate all affected tests to `test/ui`, diagnostics comparison becomes much more meaningful, but I did this only for few tests so far.~~ (Done)
- ~~Labels for "unresolved path" errors are mostly useless now, it may make sense to move some help/notes to these labels, help becomes closer to the error this way.~~ (Done)
- ~~Currently only the first successful heuristic results in additional message shown to the user, it may make sense to print them all, they are rarely compatible, so the diagnostics bloat is unlikely.~~ (Done)
- Now when https://github.com/rust-lang/rust/pull/38014 landed `resolve_path` can potentially be replaced with `smart_resolve_path` in couple more places - e.g. ~~visibilities~~ (done), ~~import prefixes~~ (done), HIR paths.

---

Some additional fixes:
- Associated suggestions and typo suggestions are filtered with a context specific predicate to avoid inapplicable suggestions.
- `adjust_local_def` works properly in speculative resolution.
- I also fixed a recently introduced ICE in partially resolved UFCS paths (see test `ufcs-partially-resolved.rs`).     Minimal reproduction:
    ```
    enum E {}
    fn main() {
        <u8 as E>::A;
    }
    ```
    Fixes https://github.com/rust-lang/rust/issues/38409, fixes https://github.com/rust-lang/rust/issues/38504 (duplicates).
- Some bugs in resolution of visibilities are fixed - `pub(Enum)`, `pub(Trait)`, `pub(non::local::path)`.
- Fixes https://github.com/rust-lang/rust/issues/38012.
---

r? @jseyfried for technical details + @jonathandturner  for diagnostics changes
How to read the patch: `smart_resolve_path(_fragment)/resolve_qpath_anywhere` are written anew and replace `resolve_trait_reference`/`resolve_type`/`resolve_pattern_path`/`resolve_struct_path`/`resolve_expr` for `ExprKind::Path`, everything else can be read as a diff.
2016-12-26 13:32:13 +00:00
Vadim Petrochenkov
09aba18e10 More systematic error reporting in path resolution 2016-12-26 15:01:49 +03:00
bors
8493dbed6c Auto merge of #38536 - retep998:flauschige-kaninchen, r=petrochenkov
Fix fs tests on Windows systems with non-english locales.

Fixes https://github.com/rust-lang/rust/issues/34628

r? @alexcrichton
2016-12-26 10:52:56 +00:00
Vadim Petrochenkov
3fb676afb0 Move some compile-fail tests into UI directory 2016-12-26 12:58:33 +03:00
Guillaume Gomez
3907b93c57 Add missing urls in AtomicBool docs 2016-12-26 10:51:25 +01:00
Alex Crichton
67cc77ccde travis: Don't use -9 on gzip
I timed this locally and plain old `gzip` took 2m06s while `gzip -9` took a
whopping 6m23s to save a mere 4MB out of 1.2GB. Let's shave a few minutes off
the Android builder by turning down the compression level.
2016-12-25 22:13:50 -08:00
bors
5752eae5f5 Auto merge of #38598 - brson:em, r=alexcrichton
Emscripten targets are Unix targets

I suspect this will fix the errors compiling libc https://buildbot.rust-lang.org/builders/auto-linux-rustbuild-cross-opt/builds/689/steps/compile/logs/stdio that are occurring on every PR.

Emscripten is basically a posix emulation layer for the web and I consider it a Unix.

cc @alexcrichton
2016-12-26 00:47:50 +00:00
Alex Crichton
f262eea2ee Move target_family to TargetOptions, not Target
Just fixing a compile error
2016-12-25 14:03:44 -08:00
bors
44ad63e487 Auto merge of #38490 - jseyfried:def_id_vis, r=nrc
Use `DefId`s instead of `NodeId`s for `pub(restricted)` visibilities

This is groundwork for hygiene 2.0, specifically privacy checking hygienic intercrate name resolutions.
r? @nrc
2016-12-25 21:32:37 +00:00
bors
20b6c160ca Auto merge of #38539 - jseyfried:fix_resolve_hang, r=eddyb
resolve: fix non-termination

Fixes #34324.
r? @eddyb
2016-12-25 18:13:54 +00:00
Ariel Ben-Yehuda
521b2eaf7b clear discriminant drop flag at the bottom of a ladder
Fixes #38437.
2016-12-25 18:44:19 +02:00
bors
c74ac6cb97 Auto merge of #38566 - jseyfried:fix_import_resolution_bug, r=eddyb
Fix bug in import resolution

Fixes #38535 and fixes #38556.
r? @nrc
2016-12-25 13:14:12 +00:00
Brian Anderson
31bda236bd Emscripten targets are Unix targets 2016-12-25 02:09:10 +00:00
bors
e60aa62ffe Auto merge of #38594 - steveklabnik:rollup, r=steveklabnik
Rollup of 14 pull requests

- Successful merges: #37956, #38013, #38297, #38480, #38497, #38502, #38505, #38513, #38521, #38549, #38554, #38557, #38568, #38572
- Failed merges:
2016-12-24 21:14:17 +00:00
Steve Klabnik
df63b0ce72 Rollup merge of #38572 - GuillaumeGomez:join_handle_docs, r=frewsxcv
Add JoinHandle missing examples

r? @frewsxcv
2016-12-24 14:29:34 -05:00
Steve Klabnik
637818fd85 Rollup merge of #38568 - chris-morgan:fix-markdown-lists, r=frewsxcv
Fix Markdown list formatting.

The Markdown engine used by the book can cope with a single leading space on the list marker:

    Like this:

     * List item

    Rather than like this:

    * List item

… but it’s not the typical convention employed in the book, and moreover the Markdown engine used for producing the error index *can’t* cope with it (its behaviour looks like a bug, as it appears to lose one of the two line breaks as well, but that’s immaterial here).

So, we shift to a single convention which doesn’t trigger bugs in the Markdown renderer.

----

See https://doc.rust-lang.org/error-index.html#E0458 and https://doc.rust-lang.org/error-index.html#E0101 for the bad current rendering in the error index.
2016-12-24 14:29:33 -05:00
Steve Klabnik
8836a9da72 Rollup merge of #38557 - michaelwoerister:inline-asm-ich, r=nikomatsakis
incr. comp.: Improve InlineAsm hashing and add test case

r? @nikomatsakis
2016-12-24 14:29:32 -05:00
Steve Klabnik
abf478455d Rollup merge of #38554 - DirkyJerky:master, r=frewsxcv
Create hyperlink to correct documentation

In librustc_trans's readme
2016-12-24 14:29:31 -05:00
Steve Klabnik
8669b5dce3 Rollup merge of #38549 - aidanhs:aphs-incremental-readme-note, r=nikomatsakis
Correct path of incremental artifacts

Per https://github.com/rust-lang/rust/pull/38072#issuecomment-263670621

r? @nikomatsakis
2016-12-24 14:29:30 -05:00
Steve Klabnik
e9a2a77746 Rollup merge of #38521 - jxson:remove-magenta-warnings, r=sfackler
Removes magenta build warning.

Small bug fix to remove an unused type in the magenta process code that causes build failures for magenta's rustc.

r? @alexcrichton

@tedsta @raphlinus
2016-12-24 14:29:29 -05:00
Steve Klabnik
67bef48739 Rollup merge of #38513 - GuillaumeGomez:thread_fn_docs, r=frewsxcv
Add missing examples in some thread functions

r? @frewsxcv
2016-12-24 14:29:28 -05:00
Steve Klabnik
3c26ff450c Rollup merge of #38505 - estebank:why-lines, r=frewsxcv
Docs: Explain why/when `.lines()` returns an error

Fix #37744.
2016-12-24 14:29:26 -05:00
Steve Klabnik
0f0e74e0ec Rollup merge of #38502 - michaelwoerister:ich-test-inherent-impls, r=nikomatsakis
ICH: Add test cases for inherent impls.

r? @nikomatsakis
2016-12-24 14:29:25 -05:00
Steve Klabnik
10b6097c55 Rollup merge of #38497 - QuietMisdreavus:rustdoc-where-again, r=steveklabnik
rustdoc: properly calculate line length for where clauses

Apparently, while I was cleaning up #37190, I regressed the formatting for long where clauses, where it wouldn't take the "prefix" length into account when deciding whether to break the line up. This patch fixes that.
2016-12-24 14:29:23 -05:00
Steve Klabnik
80d745a132 Rollup merge of #38480 - clarcharr:import_css, r=steveklabnik
Don't @import normalize.css.

This lets the browser load both files in parallel instead of waiting for `rustdoc.css` to load first.
2016-12-24 14:29:22 -05:00
Steve Klabnik
d15a47749a Rollup merge of #38297 - matklad:linked-lists-are-not-cool, r=GuillaumeGomez
Advertise Vec in LinkedList docs

r? @steveklabnik

Hi! We already [advise](https://doc.rust-lang.org/std/collections/#use-a-linkedlist-when) to use `Vec` instead of `LinkedList` in the top-level collections documentation. But I think it may be missed by someone who just directly finds `LinkedList`.

What do you feel about advertising `Vec` directly in `LinkedList` docs as well?
2016-12-24 14:29:21 -05:00
Steve Klabnik
685027a23e Rollup merge of #38013 - wezm:simplify-test-notes, r=steveklabnik
Simplify notes on testing and concurrency

The start of the notes on tests running concurrently, added in https://github.com/rust-lang/rust/pull/37766 read a little awkwardly. This PR fixes that and simplifies the wording a bit.

r? @steveklabnik
2016-12-24 14:29:20 -05:00
Steve Klabnik
639568cb07 Rollup merge of #37956 - tshepang:patch-2, r=steveklabnik
book: replace example I do not understand
2016-12-24 14:29:19 -05:00
bors
00e61d4185 Auto merge of #38443 - frewsxcv:file-docs, r=brson
Improve the API examples for `std::fs::File`.

Fixes https://github.com/rust-lang/rust/issues/35875.
2016-12-24 18:00:45 +00:00
Aidan Hobson Sayers
babb7daf35 Teach rustdoc --test about --sysroot, pass it when testing rust
This permits rustdoc tests to work in stage0
2016-12-24 17:15:07 +00:00
bors
d86cf13316 Auto merge of #38062 - alexcrichton:fix-line-writer, r=brson
std: Fix partial writes in LineWriter

Previously the `LineWriter` could successfully write some bytes but then fail to
report that it has done so. Additionally, an erroneous flush after a successful
write was permanently ignored. This commit fixes these two issues by (a)
maintaining a `need_flush` flag to indicate whether a flush should be the first
operation in `LineWriter::write` and (b) avoiding returning an error once some
bytes have been successfully written.

Closes #37807
2016-12-24 13:28:37 +00:00
Guillaume Gomez
f4bd94f779 Add missing urls in Arc docs 2016-12-24 10:51:46 +01:00
Guillaume Gomez
00645e8504 Add JoinHandle missing examples 2016-12-24 10:40:27 +01:00
Guillaume Gomez
292d36febd Add missing doc examples for Builder 2016-12-24 10:37:04 +01:00
whitequark
5b0700ef31 Add a min_atomic_width target option, like max_atomic_width.
Rationale: some ISAs, e.g. OR1K, do not have atomic instructions
for byte and halfword access, and at the same time do not have
a fixed endianness, which makes it unreasonable to implement these
through word-sized atomic accesses.
2016-12-24 02:17:45 +00:00
Jeffrey Seyfried
41f1e189ee Use DefIds instead of NodeIds for pub(restricted) visibilities. 2016-12-24 00:23:03 +00:00
bors
8d65c8d64e Auto merge of #38268 - withoutboats:parse_where_higher_rank_hack, r=eddyb
Prevent where < ident > from parsing.

In order to be forward compatible with `where<'a>` syntax for higher
rank parameters, prevent potential conflicts with UFCS from parsing
correctly for the near term.
2016-12-24 00:22:00 +00:00
bors
4d07320d01 Auto merge of #38523 - camlorn:disable_field_reordering, r=nikomatsakis
Disable field reordering

This was decided via IRC and needs a backport to beta.  Basically, #37429 broke servo, and probably needs an announcement and opt-in flag.  I didn't run all tests locally but think I've already reverted all the ones that need to be reverted.

r? @nikomatsakis
2016-12-23 21:36:59 +00:00
Tshepang Lekhonkhobe
d8ee0745f7 book: replace example I do not understand 2016-12-23 22:32:27 +02:00
Jeremy Soller
9f9489b976 Cloexec when creating directories 2016-12-23 12:21:29 -07:00
bors
467a7f049b Auto merge of #38533 - jseyfried:legacy_custom_derive_deprecation, r=nrc
Allow legacy custom derive authors to disable warnings in downstream crates

This PR allows legacy custom derive authors to use a pre-deprecated method `registry.register_custom_derive()` instead of `registry.register_syntax_extension()` to avoid downstream deprecation warnings.

r? @nrc
2016-12-23 18:43:12 +00:00
Jeremy Soller
a0a600f0c6 Add Debug to OpenOptions and DirBuilder 2016-12-23 09:42:38 -07:00
bors
00b4019f28 Auto merge of #38529 - nrc:save-sig, r=nikomatsakis
save-analysis: add signature info

These 'signatures' for definitions contain enough info for the RLS to create Rustdoc-style info on the fly.
2016-12-23 15:59:07 +00:00
bors
ce4461f4cf Auto merge of #38511 - Mark-Simulacrum:drop-glue, r=eddyb
Make drop glue for unsized value pass two arguments instead of *(data, meta)

Fixes #36457

r? @eddyb
2016-12-23 11:56:50 +00:00
bors
99913c5ead Auto merge of #38401 - redox-os:redox_cross, r=brson
Redox Cross Compilation

I will admit - there are things here that I wish I did not have to do. This completes the ability to create a cross compiler from the rust repository for `x86_64-unknown-redox`. I will document this PR with inline comments explaining some things.

[View this gist to see how a cross compiler is built](https://gist.github.com/jackpot51/6680ad973986e84d69c79854249f2b7e)

Prior discussion of a smaller change is here: https://github.com/rust-lang/rust/pull/38366
2016-12-23 09:09:26 +00:00
bors
82611a0224 Auto merge of #38232 - jseyfried:refactor_global_paths, r=nrc
Refactor global paths

This PR removes the field `global: bool` from `ast::Path` and `hir::Path`, instead representing a global path `::foo::bar` as `{{root}}::foo::bar`, where `{{root}}` is a virtual keyword `keywords::CrateRoot`.

Also, fixes #38016.

r? @nrc
2016-12-23 06:22:45 +00:00
Jeffrey Seyfried
c12fc66a9d Allow legacy custom derive authors to disable warnings in downstream crates. 2016-12-23 05:49:34 +00:00
Jeremy Soller
4dcb867671 Convert fam to Symbol 2016-12-22 22:29:33 -07:00
Jeremy Soller
c59bb4979c Correct target_family mess 2016-12-22 22:20:47 -07:00
Jeremy Soller
474eb6223b Do not build emutls on Redox 2016-12-22 22:01:15 -07:00