Commit graph

3887 commits

Author SHA1 Message Date
flip1995
0e5aee1fc1
items_after_statements: don't lint when they a separated by trailing semicolons 2020-11-28 17:18:15 +01:00
bors
7a73a25622 Auto merge of #6086 - Ryan1729:add-suspicious_chained_operators-lint, r=llogiq
Add suspicious_operation_groupings lint

This is my (<del> currently WIP </del>) attempt to close #6039.

changelog: Added `suspicious_operation_groupings` lint.
2020-11-28 08:17:25 +00:00
Ryan1729
af1cc5c911 add suspicious_operation_groupings lint
run `cargo dev new_lint --category correctness --name suspicious_chained_operators --pass early`

add (currently failing) tests for suspicious_chained_operators
add some tests to answer a question that came up during implementation

write usage code for functions we'll need to find or create

Complete left-right tracking TODO

get it compiling with several `todo!` invocations.

refactor to a set of incomplete functions that don't expect to be able to edit a `Span`

create placeholder for `suggestion_with_swapped_ident` function and correct some comments

add `inside_larger_boolean_expression` test

fill out `get_ident` and `suggestion_with_swapped_ident`

Implementi the `IdentIter`

start on implementing the `IdentIter`
handle the `ExprKind::Path` case in `IdentIter`

on second thought, make the iterator type dynamic so we don't need an explicit type for each one we will need

handle `ExprKind::MacCall` in `IdentIter`

Try handling `box x` expressions

restructure `IdentIter`

set `self.done` when returning `None`

Handle `ExprKind::Array`

reduce duplication with a macro that we expect to use several more times

handle ExprKind::Call

add `new_p` convenience method

handle `MethodCall`

handle `Tup` and `Binary`

handle `Unary`

simplify by not returning an additional `Expr` from the `IdentIter`

add cross product test against false positives

rename suspicious_chained_operators to suspicious_operation_groupings within files

For the record, the exact commands run were:
find . -type f -name "*.md" -exec sed -i 's/suspicious_chained_operators/suspicious_operation_groupings/g' {} +

find . -type f -name "*.rs" -exec sed -i 's/suspicious_chained_operators/suspicious_operation_groupings/g' {} +

find . -type f -name "*.rs" -exec sed -i 's/SUSPICIOUS_CHAINED_OPERATORS/SUSPICIOUS_OPERATION_GROUPINGS/g' {} +

find . -type f -name "*.rs" -exec sed -i 's/SuspiciousChainedOperators/SuspiciousOperationGroupings/g' {} +

Also:
rename file to match module name

rename test file to match lint name

start implementing `IdentDifference` creation

add `IdentIter` utility

use `ident_iter::IdentIter`

fix bug in `suggestion_with_swapped_ident`

add `inside_if_statements` test

implement `Add` `todo`s

register `SuspiciousOperationGroupings` lint pass

fill in `chained_binops`, and fill in a stopgap version of `ident_difference_expr`, but then notice that the lint does not seem to ever be run in the tests

run `cargo dev update_lints` and not that the `suspicious_operation_groupings` lint still does not seem to be run

fix base index incrementing bug

fix paired_identifiers bug, and remove ident from `Single`

change help prefix and note our first successful lint messages!

add odd_number_of_pairs test

get the `non_boolean_operators` test passing, with two copies of the error message

extract `is_useless_with_eq_exprs` so we can know when `eq_op` will already handle something

add `not_caught_by_eq_op` tests since `s1.b * s1.b` was (reasonably) not caught by `eq_op`

cover the case where the change should be made on either side of the expression with `not_caught_by_eq_op` tests

produce the expected suggestion on the `not_caught_by_eq_op_middle_change_left` test

confirm that the previous tests still pass and update references

fix early continue bug and get `not_caught_by_eq_op_middle_change_right` passing

note that `not_caught_by_eq_op_start` already passes

fix bugs based on misunderstanding of what `Iterator::skip` does, and note that `not_caught_by_eq_op_end` now passes

add several parens tests and make some of them pass

handle parens inside `chained_binops_helper` and note that this makes several tests pass

get `inside_larger_boolean_expression_with_unsorted_ops` test passing by extracting out `check_same_op_binops` function

also run `cargo dev fmt`

note that `inside_function_call` already passes

add another `if_statement` test

remove the matching op requirement, making `inside_larger_boolean_expression_with_unsorted_ops` pass

prevent non-change suggestions from being emitted

get the `Nested` tests passing, and remove apparently false note about eq_op

add a test to justify comment in `ident_difference_expr_with_base_location` but find that the failure mode seems different than expected

complete `todo` making `do_not_give_bad_suggestions_for_this_unusual_expr` pass and add some more tests that already pass

add test to `eq_op`

note that `inside_fn_with_similar_expression` already passes

fix `inside_an_if_statement` and note that it already passes

attempt to implement if statement extraction and notice that we don't seem to handle unary ops correctly

add `maximum_unary_minus_right_tree` test and make it pass

add two tests and note one of them passes

filter out unary operations in several places, and find that the issue seems to be that we don't currently recognize the error in `multiple_comparison_types_and_unary_minus` even so.

remove filtering that was causing bad suggestions

remove tests that were deemed too much for now

run `cargo dev fmt`

correct eq_op post-merge

fill out the description and delete debugging code

run `cargo dev update_lints`

update eq_op references

add parens to work around rustfmt issue #3666 and run rustfmt

https://github.com/rust-lang/rustfmt/issues/3666#issuecomment-714612257

update references after formatting

fix dogfood issues

fix multi-cursor edit

fix missed dogfood error

fix more dogfood pedantic issues, including function length

even more nesting

insert hidden definition of Vec3 so docs compile

add spaces to second struct def

reword test description comment

Co-authored-by: llogiq <bogusandre@gmail.com>

add local `use BinOpKind::*;`

Apply suggestions from code review

Co-authored-by: llogiq <bogusandre@gmail.com>

switch `SUSPICIOUS_OPERATION_GROUPINGS` to a style lint

run `cargo dev update_lints`

put both usages of `op_types` in the same closure to satisfy `borrowck`

fix compile error
2020-11-27 17:50:16 -07:00
Markus Legner
82a7068007
Trigger modulo_one lint also on -1. 2020-11-27 08:54:35 +01:00
bors
403816fbc9 Auto merge of #6362 - nico-abram:unnecessary_cast_dot_float_literal, r=ebroto
Fix rust-lang/rust#79255 - Incorrect try suggestion for float cast

changelog: Fix rust-lang/rust#79255 - Incorrect try suggestion for float literal cast ending in dot
2020-11-26 08:41:16 +00:00
unknown
3b53de6b36 Fix rust-lang/rust#79255 - Incorrect try suggestion for unnecessary float literal cast ending in dot 2020-11-25 19:38:55 -03:00
PunitLodha
2345ef5b1f added lints str_to_string and string_to_string 2020-11-25 20:59:29 +05:30
flip1995
d06076c0c5
Add test for multiple defined msrv attrs 2020-11-25 12:23:28 +01:00
Suyash458
aaa4325045
add support for minimum supported rust version.
add configuration option for minimum supported rust version
add msrv attribute to some lints listed in #6097
add tests
2020-11-25 12:22:47 +01:00
bors
f897d27d8b Auto merge of #6339 - CDirkx:redundant-pattern-match-poll, r=ebroto
Change `redundant_pattern_matching` to also lint `std::task::Poll`

`reduntant_pattern_matching` currently lints pattern matching on `Option` and `Result` where the `is_variant` utility methods could be used instead: `is_some`, `is_none`, `is_ok`, `is_err`. This PR extends this behaviour to `std::task::Poll`, suggesting the methods `is_pending` and `is_ready`.

Motivation: The current description of `redundant_pattern_matching` mentions

> It's more concise and clear to just use the proper utility function

which in my mind applies to `Poll` as well.

changelog: Enhance [`redundant_pattern_matching`] to also lint on `std::task::Poll`
2020-11-24 23:19:43 +00:00
flip1995
c6a577ea11
Merge remote-tracking branch 'upstream/master' into rustup 2020-11-24 17:05:01 +01:00
bors
53ce1dd719 Auto merge of #79228 - flip1995:clippyup, r=oli-obk
Update Clippy

Biweekly Clippy update

r? `@Manishearth`
2020-11-24 06:56:02 +00:00
bors
295fe28057 Auto merge of #6313 - giraffate:fix_fp_needless_collect, r=ebroto
Fix FP in indirect `needless_collect` when used multiple times

Fix https://github.com/rust-lang/rust-clippy/issues/5991
Fix https://github.com/rust-lang/rust-clippy/issues/6297

changelog: Fix FP in indirect `needless_collect` when used multiple times
2020-11-23 22:26:45 +00:00
bors
d5b40bf469 Auto merge of #78343 - camelid:macros-qualify-panic, r=m-ou-se
Qualify `panic!` as `core::panic!` in non-built-in `core` macros

Fixes #78333.

-----

Otherwise code like this

    #![no_implicit_prelude]

    fn main() {
        ::std::todo!();
        ::std::unimplemented!();
    }

will fail to compile, which is unfortunate and presumably unintended.

This changes many invocations of `panic!` in a `macro_rules!` definition
to invocations of `$crate::panic!`, which makes the invocations hygienic.

Note that this does not make the built-in macro `assert!` hygienic.
2020-11-23 22:05:28 +00:00
Eduardo Broto
209ab1885c Merge remote-tracking branch 'upstream/master' into rustup 2020-11-23 23:02:12 +01:00
Camelid
d708b444e4 Qualify panic! as core::panic! in non-built-in core macros
Otherwise code like this

    #![no_implicit_prelude]

    fn main() {
        ::std::todo!();
        ::std::unimplemented!();
    }

will fail to compile, which is unfortunate and presumably unintended.

This changes many invocations of `panic!` in a `macro_rules!` definition
to invocations of `$crate::panic!`, which makes the invocations hygienic.

Note that this does not make the built-in macro `assert!` hygienic.
2020-11-23 11:28:25 -08:00
bors
58a2bc45d7 Auto merge of #6369 - camsteffen:cast-cfg, r=Manishearth
Disable unnecessary_cast for cfg-dependant types

changelog: Disable unnecessary_cast for cfg-dependant types

Fix  #6331
2020-11-23 16:33:13 +00:00
bors
723ac0faf1 Auto merge of #6317 - chansuke:add-external-macro, r=llogiq
Add exteranal macros for as_conversions

Added external macros to this PR https://github.com/rust-lang/rust-clippy/pull/4888.

r? `@llogiq`

changelog: none
2020-11-23 13:26:28 +00:00
flip1995
284c359c61 Fix ICE in utils::implements_trait
This only happend when debug_assertions were enabled in rustc
2020-11-23 13:52:27 +01:00
flip1995
d3d2018ead Merge commit '3e7c6dec244539970b593824334876f8b6ed0b18' into clippyup 2020-11-23 13:51:04 +01:00
Cameron Steffen
a39a93faeb Disable unnecessary_cast for cfg-dependant types 2020-11-22 19:35:04 -06:00
Lzu Tao
4b698f2069 Drop support for cloudabi targets 2020-11-22 17:11:41 -05:00
oliver
e30bb7661d update 2020-11-22 00:50:09 -04:00
bors
8325d48d2d Auto merge of #6351 - flip1995:rustup, r=flip1995
Rustup

r? `@ghost`

changelog: none
2020-11-20 09:07:56 +00:00
flip1995
dd4e471b3f
Properly deprecate panic_params lint 2020-11-20 09:37:47 +01:00
Mara Bos
78faaef8de Remove the clippy::panic-params lint.
Rustc itself now warns for all cases that triggered this lint.
2020-11-19 18:34:40 +01:00
Takayuki Nakata
6494bd0bac Revert "Add rustfmt::skip as a work around"
This reverts commit 0e803417f9.

Fixed by https://github.com/rust-lang/rustfmt/issues/4528.
2020-11-18 12:36:47 +09:00
Christiaan Dirkx
5a83968877 Change redundant_pattern_matching to also lint std::task::Poll
Suggest using utility methods `is_pending` and `is_ready`.
2020-11-17 23:40:31 +01:00
bors
44d944586c Auto merge of #6070 - matsujika:unnecessary_wrap, r=flip1995
Add new lint `unnecessary_wrap`

Fixes #5969

changelog: New lint [`unnecessary_wraps`]
2020-11-17 20:28:32 +00:00
Camelid
4e4c4fb8aa Fix handling of panic calls
This should make Clippy more resilient and will unblock #78343.

This PR is made against rust-lang/rust to avoid the need for a subtree
sync at @flip1995's suggestion in rust-lang/rust-clippy#6310.
2020-11-17 12:16:15 -08:00
bors
5464cbed2f Auto merge of #6337 - ThibsG:FixIce6332, r=Manishearth
Remove `expect()` calls to avoid ICEs in `deref_addrof` lint

Fixes: #6332

changelog: none
2020-11-17 17:55:46 +00:00
Hirochika Matsumoto
c7445d7f2c Pluralize lint name 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
1f577c0300 Fix embarrassing grammatical error 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
4e5c02e898 Ignore trait implementations 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
4c8d248190 Update stderr files 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
86331a46e4 Update stderr files 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
30632fb8e6 Allow this lint on lint tests 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
c5447eb3c1 Make lint skip macros 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
12474c62ff Add support for methods 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
1bdac87128 Improve lint message 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
6b55f3fec9 Add test case 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
cdb72df6f9 Split lint suggestion into two 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
6a62390c86 Optout rustfix test 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
0e9d227c04 Add test cases 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
750c118b34 Add suggestion on type signatures 2020-11-18 01:28:37 +09:00
Hirochika Matsumoto
a7ac441760 Add new lint to detect unnecessarily wrapped value 2020-11-18 01:28:37 +09:00
ThibsG
5b8f2b6c93 Remove expect() calls to avoid ICEs in deref_addrof lint 2020-11-16 23:30:11 +01:00
bors
ad4f82997a Auto merge of #6119 - rsulli55:find_is_some_on_strs, r=flip1995
Add a case to `lint_search_is_some` to handle searching strings

Fixes: #6010

This adds a lint which recommends using `contains()` instead of `find()` followed by `is_some()` on strings as suggested in #6010.

This was added as an additional case to
5af88e3c2d/clippy_lints/src/methods/mod.rs (L3037)

I would really appreciate any comments/suggestions for my code!

changelog: Added case to `lint_search_is_some` to handle searching strings
2020-11-16 08:45:10 +00:00
bors
df3bb5881d Auto merge of #6336 - giraffate:sync-from-rust, r=flip1995
Rustup

changelog: none
2020-11-16 08:23:27 +00:00
Takayuki Nakata
0e803417f9 Add rustfmt::skip as a work around
because comments are checked and removed by rustfmt for some reason
2020-11-16 12:32:16 +09:00