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
128 KiB
128 KiB
Changelog
All notable changes to this project will be documented in this file. See Changelog Update if you want to update this document.
Unreleased / In Rust Nightly
Rust 1.49
Current beta, release 2020-12-31
New Lints
field_reassign_with_default#5911await_holding_refcell_ref#6029disallowed_method#6081inline_asm_x86_att_syntax#6092inline_asm_x86_intel_syntax#6092from_iter_instead_of_collect#6101mut_mutex_lock#6103single_element_loop#6109manual_unwrap_or#6123large_types_passed_by_value#6135result_unit_err#6157ref_option_ref#6165manual_range_contains#6177unusual_byte_groupings#6183comparison_to_empty#6226map_collect_result_unit#6227manual_ok_or#6233
Moves and Deprecations
- Rename
single_char_push_strtosingle_char_add_str#6037 - Rename
zero_width_spacetoinvisible_characters#6105 - Deprecate
drop_bounds(uplifted) #6111 - Move
string_lit_as_bytestonursery#6117 - Move
rc_buffertorestriction#6128
Enhancements
manual_memcpy: Also lint when there are loop counters (and produce a reliable suggestion) #5727single_char_add_str: Also lint onString::insert_str#6037invisible_characters: Also lint the characters\u{AD}and\u{2060}#6105eq_op: Also lint on theassert_*!macro family #6167items_after_statements: Also lint in local macro expansions #6176unnecessary_cast: Also lint casts on integer and float literals #6187manual_unwrap_or: Also lintResult::unwrap_or#6190match_like_matches_macro: Also lint whenmatchhas more than two arms #6216integer_arithmetic: Better handle/an%operators #6229
False Positive Fixes
needless_lifetimes: Bail out if the function has awhereclause with the lifetime #5978explicit_counter_loop: No longer lints, when loop counter is used after it is incremented #6076or_fun_call: Revert changes addressing the handling ofconst fn#6077needless_range_loop: No longer lints, when the iterable is used in the range #6102inconsistent_digit_grouping: Fix bug when using floating point exponent #6104mistyped_literal_suffixes: No longer lints on the fractional part of a float (e.g.713.32_64) #6114invalid_regex: No longer lint on unicode characters withinbytes::Regex#6132boxed_local: No longer lints onextern fnarguments #6133needless_lifetimes: Fix regression, where lifetime is used inwhereclause #6198
Suggestion Fixes/Improvements
unnecessary_sort_by: Avoid dereferencing the suggested closure parameter #6078needless_arbitrary_self_type: Correctly handle expanded code #6093useless_format: Preserve raw strings in suggestion #6151empty_loop: Suggest alternatives #6162borrowed_box: Correctly add parentheses in suggestion #6200unused_unit: Improve suggestion formatting #6247
Documentation Improvements
- Some doc improvements:
doc_markdown: Document problematic link text style #6107
Rust 1.48
Current stable, released 2020-11-19
New lints
self_assignment#5894unnecessary_lazy_evaluations#5720manual_strip#6038map_err_ignore#5998rc_buffer#6044to_string_in_display#5831single_char_push_str#5881
Moves and Deprecations
- Downgrade
verbose_bit_maskto pedantic #6036
Enhancements
- Extend
precedenceto handle chains of methods combined with unary negation #5928 useless_vec: add a configuration value for the maximum allowed size on the stack #5907suspicious_arithmetic_impl: extend to implementations ofBitAnd,BitOr,BitXor,Rem,Shl, andShr#5884invalid_atomic_ordering: detect misuse ofcompare_exchange,compare_exchange_weak, andfetch_update#6025- Avoid
redundant_pattern_matchingtriggering in macros #6069 option_if_let_else: distinguish pure from impureelseexpressions #5937needless_doctest_main: parse doctests instead of using textual search #5912wildcard_imports: allowpreludeto appear in any segment of an import #5929- Re-enable
len_zerofor ranges now thatrange_is_emptyis stable #5961 option_as_ref_deref: catch fully-qualified calls toDeref::derefandDerefMut::deref_mut#5933
False Positive Fixes
useless_attribute: permit allowingwildcard_importsandenum_glob_use#5994transmute_ptr_to_ptr: avoid suggesting dereferencing raw pointers in const contexts #5999redundant_closure_call: take into account usages of the closure in nested functions and closures #5920- Fix false positive in
borrow_interior_mutable_constwhen referencing a field behind a pointer #5949 doc_markdown: allow using "GraphQL" without backticks #5996to_string_in_display: avoid linting when callingto_string()on anything that is notself#5971indexing_slicingandout_of_bounds_indexingtreat references to arrays as arrays #6034should_implement_trait: ignore methods with lifetime parameters #5725needless_return: avoid linting if a temporary borrows a local variable #5903- Restrict
unnecessary_sort_byto non-reference, Copy types #6006 - Avoid suggesting
from_bits/to_bitsin const contexts intransmute_int_to_float#5919 declare_interior_mutable_constandborrow_interior_mutable_const: improve detection of interior mutable types #6046
Suggestion Fixes/Improvements
let_and_return: add a cast to the suggestion when the return expression has adjustments #5946useless_conversion: show the type in the error message #6035unnecessary_mut_passed: discriminate between functions and methods in the error message #5892float_cmpandfloat_cmp_const: change wording to make margin of error less ambiguous #6043default_trait_access: do not use unnecessary type parameters in the suggestion #5993collapsible_if: don't use expanded code in the suggestion #5992- Do not suggest empty format strings in
print_with_newlineandwrite_with_newline#6042 unit_arg: improve the readability of the suggestion #5931stable_sort_primitive: print the type that is being sorted in the lint message #5935- Show line count and max lines in
too_many_lineslint message #6009 - Keep parentheses in the suggestion of
useless_conversionwhere applicable #5900 option_map_unit_fnandresult_map_unit_fn: print the unit type()explicitly #6024redundant_allocation: suggest replacingRc<Box<T>>withRc<T>#5899- Make lint messages adhere to rustc dev guide conventions #5893
ICE Fixes
- Fix ICE in
repeat_once#5948
Documentation Improvements
mutable_key_type: explain potential for false positives when the interior mutable type is not accessed in theHashimplementation #6019unnecessary_mut_passed: fix typo #5913- Add example of false positive to
ptr_argdocs. #5885 box_vec,vec_boxandborrowed_box: add link to the documentation ofBox#6023
Rust 1.47
Released 2020-10-08
New lints
derive_ord_xor_partial_ord#5848trait_duplication_in_bounds#5852map_identity#5694unit_return_expecting_ord#5737pattern_type_mismatch#4841repeat_once#5773same_item_push#5825needless_arbitrary_self_type#5869match_like_matches_macro#5769stable_sort_primitive#5809blanket_clippy_restriction_lints#5750option_if_let_else#5301
Moves and Deprecations
- Deprecate
regex_macrolint #5760 - Move
range_minus_onetopedantic#5752
Enhancements
- Improve
needless_collectby catchingcollectcalls followed byiterorinto_itercalls #5837 panic,todo,unimplementedandunreachablenow detect calls with formatting #5811- Detect more cases of
suboptimal_flopsandimprecise_flops#5443 - Handle asymmetrical implementations of
PartialEqincmp_owned#5701 - Make it possible to allow
unsafe_derive_deserialize#5870 - Catch
ord.min(a).max(b)where a < b inmin_max#5871 - Make
clone_on_copysuggestion machine applicable #5745 - Enable
len_zeroon ranges now thatis_emptyis stable on them #5961
False Positive Fixes
- Avoid triggering
or_fun_callwith const fns that take no arguments #5889 - Fix
redundant_closure_callfalse positive for closures that have multiple calls #5800 - Don't lint cases involving
ManuallyDropinredundant_clone#5824 - Treat a single expression the same as a single statement in the 2nd arm of a match in
single_match_else#5771 - Don't trigger
unnested_or_patternsif the featureor_patternsis not enabled #5758 - Avoid linting if key borrows in
unnecessary_sort_by#5756 - Consider
Tryimpl forPollwhen generating suggestions intry_err#5857 - Take input lifetimes into account in
manual_async_fn#5859 - Fix multiple false positives in
type_repetition_in_boundsand add a configuration option #5761 - Limit the
suspicious_arithmetic_impllint to one binary operation #5820
Suggestion Fixes/Improvements
- Improve readability of
shadow_unrelatedsuggestion by truncating the RHS snippet #5788 - Suggest
filter_mapinstead offlat_mapwhen mapping toOptioninmap_flatten#5846 - Ensure suggestion is shown correctly for long method call chains in
iter_nth_zero#5793 - Drop borrow operator in suggestions of
redundant_pattern_matching#5815 - Add suggestion for
iter_skip_next#5843 - Improve
collapsible_iffix suggestion #5732
ICE Fixes
- Fix ICE caused by
needless_collect#5877 - Fix ICE caused by
unnested_or_patterns#5784
Documentation Improvements
- Fix grammar of
await_holding_lockdocumentation #5748
Others
- Make lints adhere to the rustc dev guide #5888
Rust 1.46
Released 2020-08-27
New lints
Moves and Deprecations
- Move
cast_ptr_alignmentto pedantic #5667
Enhancements
- Improve
mem_replace_with_uninitlint #5695
False Positive Fixes
len_zero: Avoid linting ranges when therange_is_emptyfeature is not enabled #5656let_and_return: Don't lint if a temporary borrow is involved #5680reversed_empty_ranges: Avoid lintingN..Nin for loop arguments in #5692if_same_then_else: Don't assume multiplication is always commutative #5702blacklisted_name: Removebarfrom the default configuration #5712redundant_pattern_matching: Avoid suggesting non-const fncalls in const contexts #5724
Suggestion Fixes/Improvements
- Fix suggestion of
unit_arglint, so that it suggest semantic equivalent code #4455 - Add auto applicable suggestion to
macro_use_imports#5279
ICE Fixes
- Fix ICE in the
constsmodule of Clippy #5709
Documentation Improvements
- Improve code examples across multiple lints #5664
Others
- Introduce a
--rustcflag toclippy-driver, which turnsclippy-driverintorustcand passes all the given arguments torustc. This is especially useful for tools that need therustcversion Clippy was compiled with, instead of the Clippy version. E.g.clippy-driver --rustc --versionwill print the output ofrustc --version. #5178 - New issue templates now make it easier to complain if Clippy is too annoying or not annoying enough! #5735
Rust 1.45
Released 2020-07-16
New lints
match_wildcard_for_single_variants#5582unsafe_derive_deserialize#5493if_let_mutex#5332mismatched_target_os#5506await_holding_lock#5439match_on_vec_items#5522manual_async_fn#5576reversed_empty_ranges#5583manual_non_exhaustive#5550
Moves and Deprecations
- Downgrade
match_boolto pedantic #5408 - Downgrade
match_wild_err_armto pedantic and update help messages. #5622 - Downgrade
useless_let_if_seqto nursery. #5599 - Generalize
option_and_then_someand rename tobind_instead_of_map. #5529 - Rename
identity_conversiontouseless_conversion. #5568 - Merge
block_in_if_condition_exprandblock_in_if_condition_stmtintoblocks_in_if_conditions. #5563 - Merge
option_map_unwrap_or,option_map_unwrap_or_elseandresult_map_unwrap_or_elseintomap_unwrap_or. #5563 - Merge
option_unwrap_usedandresult_unwrap_usedintounwrap_used. #5563 - Merge
option_expect_usedandresult_expect_usedintoexpect_used. #5563 - Merge
for_loop_over_optionandfor_loop_over_resultintofor_loops_over_fallibles. #5563
Enhancements
- Avoid running cargo lints when not enabled to improve performance. #5505
- Extend
useless_conversionwithTryFromandTryInto. #5631 - Lint also in type parameters and where clauses in
unused_unit. #5592 - Do not suggest deriving
Defaultinnew_without_default. #5616
False Positive Fixes
while_let_on_iterator#5525empty_line_after_outer_attr#5609unnecessary_unwrap#5558comparison_chain#5596- Don't trigger
used_underscore_bindingin await desugaring. #5535 - Don't trigger
borrowed_boxon mutable references. #5491 - Allow
1 << 0inidentity_op. #5602 - Allow
use super::*;glob imports inwildcard_imports. #5564 - Whitelist more words in
doc_markdown. #5611 - Skip dev and build deps in
multiple_crate_versions. #5636 - Honor
allowattribute on arguments inptr_arg. #5647 - Honor lint level attributes for
redundant_field_names,just_underscores_and_digits,many_single_char_namesandsimilar_names. #5651 - Ignore calls to
leninor_fun_call. #4429
Suggestion Improvements
- Simplify suggestions in
manual_memcpy. #5536 - Fix suggestion in
redundant_pattern_matchingfor macros. #5511 - Avoid suggesting
copied()for mutable references inmap_clone. #5530 - Improve help message for
clone_double_ref. #5547
ICE Fixes
- Fix ICE caused in unwrap module. #5590
- Fix ICE on rustc test issue-69020-assoc-const-arith-overflow.rs #5499
Documentation
- Clarify the documentation of
unnecessary_mut_passed. #5639 - Extend example for
unneeded_field_pattern. #5541
Rust 1.44
Released 2020-06-04
New lints
explicit_deref_methods#5226implicit_saturating_sub#5427macro_use_imports#5230verbose_file_reads#5272future_not_send#5423redundant_pub_crate#5319large_const_arrays#5248result_map_or_into_option#5415redundant_allocation#5349fn_address_comparisons#5294vtable_address_comparisons#5294
Moves and Deprecations
- Deprecate
replace_constslint #5380 - Move
cognitive_complexityto nursery #5428 - Move
useless_transmuteto nursery #5364 - Downgrade
inefficient_to_stringto pedantic #5412 - Downgrade
option_optionto pedantic #5401 - Downgrade
unreadable_literalto pedantic #5419 - Downgrade
let_unit_valueto pedantic #5409 - Downgrade
trivially_copy_pass_by_refto pedantic #5410 - Downgrade
implicit_hasherto pedantic #5411
Enhancements
- On nightly you can now use
cargo clippy --fix -Z unstable-optionsto auto-fix lints that support this #5363 - Make
redundant_clonealso trigger on cases where the cloned value is not consumed. #5304 - Expand
integer_arithmeticto also disallow bit-shifting #5430 option_as_ref_derefnow detects more deref cases #5425large_enum_variantnow report the sizes of the largest and second-largest variants #5466bool_comparisonnow also checks for inequality comparisons that can be written more concisely #5365- Expand
clone_on_copyto work in method call arguments as well #5441 redundant_pattern_matchingnow also handleswhile let#5483integer_arithmeticnow also lints references of integers #5329- Expand
float_cmp_constto also work on arrays #5345 - Trigger
map_flattenwhen map is called on anOption#5473
False Positive Fixes
many_single_char_names#5468should_implement_trait#5437unused_self#5387redundant_clone#5453precedence#5445suspicious_op_assign_impl#5424needless_lifetimes#5293redundant_pattern#5287inconsistent_digit_grouping#5451
Suggestion Improvements
- Improved
question_marklint suggestion so that it doesn't add redundantas_ref()#5481 - Improve the suggested placeholder in
option_map_unit_fn#5292 - Improve suggestion for
match_single_bindingwhen triggered inside a closure #5350
ICE Fixes
Documentation
- Fix documentation generation for configurable lints #5353
- Update documentation for
new_ret_no_self#5448 - The documentation for
option_optionnow suggest using a tri-state enum #5403 - Fix bit mask example in
verbose_bit_maskdocumentation #5454 wildcard_importsdocumentation now mentions thatuse ...::prelude::*is not linted #5312
Rust 1.43
Released 2020-04-23
New lints
imprecise_flops#4897suboptimal_flops#4897wildcard_imports#5029single_component_path_imports#5058match_single_binding#5061let_underscore_lock#5101struct_excessive_bools#5125fn_params_excessive_bools#5125option_env_unwrap#5148lossy_float_literal#5202rest_pat_in_fully_bound_structs#5258
Moves and Deprecations
- Move
unneeded_field_patternto pedantic group #5200
Enhancements
- Make
missing_errors_doclint also trigger onasyncfunctions #5181 - Add more constants to
approx_constant#5193 - Extend
question_marklint #5266
False Positive Fixes
Suggestion Improvements
- Improve suggestion when blocks of code are suggested #5134
ICE Fixes
misc_earlylints #5129missing_errors_doc#5213- Fix ICE when evaluating
usizes #5256
Documentation
- Improve documentation of
iter_nth_zero - Add documentation pages for stable releases #5171
Others
- Clippy now completely runs on GitHub Actions #5190
Rust 1.42
Released 2020-03-12
New lints
filetype_is_file#4543let_underscore_must_use#4823modulo_arithmetic#4867mem_replace_with_default#4881mutable_key_type#4885option_as_ref_deref#4945wildcard_in_or_patterns#4960iter_nth_zero#4966invalid_atomic_ordering#4999skip_while_next#5067
Moves and Deprecations
- Move
transmute_float_to_intfrom nursery to complexity group #5015 - Move
range_plus_oneto pedantic group #5057 - Move
debug_assert_with_mut_callto nursery group #5106 - Deprecate
unused_label#4930
Enhancements
- Lint vectored IO in
unused_io_amount#5027 - Make
vec_boxconfigurable by adding a size threshold #5081 - Also lint constants in
cmp_nan#4910 - Fix false negative in
expect_fun_call#4915 - Fix false negative in
redundant_clone#5017
False Positive Fixes
map_clone#4937replace_consts#4977let_and_return#5008eq_op#5079possible_missing_comma#5083debug_assert_with_mut_call#5106- Don't trigger
let_underscore_must_usein external macros #5082 - Don't trigger
empty_loopinno_stdcrates #5086
Suggestion Improvements
option_map_unwrap_or#4634wildcard_enum_match_arm#4934cognitive_complexity#4935decimal_literal_representation#4956unknown_clippy_lints#4963explicit_into_iter_loop#4978useless_attribute#5022if_let_some_result#5032
ICE fixes
Documentation
- Improve documentation of
empty_enum,replace_consts,redundant_clone, anditerator_step_by_zero
Rust 1.41
Released 2020-01-30
- New Lints:
- Remove plugin interface, see Inside Rust Blog for details #4714
- Move
use_selfto nursery group #4863 - Deprecate
into_iter_on_array#4788 - Expand
string_lit_as_bytesto also trigger when literal has escapes #4808 - Fix false positive in
comparison_chain#4842 - Fix false positive in
while_immutable_condition#4730 - Fix false positive in
explicit_counter_loop#4803 - Fix false positive in
must_use_candidate#4794 - Fix false positive in
print_with_newlineandwrite_with_newline#4769 - Fix false positive in
derive_hash_xor_eq#4766 - Fix false positive in
missing_inline_in_public_items#4870 - Fix false positive in
string_add#4880 - Fix false positive in
float_arithmetic#4851 - Fix false positive in
cast_sign_loss#4883 - Fix false positive in
manual_swap#4877 - Fix ICEs occurring while checking some block expressions #4772
- Fix ICE in
use_self#4776 - Fix ICEs related to
const_generics#4780 - Display help when running
clippy-driverwithout arguments, instead of ICEing #4810 - Clippy has its own ICE message now #4588
- Show deprecated lints in the documentation again #4757
- Improve Documentation by adding positive examples to some lints #4832
Rust 1.40
Released 2019-12-19
- New Lints:
unneeded_wildcard_pattern#4537needless_doctest_main#4603suspicious_unary_op_formatting#4615debug_assert_with_mut_call#4680unused_self#4619inefficient_to_string#4683must_use_unit#4560must_use_candidate#4560double_must_use#4560comparison_chain#4569unsound_collection_transmute#4592panic#4657unreachable#4657todo#4657option_expect_used#4657result_expect_used#4657
- Move
redundant_cloneto perf group #4509 - Move
manual_mul_addto nursery group #4736 - Expand
unit_cmpto also work withassert_eq!,debug_assert_eq!,assert_ne!anddebug_assert_ne!#4613 - Expand
integer_arithmeticto also detect mutating arithmetic like+=#4585 - Fix false positive in
nonminimal_bool#4568 - Fix false positive in
missing_safety_doc#4611 - Fix false positive in
cast_sign_loss#4614 - Fix false positive in
redundant_clone#4509 - Fix false positive in
try_err#4721 - Fix false positive in
toplevel_ref_arg#4570 - Fix false positive in
multiple_inherent_impl#4593 - Improve more suggestions and tests in preparation for the unstable
cargo fix --clippy#4575 - Improve suggestion for
zero_ptr#4599 - Improve suggestion for
explicit_counter_loop#4691 - Improve suggestion for
mul_add#4602 - Improve suggestion for
assertions_on_constants#4635 - Fix ICE in
use_self#4671 - Fix ICE when encountering const casts #4590
Rust 1.39
Released 2019-11-07
- New Lints:
- Deprecate
unused_collectlint. This is fully covered by rustc's#[must_use]oncollect#4348 - Move
type_repetition_in_boundsto pedantic group #4403 - Move
cast_losslessto pedantic group #4539 temporary_cstring_as_ptrnow catches more cases #4425use_selfnow works in constructors, too #4525cargo_common_metadatanow checks for license files #4518cognitive_complexitynow includes the measured complexity in the warning message #4469- Fix false positives in
block_in_if_*lints #4458 - Fix false positive in
cast_lossless#4473 - Fix false positive in
clone_on_copy#4411 - Fix false positive in
deref_addrof#4487 - Fix false positive in
too_many_lines#4490 - Fix false positive in
new_ret_no_self#4365 - Fix false positive in
manual_swap#4478 - Fix false positive in
missing_const_for_fn#4450 - Fix false positive in
extra_unused_lifetimes#4477 - Fix false positive in
inherent_to_string#4460 - Fix false positive in
map_entry#4495 - Fix false positive in
unused_unit#4445 - Fix false positive in
redundant_pattern#4489 - Fix false positive in
wrong_self_convention#4369 - Improve various suggestions and tests in preparation for the unstable
cargo fix --clippy#4558 - Improve suggestions for
redundant_pattern_matching#4352 - Improve suggestions for
explicit_write#4544 - Improve suggestion for
or_fun_call#4522 - Improve suggestion for
match_as_ref#4446 - Improve suggestion for
unnecessary_fold_span#4382 - Add suggestions for
unseparated_literal_suffix#4401 - Add suggestions for
char_lit_as_u8#4418
Rust 1.38
Released 2019-09-26
- New Lints:
- Move
{unnnecessary,panicking}_unwrapout of nursery #4307 - Extend the
use_selflint to suggest uses ofSelf::Variant#4308 - Improve suggestion for needless return #4262
- Add auto-fixable suggestion for
let_unit#4337 - Fix false positive in
pub_enum_variant_namesandenum_variant_names#4345 - Fix false positive in
cast_ptr_alignment#4257 - Fix false positive in
string_lit_as_bytes#4233 - Fix false positive in
needless_lifetimes#4266 - Fix false positive in
float_cmp#4275 - Fix false positives in
needless_return#4274 - Fix false negative in
match_same_arms#4246 - Fix incorrect suggestion for
needless_bool#4335 - Improve suggestion for
cast_ptr_alignment#4257 - Improve suggestion for
single_char_literal#4361 - Improve suggestion for
len_zero#4314 - Fix ICE in
implicit_hasher#4268 - Fix allow bug in
trivially_copy_pass_by_ref#4250
Rust 1.37
Released 2019-08-15
- New Lints:
- Renamed Lint:
const_static_lifetimeis now calledredundant_static_lifetimes. The lint now covers statics in addition to consts #4162 match_same_armsnow warns for all identical arms, instead of only the first one #4102needless_returnnow works with void functions #4220- Fix false positive in
redundant_closure#4190 - Fix false positive in
useless_attribute#4107 - Fix incorrect suggestion for
float_cmp#4214 - Add suggestions for
print_with_newlineandwrite_with_newline#4136 - Improve suggestions for
option_map_unwrap_or_elseandresult_map_unwrap_or_else#4164 - Improve suggestions for
non_ascii_literal#4119 - Improve diagnostics for
let_and_return#4137 - Improve diagnostics for
trivially_copy_pass_by_ref#4071 - Add macro check for
unreadable_literal#4099
Rust 1.36
Released 2019-07-04
- New lints:
find_map,filter_map_next#4039 - New lint:
path_buf_push_overwrite#3954 - Move
path_buf_push_overwriteto the nursery #4013 - Split
redundant_closureintoredundant_closureandredundant_closure_for_method_calls#4110 - Allow allowing of
toplevel_ref_arglint #4007 - Fix false negative in
or_fun_callpertaining to nested constructors #4084 - Fix false positive in
or_fun_callpertaining to enum variant constructors #4018 - Fix false positive in
useless_let_if_seqpertaining to interior mutability #4035 - Fix false positive in
redundant_closurepertaining to non-function types #4008 - Fix false positive in
let_and_returnpertaining to attributes onlets #4024 - Fix false positive in
module_name_repetitionslint pertaining to attributes #4006 - Fix false positive on
assertions_on_constantspertaining todebug_assert!#3989 - Improve suggestion in
map_cloneto suggest.copied()where applicable #3970 #4043 - Improve suggestion for
search_is_some#4049 - Improve suggestion applicability for
naive_bytecount#3984 - Improve suggestion applicability for
while_let_loop#3975 - Improve diagnostics for
too_many_arguments#4053 - Improve diagnostics for
cast_lossless#4021 - Deal with macro checks in desugarings better #4082
- Add macro check for
unnecessary_cast#4026 - Remove
approx_constant's documentation's "Known problems" section. #4027 - Fix ICE in
suspicious_else_formatting#3960 - Fix ICE in
decimal_literal_representation#3931
Rust 1.35
Released 2019-05-20
- New lint:
drop_boundsto detectT: Dropbounds - Split
redundant_closureintoredundant_closureandredundant_closure_for_method_calls#4110 - Rename
cyclomatic_complexitytocognitive_complexity, start work on making lint more practical for Rust code - Move
get_unwrapto the restriction category - Improve suggestions for
iter_cloned_collect - Improve suggestions for
cast_losslessto suggest suffixed literals - Fix false positives in
print_with_newlineandwrite_with_newlinepertaining to raw strings - Fix false positive in
needless_range_looppertaining to structs without a.iter() - Fix false positive in
bool_comparisonpertaining to non-bool types - Fix false positive in
redundant_closurepertaining to differences in borrows - Fix false positive in
option_map_unwrap_oron non-copy types - Fix false positives in
missing_const_for_fnpertaining to macros and trait method impls - Fix false positive in
needless_pass_by_valuepertaining to procedural macros - Fix false positive in
needless_continuepertaining to loop labels - Fix false positive for
boxed_localpertaining to arguments moved into closures - Fix false positive for
use_selfin nested functions - Fix suggestion for
expect_fun_call(https://github.com/rust-lang/rust-clippy/pull/3846) - Fix suggestion for
explicit_counter_loopto deal with parenthesizing range variables - Fix suggestion for
single_char_patternto correctly escape single quotes - Avoid triggering
redundant_closurein macros - ICE fixes: #3805, #3772, #3741
Rust 1.34
Released 2019-04-10
- New lint:
assertions_on_constantsto detect for exampleassert!(true) - New lint:
dbg_macroto detect uses of thedbg!macro - New lint:
missing_const_for_fnthat can suggest functions to be madeconst - New lint:
too_many_linesto detect functions with excessive LOC. It can be configured using thetoo-many-lines-thresholdconfiguration. - New lint:
wildcard_enum_match_armto check for wildcard enum matches using_ - Expand
redundant_closureto also work for methods (not only functions) - Fix ICEs in
vec_box,needless_pass_by_valueandimplicit_hasher - Fix false positive in
cast_sign_loss - Fix false positive in
integer_arithmetic - Fix false positive in
unit_arg - Fix false positives in
implicit_return - Add suggestion to
explicit_write - Improve suggestions for
question_marklint - Fix incorrect suggestion for
cast_lossless - Fix incorrect suggestion for
expect_fun_call - Fix incorrect suggestion for
needless_bool - Fix incorrect suggestion for
needless_range_loop - Fix incorrect suggestion for
use_self - Fix incorrect suggestion for
while_let_on_iterator - Clippy is now slightly easier to invoke in non-cargo contexts. See #3665 for more details.
- We now have improved documentation on how to add new lints
Rust 1.33
Released 2019-02-26
- New lints:
implicit_return,vec_box,cast_ref_to_mut - The
rust-clippyrepository is now part of therust-langorg. - Rename
stuttertomodule_name_repetitions - Merge
new_without_default_deriveintonew_without_defaultlint - Move
large_digit_groupsfromstylegroup topedantic - Expand
bool_comparisonto check for<,<=,>,>=, and!=comparisons against booleans - Expand
no_effectto detect writes to constants such asA_CONST.field = 2 - Expand
redundant_cloneto work on struct fields - Expand
suspicious_else_formattingto detectif .. {..} {..} - Expand
use_selfto work on tuple structs and also in local macros - Fix ICE in
result_map_unit_fnandoption_map_unit_fn - Fix false positives in
implicit_return - Fix false positives in
use_self - Fix false negative in
clone_on_copy - Fix false positive in
doc_markdown - Fix false positive in
empty_loop - Fix false positive in
if_same_then_else - Fix false positive in
infinite_iter - Fix false positive in
question_mark - Fix false positive in
useless_asref - Fix false positive in
wildcard_dependencies - Fix false positive in
write_with_newline - Add suggestion to
explicit_write - Improve suggestions for
question_marklint - Fix incorrect suggestion for
get_unwrap
Rust 1.32
Released 2019-01-17
- New lints:
slow_vector_initialization,mem_discriminant_non_enum,redundant_clone,wildcard_dependencies,into_iter_on_ref,into_iter_on_array,deprecated_cfg_attr,mem_discriminant_non_enum,cargo_common_metadata - Add support for
u128andi128to integer related lints - Add float support to
mistyped_literal_suffixes - Fix false positives in
use_self - Fix false positives in
missing_comma - Fix false positives in
new_ret_no_self - Fix false positives in
possible_missing_comma - Fix false positive in
integer_arithmeticin constant items - Fix false positive in
needless_borrow - Fix false positive in
out_of_bounds_indexing - Fix false positive in
new_without_default_derive - Fix false positive in
string_lit_as_bytes - Fix false negative in
out_of_bounds_indexing - Fix false negative in
use_self. It will now also check existential types - Fix incorrect suggestion for
redundant_closure_call - Fix various suggestions that contained expanded macros
- Fix
bool_comparisontriggering 3 times on on on the same code - Expand
trivially_copy_pass_by_refto work on trait methods - Improve suggestion for
needless_range_loop - Move
needless_pass_by_valuefrompedanticgroup tostyle
Rust 1.31
Released 2018-12-06
- Clippy has been relicensed under a dual MIT / Apache license. See #3093 for more information.
- With Rust 1.31, Clippy is no longer available via crates.io. The recommended
installation method is via
rustup component add clippy. - New lints:
redundant_pattern_matching,unnecessary_filter_map,unused_unit,map_flatten,mem_replace_option_with_none - Fix ICE in
if_let_redundant_pattern_matching - Fix ICE in
needless_pass_by_valuewhen encountering a generic function argument with a lifetime parameter - Fix ICE in
needless_range_loop - Fix ICE in
single_char_patternwhen encountering a constant value - Fix false positive in
assign_op_pattern - Fix false positive in
boxed_localon trait implementations - Fix false positive in
cmp_owned - Fix false positive in
collapsible_ifwhen conditionals have comments - Fix false positive in
double_parens - Fix false positive in
excessive_precision - Fix false positive in
explicit_counter_loop - Fix false positive in
fn_to_numeric_cast_with_truncation - Fix false positive in
map_clone - Fix false positive in
new_ret_no_self - Fix false positive in
new_without_defaultwhennewis unsafe - Fix false positive in
type_complexitywhen using extern types - Fix false positive in
useless_format - Fix false positive in
wrong_self_convention - Fix incorrect suggestion for
excessive_precision - Fix incorrect suggestion for
expect_fun_call - Fix incorrect suggestion for
get_unwrap - Fix incorrect suggestion for
useless_format fn_to_numeric_cast_with_truncationlint can be disabled again- Improve suggestions for
manual_memcpy - Improve help message for
needless_lifetimes
Rust 1.30
Released 2018-10-25
- Deprecate
assign_opslint - New lints:
mistyped_literal_suffixes,ptr_offset_with_cast,needless_collect,copy_iterator cargo clippy -Vnow includes the Clippy commit hash of the Rust Clippy component- Fix ICE in
implicit_hasher - Fix ICE when encountering
println!("{}" a); - Fix ICE when encountering a macro call in match statements
- Fix false positive in
default_trait_access - Fix false positive in
trivially_copy_pass_by_ref - Fix false positive in
similar_names - Fix false positive in
redundant_field_name - Fix false positive in
expect_fun_call - Fix false negative in
identity_conversion - Fix false negative in
explicit_counter_loop - Fix
range_plus_onesuggestion and false negative print_with_newline/write_with_newline: don't warn about string with several\ns in them- Fix
useless_attributeto also whitelistunused_extern_crates - Fix incorrect suggestion for
single_char_pattern - Improve suggestion for
identity_conversionlint - Move
explicit_iter_loopandexplicit_into_iter_loopfromstylegroup topedantic - Move
range_plus_oneandrange_minus_onefromnurserygroup tocomplexity - Move
shadow_unrelatedfromrestrictiongroup topedantic - Move
indexing_slicingfrompedanticgroup torestriction
Rust 1.29
Released 2018-09-13
- 🎉 🎉 Rust 1.29 is the first stable Rust that includes a bundled Clippy 🎉
🎉
You can now run
rustup component add clippy-previewand thencargo clippyto run Clippy. This should put an end to the continuous nightly upgrades for Clippy users. - Clippy now follows the Rust versioning scheme instead of its own
- Fix ICE when encountering a
while let (..) = x.iter()construct - Fix false positives in
use_self - Fix false positive in
trivially_copy_pass_by_ref - Fix false positive in
useless_attributelint - Fix false positive in
print_literal - Fix
use_selfregressions - Improve lint message for
neg_cmp_op_on_partial_ord - Improve suggestion highlight for
single_char_pattern - Improve suggestions for various print/write macro lints
- Improve website header
0.0.212 (2018-07-10)
- Rustup to rustc 1.29.0-nightly (
e06c875442018-07-06)
0.0.211
- Rustup to rustc 1.28.0-nightly (
e3bf634e02018-06-28)
0.0.210
- Rustup to rustc 1.28.0-nightly (
01cc982e92018-06-24)
0.0.209
- Rustup to rustc 1.28.0-nightly (
5230979792018-06-18)
0.0.208
- Rustup to rustc 1.28.0-nightly (
86a8f1a632018-06-17)
0.0.207
- Rustup to rustc 1.28.0-nightly (
2a00629742018-06-09)
0.0.206
- Rustup to rustc 1.28.0-nightly (
5bf68db6e2018-05-28)
0.0.205
- Rustup to rustc 1.28.0-nightly (
990d8aa742018-05-25) - Rename
unused_lifetimestoextra_unused_lifetimesbecause of naming conflict with new rustc lint
0.0.204
- Rustup to rustc 1.28.0-nightly (
71e87be382018-05-22)
0.0.203
- Rustup to rustc 1.28.0-nightly (
a3085756e2018-05-19) - Clippy attributes are now of the form
clippy::cyclomatic_complexityinstead ofclippy(cyclomatic_complexity)
0.0.202
- Rustup to rustc 1.28.0-nightly (
952f344cd2018-05-18)
0.0.201
- Rustup to rustc 1.27.0-nightly (
2f2a11dfc2018-05-16)
0.0.200
- Rustup to rustc 1.27.0-nightly (
9fae153742018-05-13)
0.0.199
- Rustup to rustc 1.27.0-nightly (
ff2ac35db2018-05-12)
0.0.198
- Rustup to rustc 1.27.0-nightly (
acd3871ba2018-05-10)
0.0.197
- Rustup to rustc 1.27.0-nightly (
428ea5f6b2018-05-06)
0.0.196
- Rustup to rustc 1.27.0-nightly (
e82261dfb2018-05-03)
0.0.195
- Rustup to rustc 1.27.0-nightly (
ac3c2288f2018-04-18)
0.0.194
- Rustup to rustc 1.27.0-nightly (
bd40cbbe12018-04-14) - New lints:
cast_ptr_alignment,transmute_ptr_to_ptr,write_literal,write_with_newline,writeln_empty_string
0.0.193
- Rustup to rustc 1.27.0-nightly (
eeea94c112018-04-06)
0.0.192
- Rustup to rustc 1.27.0-nightly (
fb44b4c0e2018-04-04) - New lint:
print_literal
0.0.191
- Rustup to rustc 1.26.0-nightly (
ae544ee1c2018-03-29) - Lint audit; categorize lints as style, correctness, complexity, pedantic, nursery, restriction.
0.0.190
- Fix a bunch of intermittent cargo bugs
0.0.189
- Rustup to rustc 1.26.0-nightly (
5508b27142018-03-18)
0.0.188
- Rustup to rustc 1.26.0-nightly (
3926453942018-03-15) - New lint:
while_immutable_condition
0.0.187
- Rustup to rustc 1.26.0-nightly (
322d7f7b92018-02-25) - New lints:
redundant_field_names,suspicious_arithmetic_impl,suspicious_op_assign_impl
0.0.186
- Rustup to rustc 1.25.0-nightly (
0c6091fbd2018-02-04) - Various false positive fixes
0.0.185
- Rustup to rustc 1.25.0-nightly (
56733bc9f2018-02-01) - New lint:
question_mark
0.0.184
- Rustup to rustc 1.25.0-nightly (
90eb44a582018-01-29) - New lints:
double_comparisons,empty_line_after_outer_attr
0.0.183
- Rustup to rustc 1.25.0-nightly (
21882aad72018-01-28) - New lint:
misaligned_transmute
0.0.182
- Rustup to rustc 1.25.0-nightly (
a0dcecff92018-01-24) - New lint:
decimal_literal_representation
0.0.181
- Rustup to rustc 1.25.0-nightly (
97520ccb12018-01-21) - New lints:
else_if_without_else,option_option,unit_arg,unnecessary_fold - Removed
unit_expr - Various false positive fixes for
needless_pass_by_value
0.0.180
- Rustup to rustc 1.25.0-nightly (
3f92e8d892018-01-14)
0.0.179
- Rustup to rustc 1.25.0-nightly (
61452e5062018-01-09)
0.0.178
- Rustup to rustc 1.25.0-nightly (
ee220daca2018-01-07)
0.0.177
- Rustup to rustc 1.24.0-nightly (
250b492052017-12-21) - New lint:
match_as_ref
0.0.176
- Rustup to rustc 1.24.0-nightly (
0077d128d2017-12-14)
0.0.175
- Rustup to rustc 1.24.0-nightly (
bb42071f62017-12-01)
0.0.174
- Rustup to rustc 1.23.0-nightly (
63739ab7b2017-11-21)
0.0.173
- Rustup to rustc 1.23.0-nightly (
33374fa9d2017-11-20)
0.0.172
- Rustup to rustc 1.23.0-nightly (
d0f8e29132017-11-16)
0.0.171
- Rustup to rustc 1.23.0-nightly (
ff0f5de3b2017-11-14)
0.0.170
- Rustup to rustc 1.23.0-nightly (
d6b06c63a2017-11-09)
0.0.169
- Rustup to rustc 1.23.0-nightly (
3b82e4c742017-11-05) - New lints:
just_underscores_and_digits,result_map_unwrap_or_else,transmute_bytes_to_str
0.0.168
- Rustup to rustc 1.23.0-nightly (
f0fe716db2017-10-30)
0.0.167
- Rustup to rustc 1.23.0-nightly (
90ef3372e2017-10-29) - New lints:
const_static_lifetime,erasing_op,fallible_impl_from,println_empty_string,useless_asref
0.0.166
- Rustup to rustc 1.22.0-nightly (
b7960878b2017-10-18) - New lints:
explicit_write,identity_conversion,implicit_hasher,invalid_ref,option_map_or_none,range_minus_one,range_plus_one,transmute_int_to_bool,transmute_int_to_char,transmute_int_to_float
0.0.165
- Rust upgrade to rustc 1.22.0-nightly (
0e6f4cf512017-09-27) - New lint:
mut_range_bound
0.0.164
- Update to rustc 1.22.0-nightly (
6c476ce462017-09-25) - New lint:
int_plus_one
0.0.163
- Update to rustc 1.22.0-nightly (
14039a42a2017-09-22)
0.0.162
- Update to rustc 1.22.0-nightly (
0701b37d92017-09-18) - New lint:
chars_last_cmp - Improved suggestions for
needless_borrow,ptr_arg,
0.0.161
- Update to rustc 1.22.0-nightly (
539f2083d2017-09-13)
0.0.160
- Update to rustc 1.22.0-nightly (
dd08c30702017-09-12)
0.0.159
- Update to rustc 1.22.0-nightly (
eba374fb22017-09-11) - New lint:
clone_on_ref_ptr
0.0.158
- New lint:
manual_memcpy cast_losslessno longer has redundant parentheses in its suggestions- Update to rustc 1.22.0-nightly (
dead08cb32017-09-08)
0.0.157 - 2017-09-04
- Update to rustc 1.22.0-nightly (
981ce7d8d2017-09-03) - New lint:
unit_expr
0.0.156 - 2017-09-03
- Update to rustc 1.22.0-nightly (
744dd6c1d2017-09-02)
0.0.155
- Update to rustc 1.21.0-nightly (
c11f689d22017-08-29) - New lint:
infinite_iter,maybe_infinite_iter,cast_lossless
0.0.154
- Update to rustc 1.21.0-nightly (
2c0558f632017-08-24) - Fix
use_selftriggering inside derives - Add support for linting an entire workspace with
cargo clippy --all - New lint:
naive_bytecount
0.0.153
0.0.152
- Update to rustc 1.21.0-nightly (
df511d5542017-08-14)
0.0.151
- Update to rustc 1.21.0-nightly (
13d94d5fa2017-08-10)
0.0.150
- Update to rustc 1.21.0-nightly (
215e0b10e2017-08-08)
0.0.148
- Update to rustc 1.21.0-nightly (
37c7d0ebb2017-07-31) - New lints:
unreadable_literal,inconsistent_digit_grouping,large_digit_groups
0.0.147
- Update to rustc 1.21.0-nightly (
aac223f4f2017-07-30)
0.0.146
- Update to rustc 1.21.0-nightly (
52a3309692017-07-27) - Fixes false positives in
inline_always - Fixes false negatives in
panic_params
0.0.145
- Update to rustc 1.20.0-nightly (
afe145d222017-07-23)
0.0.144
- Update to rustc 1.20.0-nightly (
086eaa78e2017-07-15)
0.0.143
- Update to rustc 1.20.0-nightly (
d84693b932017-07-09) - Fix
cargo clippycrashing ondylibprojects - Fix false positives around
nested_while_letandnever_loop
0.0.142
- Update to rustc 1.20.0-nightly (
0679711392017-07-02)
0.0.141
- Rewrite of the
doc_markdownlint. - Deprecated
range_step_by_zero - New lint:
iterator_step_by_zero - New lint:
needless_borrowed_reference - Update to rustc 1.20.0-nightly (
69c65d2962017-06-28)
0.0.140 - 2017-06-16
- Update to rustc 1.19.0-nightly (
258ae6dd92017-06-15)
0.0.139 — 2017-06-10
- Update to rustc 1.19.0-nightly (
4bf5c99af2017-06-10) - Fix bugs with for loop desugaring
- Check for
AsRef/AsMutarguments inwrong_self_convention
0.0.138 — 2017-06-05
- Update to rustc 1.19.0-nightly (
0418fa9d32017-06-04)
0.0.137 — 2017-06-05
- Update to rustc 1.19.0-nightly (
6684d176c2017-06-03)
0.0.136 — 2017—05—26
- Update to rustc 1.19.0-nightly (
5579677662017-05-26)
0.0.135 — 2017—05—24
- Update to rustc 1.19.0-nightly (
5b13bff522017-05-23)
0.0.134 — 2017—05—19
- Update to rustc 1.19.0-nightly (
0ed1ec9f92017-05-18)
0.0.133 — 2017—05—14
- Update to rustc 1.19.0-nightly (
826d8f3852017-05-13)
0.0.132 — 2017—05—05
- Fix various bugs and some ices
0.0.131 — 2017—05—04
- Update to rustc 1.19.0-nightly (
2d4ed8e0c2017-05-03)
0.0.130 — 2017—05—03
- Update to rustc 1.19.0-nightly (
6a5fc9eec2017-05-02)
0.0.129 — 2017-05-01
- Update to rustc 1.19.0-nightly (
06fb4d2562017-04-30)
0.0.128 — 2017-04-28
- Update to rustc 1.18.0-nightly (
94e884b632017-04-27)
0.0.127 — 2017-04-27
- Update to rustc 1.18.0-nightly (
0369832012017-04-26) - New lint:
needless_continue
0.0.126 — 2017-04-24
- Update to rustc 1.18.0-nightly (
2bd4b5c6d2017-04-23)
0.0.125 — 2017-04-19
- Update to rustc 1.18.0-nightly (
9f2abadca2017-04-18)
0.0.124 — 2017-04-16
- Update to rustc 1.18.0-nightly (
d5cf1cb642017-04-15)
0.0.123 — 2017-04-07
- Fix various false positives
0.0.122 — 2017-04-07
0.0.121 — 2017-03-21
- Rustup to rustc 1.17.0-nightly (
134c4a0f02017-03-20)
0.0.120 — 2017-03-17
- Rustup to rustc 1.17.0-nightly (
0aeb9c1292017-03-15)
0.0.119 — 2017-03-13
- Rustup to rustc 1.17.0-nightly (
824c9ebbd2017-03-12)
0.0.118 — 2017-03-05
- Rustup to rustc 1.17.0-nightly (
b1e31766d2017-03-03)
0.0.117 — 2017-03-01
- Rustup to rustc 1.17.0-nightly (
be760566c2017-02-28)
0.0.116 — 2017-02-28
- Fix
cargo clippyon 64 bit windows systems
0.0.115 — 2017-02-27
- Rustup to rustc 1.17.0-nightly (
60a0edc6c2017-02-26) - New lints:
zero_ptr,never_loop,mut_from_ref
0.0.114 — 2017-02-08
- Rustup to rustc 1.17.0-nightly (
c49d102072017-02-07) - Tests are now ui tests (testing the exact output of rustc)
0.0.113 — 2017-02-04
- Rustup to rustc 1.16.0-nightly (
eedaa94e32017-02-02) - New lint:
large_enum_variant explicit_into_iter_loopprovides suggestions
0.0.112 — 2017-01-27
- Rustup to rustc 1.16.0-nightly (
df8debf6d2017-01-25)
0.0.111 — 2017-01-21
- Rustup to rustc 1.16.0-nightly (
a52da95ce2017-01-20)
0.0.110 — 2017-01-20
- Add badges and categories to
Cargo.toml
0.0.109 — 2017-01-19
- Update to rustc 1.16.0-nightly (
c07a6ae772017-01-17)
0.0.108 — 2017-01-12
- Update to rustc 1.16.0-nightly (
2782e8f8f2017-01-12)
0.0.107 — 2017-01-11
- Update regex dependency
- Fix FP when matching
&&mutby&ref - Reintroduce
for (_, x) in &mut hash_map->for x in hash_map.values_mut() - New lints:
unused_io_amount,forget_ref,short_circuit_statement
0.0.106 — 2017-01-04
- Fix FP introduced by rustup in
wrong_self_convention
0.0.105 — 2017-01-04
- Update to rustc 1.16.0-nightly (
4682271292017-01-03) - New lints:
deref_addrof,double_parens,pub_enum_variant_names - Fix suggestion in
new_without_default - FP fix in
absurd_extreme_comparisons
0.0.104 — 2016-12-15
- Update to rustc 1.15.0-nightly (
8f02c429a2016-12-15)
0.0.103 — 2016-11-25
- Update to rustc 1.15.0-nightly (
d5814b03e2016-11-23)
0.0.102 — 2016-11-24
- Update to rustc 1.15.0-nightly (
3bf2be9ce2016-11-22)
0.0.101 — 2016-11-23
- Update to rustc 1.15.0-nightly (
7b3eeea222016-11-21) - New lint:
string_extend_chars
0.0.100 — 2016-11-20
- Update to rustc 1.15.0-nightly (
ac635aa952016-11-18)
0.0.99 — 2016-11-18
- Update to rustc 1.15.0-nightly (
0ed9519932016-11-14) - New lint:
get_unwrap
0.0.98 — 2016-11-08
- Fixes an issue due to a change in how cargo handles
--sysroot, which brokecargo clippy
0.0.97 — 2016-11-03
- For convenience,
cargo clippydefines acargo-clippyfeature. This was previously added for a short time under the nameclippybut removed for compatibility. cargo clippy --helpis more helping (and less helpful 😄)- Rustup to rustc 1.14.0-nightly (
5665bdf3e2016-11-02) - New lints:
if_let_redundant_pattern_matching,partialeq_ne_impl
0.0.96 — 2016-10-22
- Rustup to rustc 1.14.0-nightly (
f094206852016-10-20) - New lint:
iter_skip_next
0.0.95 — 2016-10-06
- Rustup to rustc 1.14.0-nightly (
3210fd5c22016-10-05)
0.0.94 — 2016-10-04
- Fixes bustage on Windows due to forbidden directory name
0.0.93 — 2016-10-03
- Rustup to rustc 1.14.0-nightly (
144af3e972016-10-02) option_map_unwrap_orandoption_map_unwrap_or_elseare now allowed by default.- New lint:
explicit_into_iter_loop
0.0.92 — 2016-09-30
- Rustup to rustc 1.14.0-nightly (
289f3a4ca2016-09-29)
0.0.91 — 2016-09-28
- Rustup to rustc 1.13.0-nightly (
d0623cf7b2016-09-26)
0.0.90 — 2016-09-09
- Rustup to rustc 1.13.0-nightly (
f1f40f8502016-09-09)
0.0.89 — 2016-09-06
- Rustup to rustc 1.13.0-nightly (
cbe4de78e2016-09-05)
0.0.88 — 2016-09-04
- Rustup to rustc 1.13.0-nightly (
70598e04f2016-09-03) - The following lints are not new but were only usable through the
clippylint groups:filter_next,for_loop_over_option,for_loop_over_resultandmatch_overlapping_arm. You should now be able to#[allow/deny]them individually and they are available directly throughcargo clippy.
0.0.87 — 2016-08-31
- Rustup to rustc 1.13.0-nightly (
eac41469d2016-08-30) - New lints:
builtin_type_shadow - Fix FP in
zero_prefixed_literaland0b/0o
0.0.86 — 2016-08-28
- Rustup to rustc 1.13.0-nightly (
a23064af52016-08-27) - New lints:
missing_docs_in_private_items,zero_prefixed_literal
0.0.85 — 2016-08-19
- Fix ICE with
useless_attribute useless_attributeignoresunused_importsonusestatements
0.0.84 — 2016-08-18
- Rustup to rustc 1.13.0-nightly (
aef6971ca2016-08-17)
0.0.83 — 2016-08-17
- Rustup to rustc 1.12.0-nightly (
1bf5fa3262016-08-16) - New lints:
print_with_newline,useless_attribute
0.0.82 — 2016-08-17
- Rustup to rustc 1.12.0-nightly (
197be89f32016-08-15) - New lint:
module_inception
0.0.81 — 2016-08-14
- Rustup to rustc 1.12.0-nightly (
1deb02ea62016-08-12) - New lints:
eval_order_dependence,mixed_case_hex_literals,unseparated_literal_suffix - False positive fix in
too_many_arguments - Addition of functionality to
needless_borrow - Suggestions for
clone_on_copy - Bug fix in
wrong_self_convention - Doc improvements
0.0.80 — 2016-07-31
- Rustup to rustc 1.12.0-nightly (
1225e122f2016-07-30) - New lints:
misrefactored_assign_op,serde_api_misuse
0.0.79 — 2016-07-10
- Rustup to rustc 1.12.0-nightly (
f93aaf84c2016-07-09) - Major suggestions refactoring
0.0.78 — 2016-07-02
- Rustup to rustc 1.11.0-nightly (
01411937f2016-07-01) - New lints:
wrong_transmute,double_neg,filter_map - For compatibility,
cargo clippydoes not defines theclippyfeature introduced in 0.0.76 anymore collapsible_ifnow considersif let
0.0.77 — 2016-06-21
0.0.76 — 2016-06-10
- Rustup to rustc 1.11.0-nightly (
7d2f75a952016-06-09) cargo clippynow automatically defines theclippyfeature- New lint:
not_unsafe_ptr_arg_deref
0.0.75 — 2016-06-08
- Rustup to rustc 1.11.0-nightly (
763f9234b2016-06-06)
0.0.74 — 2016-06-07
- Fix bug with
cargo-clippyJSON parsing - Add the
CLIPPY_DISABLE_DOCS_LINKSenvironment variable to deactivate the “for further information visit lint-link” message.
0.0.73 — 2016-06-05
- Fix false positives in
useless_let_if_seq
0.0.72 — 2016-06-04
- Fix false positives in
useless_let_if_seq
0.0.71 — 2016-05-31
- Rustup to rustc 1.11.0-nightly (
a967611d82016-05-30) - New lint:
useless_let_if_seq
0.0.70 — 2016-05-28
- Rustup to rustc 1.10.0-nightly (
7bddce6932016-05-27) invalid_regexandtrivial_regexcan now warn onRegexSet::new,RegexBuilder::newand byte regexes
0.0.69 — 2016-05-20
- Rustup to rustc 1.10.0-nightly (
476fe6eef2016-05-21) used_underscore_bindinghas been madeAllowtemporarily
0.0.68 — 2016-05-17
- Rustup to rustc 1.10.0-nightly (
cd6a400172016-05-16) - New lint:
unnecessary_operation
0.0.67 — 2016-05-12
- Rustup to rustc 1.10.0-nightly (
22ac88f1a2016-05-11)
0.0.66 — 2016-05-11
- New
cargo clippysubcommand - New lints:
assign_op_pattern,assign_ops,needless_borrow
0.0.65 — 2016-05-08
- Rustup to rustc 1.10.0-nightly (
62e2b2fb72016-05-06) - New lints:
float_arithmetic,integer_arithmetic
0.0.64 — 2016-04-26
- Rustup to rustc 1.10.0-nightly (
645dd013a2016-04-24) - New lints:
temporary_cstring_as_ptr,unsafe_removed_from_name, andmem_forget
0.0.63 — 2016-04-08
- Rustup to rustc 1.9.0-nightly (
7979dd6082016-04-07)
0.0.62 — 2016-04-07
- Rustup to rustc 1.9.0-nightly (
bf5da36f12016-04-06)
0.0.61 — 2016-04-03
- Rustup to rustc 1.9.0-nightly (
5ab11d72c2016-04-02) - New lint:
invalid_upcast_comparisons
0.0.60 — 2016-04-01
- Rustup to rustc 1.9.0-nightly (
e1195c24b2016-03-31)
0.0.59 — 2016-03-31
- Rustup to rustc 1.9.0-nightly (
30a3849f22016-03-30) - New lints:
logic_bug,nonminimal_bool - Fixed:
match_same_armsnow ignores arms with guards - Improved:
useless_vecnow warns onfor … in vec![…]
0.0.58 — 2016-03-27
- Rustup to rustc 1.9.0-nightly (
d5a91e6952016-03-26) - New lint:
doc_markdown
0.0.57 — 2016-03-27
- Update to rustc 1.9.0-nightly (
a1e29daf12016-03-25) - Deprecated lints:
str_to_string,string_to_string,unstable_as_slice,unstable_as_mut_slice - New lint:
crosspointer_transmute
0.0.56 — 2016-03-23
- Update to rustc 1.9.0-nightly (
0dcc413e42016-03-22) - New lints:
many_single_char_namesandsimilar_names
0.0.55 — 2016-03-21
- Update to rustc 1.9.0-nightly (
02310fd312016-03-19)
0.0.54 — 2016-03-16
- Update to rustc 1.9.0-nightly (
c66d2380a2016-03-15)
0.0.53 — 2016-03-15
- Add a configuration file
0.0.52
0.0.51 — 2016-03-13
- Add
strto types considered bylen_zero - New lints:
indexing_slicing
0.0.50 — 2016-03-11
- Update to rustc 1.9.0-nightly (
c9629d61c2016-03-10)
0.0.49 — 2016-03-09
- Update to rustc 1.9.0-nightly (
eabfc160f2016-03-08) - New lints:
overflow_check_conditional,unused_label,new_without_default
0.0.48 — 2016-03-07
- Fixed: ICE in
needless_range_loopwith globals
0.0.47 — 2016-03-07
- Update to rustc 1.9.0-nightly (
998a6720b2016-03-07) - New lint:
redundant_closure_call