Commit graph

165 commits

Author SHA1 Message Date
Andy Russell
1b28f5aa66
improve non_camel_case_types diagnostics
Use a structured suggestion and tighten the span to just the identifier.
2019-01-08 13:24:38 -05:00
Andy Russell
e379970056
improve non_upper_case_globals diagnostics
Use a structured suggestion and tighten the span to just the identifier.
2019-01-08 13:24:38 -05:00
Andy Russell
7c0d145ec1
improve non_snake_case diagnostics
Use a structured suggestion and tighten the span to just the identifier.
2019-01-08 13:24:38 -05:00
Matthias Krüger
8d727b267d update tests line numbers 2018-12-29 08:52:25 +01:00
Matthias Krüger
68860989eb remove remaining copyright headers 2018-12-28 21:50:33 +01:00
Mark Rousskov
2a663555dd Remove licenses 2018-12-25 21:08:33 -07:00
Andy Russell
6474de904c
make non_camel_case_types an early lint 2018-12-24 12:58:52 -05:00
Andy Russell
90726e1ac1
suggest similar lint names for unknown lints 2018-12-19 16:52:09 -05:00
Mazdak Farrokhzad
6ec6f48769
Rollup merge of #56439 - JohnGinger:master, r=nikomatsakis
Clearer error message for dead assign

I'm not that this is the right place for this (if it needs an RFC or not).

I had the problem where I misunderstood the compiler lint message https://github.com/rust-lang/rust/issues/56436 and other people seem to have had the same problem https://www.reddit.com/r/rust/comments/8cy9p4/value_assigned_to_is_never_read/.

I think this new wording might be slightly clearer (and help out beginners like me). I'm very new though, so there might be some nuance I'm missing that would make this more confusing or a bad idea for other reasons.

I thought I would create a PR to make it easy to change the code if the consensus was that it would make sense to make a change.

If this is the wrong place for this sort of thing I'll happily delete/move it.
2018-12-16 14:08:16 +01:00
Pietro Albini
846db94c66
Rollup merge of #56738 - turboladen:fix-private_no_mangle_fns-message, r=zackmdavis
Fix private_no_mangle_fns message grammar

Simply changes "an warning" to "a warning" in the `private_no_mangle_fns` warning. I started getting this in some code after upgrading to 1.31.0.
2018-12-15 10:17:31 +01:00
Steve Loveless
517bfe0dca Fix private_no_mangle_fns message grammar 2018-12-11 21:42:23 -08:00
Alex Crichton
4c21a3bc2a std: Depend directly on crates.io crates
Ever since we added a Cargo-based build system for the compiler the
standard library has always been a little special, it's never been able
to depend on crates.io crates for runtime dependencies. This has been a
result of various limitations, namely that Cargo doesn't understand that
crates from crates.io depend on libcore, so Cargo tries to build crates
before libcore is finished.

I had an idea this afternoon, however, which lifts the strategy
from #52919 to directly depend on crates.io crates from the standard
library. After all is said and done this removes a whopping three
submodules that we need to manage!

The basic idea here is that for any crate `std` depends on it adds an
*optional* dependency on an empty crate on crates.io, in this case named
`rustc-std-workspace-core`. This crate is overridden via `[patch]` in
this repository to point to a local crate we write, and *that* has a
`path` dependency on libcore.

Note that all `no_std` crates also depend on `compiler_builtins`, but if
we're not using submodules we can publish `compiler_builtins` to
crates.io and all crates can depend on it anyway! The basic strategy
then looks like:

* The standard library (or some transitive dep) decides to depend on a
  crate `foo`.
* The standard library adds

  ```toml
  [dependencies]
  foo = { version = "0.1", features = ['rustc-dep-of-std'] }
  ```
* The crate `foo` has an optional dependency on `rustc-std-workspace-core`
* The crate `foo` has an optional dependency on `compiler_builtins`
* The crate `foo` has a feature `rustc-dep-of-std` which activates these
  crates and any other necessary infrastructure in the crate.

A sample commit for `dlmalloc` [turns out to be quite simple][commit].
After that all `no_std` crates should largely build "as is" and still be
publishable on crates.io! Notably they should be able to continue to use
stable Rust if necessary, since the `rename-dependency` feature of Cargo
is soon stabilizing.

As a proof of concept, this commit removes the `dlmalloc`,
`libcompiler_builtins`, and `libc` submodules from this repository. Long
thorns in our side these are now gone for good and we can directly
depend on crates.io! It's hoped that in the long term we can bring in
other crates as necessary, but for now this is largely intended to
simply make it easier to manage these crates and remove submodules.

This should be a transparent non-breaking change for all users, but one
possible stickler is that this almost for sure breaks out-of-tree
`std`-building tools like `xargo` and `cargo-xbuild`. I think it should
be relatively easy to get them working, however, as all that's needed is
an entry in the `[patch]` section used to build the standard library.
Hopefully we can work with these tools to solve this problem!

[commit]: 28ee12db81
2018-12-11 21:08:22 -08:00
Alexander Regueiro
ee89c088b0 Various minor/cosmetic improvements to code 2018-12-07 23:53:34 +00:00
John Ginger
c0e3f4b8bb Change to give a help message 2018-12-07 14:15:36 +00:00
John Ginger
70536d4b4c Fix stderr file (unused variable) 2018-12-03 22:53:03 +00:00
varkor
122886842e Test for #[must_use] on traits 2018-11-19 17:41:10 +00:00
Pietro Albini
3c7acc7878
Rollup merge of #55852 - varkor:dotdotequals-lint, r=zackmdavis
Rewrite `...` as `..=` as a `MachineApplicable` 2018 idiom lint

Fixes https://github.com/rust-lang/rust/issues/51043.
2018-11-15 11:04:40 +01:00
Pietro Albini
8c4bfb833b
Rollup merge of #55799 - pnkfelix:remove-useless-revisions-marker-from-lint-unused-mut-variables, r=davidtwco
Removed unneeded instance of `// revisions` from a lint test

Removed an unneeded instance of `// revisions`; the compare-mode=nll shows the output is identical now.

cc #54528
2018-11-11 00:21:15 +01:00
Pietro Albini
0e912b2c17
Rollup merge of #55687 - alexreg:fix-24010, r=scalexm
Take supertraits into account when calculating associated types

Fixes #24010 and #23856. Applies to trait aliases too.

As a by-product, this PR also makes repeated bindings of the same associated item in the same definition a hard error. This was previously a warning with a note about it becoming a hard error in the future. See #50589 for more info.

I talked about this with @nikomatsakis recently, but only very superficially, so this shouldn't stop anyone from assigning it to themself to review and r+.

N.B. The "WIP" commits represent imperfect attempts to solve the problem just for trait objects, but I've left them in for reference for the sake of whomever is reviewing this.

CC @carllerche @theemathas @durka @mbrubeck
2018-11-11 00:21:11 +01:00
varkor
c63df7c64f Use non-short suggestion for parenthesised ..= 2018-11-10 21:27:40 +00:00
varkor
c148714549 Rewrite ... as ..= as a MachineApplicable 2018 idiom lint 2018-11-10 19:26:49 +00:00
Felix S. Klock II
918f70f628 Removed an unneeded instance of // revisions; the compare-mode NLL shows the output is identical now. 2018-11-09 00:03:17 +01:00
Alexander Regueiro
7d9ee0314a Only do check for trait objects, not trait or trait alias definitions. 2018-11-07 21:57:45 +00:00
Felix S. Klock II
f4da71e04e work around deviation in diagnostic output for opt-level=0 by forcing -O. 2018-11-07 15:58:59 +01:00
Felix S. Klock II
58c7a786b0 Update output of lint-type-overflow2.stderr to reflect its output from rustc -O.
(The fact that output differs under `opt-level=0` is an instance of #55757.)
2018-11-07 15:47:49 +01: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
Andre Bogus
1a37575ade don't lint unused_parens on if (break _) 2018-10-29 12:41:56 +01:00
Zack M. Davis
f66ea66acd wherein the status of empty and reason-only lint attributes is clarified
We avoid an ICE by checking for an empty meta-item list before we
index into the meta-items, and leave commentary about where we'd like
to issue unused-attributes lints in the future. Note that empty lint
attributes are already accepted by the stable compiler; generalizing
this to weird reason-only lint attributes seems like the
conservative/consilient generalization.
2018-10-27 12:31:20 -07:00
Zack M. Davis
f90de1110d in which lint reasons are restricted to come last in the attribute
Vadim Petrochenkov suggested this in review ("an error? just to be
conservative"), and it turns out to be convenient from the
implementer's perspective: in the initial proposed implementation (or
`HEAD~2`, as some might prefer to call it), we were doing an entire
whole iteration over the meta items just to find the reason (before
iterating over them to set the actual lint levels). This way, we can
just peek at the end rather than adding that extra loop (or
restructuring the existing code). The RFC doesn't seem to take a
position on this, and there's some precedent for restricting things to
be at the end of a sequence (we only allow `..` at the end of a struct
pattern, even if it would be possible to let it appear anywhere in the
sequence).
2018-10-27 12:31:20 -07:00
Zack M. Davis
dc0609c247 feature-gate lint reasons
We take stability seriously, so we shy away from making even seemingly
"trivial" features insta-stable.
2018-10-27 12:31:20 -07:00
Zack M. Davis
630c6a544f introducing lint reason annotations (RFC 2383)
This is just for the `reason =` name-value meta-item; the
`#[expect(lint)]` attribute also described in the RFC is a problem for
another day.

The place where we were directly calling `emit()` on a match block
(whose arms returned a mutable reference to a diagnostic-builder) was
admittedly cute, but no longer plausibly natural after adding the
if-let to the end of the `LintSource::Node` arm.

This regards #54503.
2018-10-27 12:28:48 -07:00
Pietro Albini
6dfeb7602f
Rollup merge of #55138 - zackmdavis:the_paren_trap, r=pnkfelix
in which unused-parens suggestions heed what the user actually wrote

Aaron Hill pointed out that unnecessary parens around a macro call (paradigmatically, `format!`) yielded a suggestion of hideous macro-expanded code. `span_to_snippet` is fallable as far as the type system is concerned, so the pretty-printing can live on in the oft-neglected `else` branch.

Resolves #55109.
2018-10-25 14:31:01 +02:00
varkor
40bba70823
Make warnings into errors 2018-10-18 10:35:01 +01:00
varkor
0a858dc859 Don't warn about parentheses on match (return) 2018-10-17 23:51:01 +01:00
Zack M. Davis
475be10dbd in which unused-parens suggestions heed what the user actually wrote
Aaron Hill pointed out that unnecessary parens around a macro call
(paradigmatically, `format!`) yielded a suggestion of hideous
macro-expanded code. (The slightly unusual choice of using the
pretty-printer to compose suggestions was quite recently commented on
in the commit message for 1081bbbfc ("abolish ICE when pretty-printing
async block"), but without any grounds to condemn it as a 𝘣𝘢𝘥
choice. Hill's report provides the grounds.) `span_to_snippet` is
fallable as far as the type system is concerned (because, who knows,
macros or something), so the pretty-printing can live on in the
oft-neglected `else` branch.

Resolves #55109.
2018-10-16 21:36:02 -07:00
Manish Goregaokar
4d837bef05
Rollup merge of #55081 - sinkuu:dedup_test, r=Manishearth
Deduplicate tests

* [`ui/lifetimes/lifetime-errors/ex3-both-anon-regions-both-are-structs-4`](0c665e20db/src/test/ui/lifetimes/lifetime-errors/ex3-both-anon-regions-both-are-structs-4.rs)
and [`ex3-both-anon-regions-both-are-structs-3`](0c665e20db/src/test/ui/lifetimes/lifetime-errors/ex3-both-anon-regions-both-are-structs-3.rs)
* [`ui/lint/lint-group-style`](0c665e20db/src/test/ui/lint/lint-group-style.rs) and [`lint-group-nonstandard-style`](0c665e20db/src/test/ui/lint/lint-group-nonstandard-style.rs)
2018-10-15 10:15:22 -07:00
Manish Goregaokar
7ba24e8fcf
Rollup merge of #54820 - kleimkuhler:issue-54538-unused_patterns-lint, r=nikomatsakis
Closes #54538: `unused_patterns` lint

Closes #54538

r? @nikomatsakis
2018-10-15 10:15:11 -07:00
Shotaro Yamada
ac6b3f88c7 Deduplicate tests
* `ui/lifetimes/lifetime-errors/ex3-both-anon-regions-both-are-structs-4`
and `ex3-both-anon-regions-both-are-structs-3`
* `ui/lint/lint-group-style` and `lint-group-nonstandard-style`
2018-10-15 09:29:17 +09:00
varkor
f5b89062f6 Unused result warning: "X which must" ↦ "X that must" 2018-10-14 18:25:30 +01:00
Kevin Leimkuhler
47014df790 Fix Range warning and improve tests 2018-10-09 21:10:27 -07:00
Kevin Leimkuhler
46b07d670a Simply unused_parens check and add tests 2018-10-09 21:10:27 -07:00
varkor
be8896109a Fix handling of #[must_use] on unit and uninhabited types 2018-10-08 23:01:42 +01:00
bors
b2d6ea98b0 Auto merge of #54810 - 1aim:unused-impl-trait, r=oli-obk
Fix dead code lint for functions using impl Trait

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

This is a minimal fix that doesn't add any new queries or touches unnecessary code. Please nominate for beta backport if wanted.
2018-10-07 19:30:24 +00:00
Alex Crichton
d7d7045374 rustc: Allow #[no_mangle] anywhere in a crate
This commit updates the compiler to allow the `#[no_mangle]` (and
`#[export_name]` attributes) to be located anywhere within a crate.
These attributes are unconditionally processed, causing the compiler to
always generate an exported symbol with the appropriate name.

After some discussion on #54135 it was found that not a great reason
this hasn't been allowed already, and it seems to match the behavior
that many expect! Previously the compiler would only export a
`#[no_mangle]` symbol if it were *publicly reachable*, meaning that it
itself is `pub` and it's otherwise publicly reachable from the root of
the crate. This new definition is that `#[no_mangle]` *is always
reachable*, no matter where it is in a crate or whether it has `pub` or
not.

This should make it much easier to declare an exported symbol with a
known and unique name, even when it's an internal implementation detail
of the crate itself. Note that these symbols will persist beyond LTO as
well, always making their way to the linker.

Along the way this commit removes the `private_no_mangle_functions` lint
(also for statics) as there's no longer any need to lint these
situations. Furthermore a good number of tests were updated now that
symbol visibility has been changed.

Closes #54135
2018-10-06 13:57:30 -07:00
Jonas Schievink
3c46da8c82 Fix dead code lint for functions using impl Trait 2018-10-04 14:14:14 +02:00
Josh Stone
d40b6cf086 Update ui lines 2018-09-27 20:52:53 -07:00
Josh Stone
ce034951fb Bump to 1.31.0 and bootstrap from 1.30 beta 2018-09-27 20:52:53 -07:00
bors
4f3ff5a97b Auto merge of #54101 - osa1:issue_54099, r=nikomatsakis
Fix camel case type warning for types with trailing underscores

Fixes #54099
2018-09-19 09:20:36 +00:00
Ömer Sinan Ağacan
07646bb387 Fix camel case type warning for types with trailing underscores
Fixes #54099
2018-09-12 09:42:37 +03:00
toidiu
731f4efae5 stabalize infer outlives requirements (RFC 2093).
Co-authored-by: nikomatsakis
2018-09-11 11:40:04 -04:00