1 // error-pattern:cargo-clippy
3 #![feature(box_syntax)]
4 #![feature(custom_attribute)]
7 #![feature(rustc_private)]
8 #![feature(slice_patterns)]
9 #![feature(stmt_expr_attributes)]
10 #![feature(conservative_impl_trait)]
11 #![feature(inclusive_range_syntax, range_contains)]
12 #![feature(macro_vis_matcher)]
13 #![allow(unknown_lints, indexing_slicing, shadow_reuse, missing_docs_in_private_items)]
14 #![recursion_limit = "256"]
18 extern crate rustc_typeck
;
20 extern crate syntax_pos
;
24 // for unicode nfc normalization
26 extern crate unicode_normalization
;
28 // for semver check in attrs.rs
34 extern crate regex_syntax
;
36 // for finding minimal boolean expressions
38 extern crate quine_mc_cluskey
;
40 extern crate rustc_const_eval
;
41 extern crate rustc_const_math
;
42 extern crate rustc_errors
;
43 extern crate rustc_plugin
;
46 extern crate matches
as matches_macro
;
50 extern crate serde_derive
;
53 extern crate lazy_static
;
55 extern crate itertools
;
56 extern crate pulldown_cmark
;
60 extern crate if_chain
;
62 macro_rules
! declare_restriction_lint
{
63 { pub $name:tt, $description:tt }
=> {
64 declare_lint
! { pub $name, Allow, $description }
72 // begin lints modules, do not remove this comment, it’s used in `update_lints`
75 pub mod array_indexing
;
79 pub mod blacklisted_name
;
80 pub mod block_in_if_condition
;
83 pub mod collapsible_if
;
84 pub mod const_static_lifetime
;
86 pub mod cyclomatic_complexity
;
89 pub mod double_comparison
;
90 pub mod double_parens
;
91 pub mod drop_forget_ref
;
92 pub mod else_if_without_else
;
96 pub mod enum_glob_use
;
97 pub mod enum_variants
;
101 pub mod eta_reduction
;
102 pub mod eval_order_dependence
;
103 pub mod explicit_write
;
104 pub mod fallible_impl_from
;
108 pub mod identity_conversion
;
110 pub mod if_let_redundant_pattern_matching
;
112 pub mod infinite_iter
;
113 pub mod inline_fn_without_body
;
114 pub mod int_plus_one
;
116 pub mod items_after_statements
;
117 pub mod large_enum_variant
;
121 pub mod literal_representation
;
132 pub mod mut_reference
;
133 pub mod mutex_atomic
;
134 pub mod needless_bool
;
135 pub mod needless_borrow
;
136 pub mod needless_borrowed_ref
;
137 pub mod needless_continue
;
138 pub mod needless_pass_by_value
;
139 pub mod needless_update
;
140 pub mod neg_multiply
;
141 pub mod new_without_default
;
143 pub mod non_expressive_names
;
145 pub mod open_options
;
146 pub mod overflow_check_conditional
;
148 pub mod partialeq_ne_impl
;
152 pub mod question_mark
;
156 pub mod replace_consts
;
162 pub mod temporary_assignment
;
166 pub mod unsafe_removed_from_name
;
167 pub mod unused_io_amount
;
168 pub mod unused_label
;
171 pub mod zero_div_zero
;
172 // end lints modules, do not remove this comment, it’s used in `update_lints`
175 pub use syntax
::ast
::{Name, NodeId}
;
178 #[cfg_attr(rustfmt, rustfmt_skip)]
179 pub fn register_plugins(reg
: &mut rustc_plugin
::Registry
) {
180 let conf
= match utils
::conf
::file_from_args(reg
.args()) {
182 // if the user specified a file, it must exist, otherwise default to `clippy.toml` but
183 // do not require the file to exist
184 let file_name
= if let Some(file_name
) = file_name
{
187 match utils
::conf
::lookup_conf_file() {
190 reg
.sess
.struct_err(&format
!("error finding Clippy's configuration file: {}", error
)).emit();
196 let file_name
= file_name
.map(|file_name
| if file_name
.is_relative() {
198 .local_crate_source_file
200 .and_then(|file
| std
::path
::Path
::new(&file
).parent().map(std
::path
::Path
::to_path_buf
))
207 let (conf
, errors
) = utils
::conf
::read(file_name
.as_ref().map(|p
| p
.as_ref()));
209 // all conf errors are non-fatal, we just use the default conf in case of error
210 for error
in errors
{
211 reg
.sess
.struct_err(&format
!("error reading Clippy's configuration file `{}`: {}", file_name
.as_ref().and_then(|p
| p
.to_str()).unwrap_or(""), error
)).emit();
216 Err((err
, span
)) => {
217 reg
.sess
.struct_span_err(span
, err
)
218 .span_note(span
, "Clippy will use default configuration")
220 toml
::from_str("").expect("we never error on empty config files")
224 let mut store
= reg
.sess
.lint_store
.borrow_mut();
225 store
.register_removed(
227 "`assert!()` will be more flexible with RFC 2011",
229 store
.register_removed(
231 "`.extend_from_slice(_)` is a faster way to extend a Vec by a slice",
233 store
.register_removed(
234 "range_step_by_zero",
235 "`iterator.step_by(0)` panics nowadays",
237 store
.register_removed(
239 "`Vec::as_slice` has been stabilized in 1.7",
241 store
.register_removed(
242 "unstable_as_mut_slice",
243 "`Vec::as_mut_slice` has been stabilized in 1.7",
245 store
.register_removed(
247 "using `str::to_string` is common even today and specialization will likely happen soon",
249 store
.register_removed(
251 "using `string::to_string` is common even today and specialization will likely happen soon",
253 // end deprecated lints, do not remove this comment, it’s used in `update_lints`
255 reg
.register_late_lint_pass(box serde_api
::Serde
);
256 reg
.register_early_lint_pass(box utils
::internal_lints
::Clippy
);
257 reg
.register_late_lint_pass(box utils
::internal_lints
::LintWithoutLintPass
::default());
258 reg
.register_late_lint_pass(box utils
::inspector
::Pass
);
259 reg
.register_late_lint_pass(box utils
::author
::Pass
);
260 reg
.register_late_lint_pass(box types
::TypePass
);
261 reg
.register_late_lint_pass(box booleans
::NonminimalBool
);
262 reg
.register_late_lint_pass(box eq_op
::EqOp
);
263 reg
.register_early_lint_pass(box enum_variants
::EnumVariantNames
::new(conf
.enum_variant_name_threshold
));
264 reg
.register_late_lint_pass(box enum_glob_use
::EnumGlobUse
);
265 reg
.register_late_lint_pass(box enum_clike
::UnportableVariant
);
266 reg
.register_late_lint_pass(box bit_mask
::BitMask
::new(conf
.verbose_bit_mask_threshold
));
267 reg
.register_late_lint_pass(box ptr
::PointerPass
);
268 reg
.register_late_lint_pass(box needless_bool
::NeedlessBool
);
269 reg
.register_late_lint_pass(box needless_bool
::BoolComparison
);
270 reg
.register_late_lint_pass(box approx_const
::Pass
);
271 reg
.register_late_lint_pass(box misc
::Pass
);
272 reg
.register_early_lint_pass(box precedence
::Precedence
);
273 reg
.register_early_lint_pass(box needless_continue
::NeedlessContinue
);
274 reg
.register_late_lint_pass(box eta_reduction
::EtaPass
);
275 reg
.register_late_lint_pass(box identity_op
::IdentityOp
);
276 reg
.register_late_lint_pass(box erasing_op
::ErasingOp
);
277 reg
.register_early_lint_pass(box items_after_statements
::ItemsAfterStatements
);
278 reg
.register_late_lint_pass(box mut_mut
::MutMut
);
279 reg
.register_late_lint_pass(box mut_reference
::UnnecessaryMutPassed
);
280 reg
.register_late_lint_pass(box len_zero
::LenZero
);
281 reg
.register_late_lint_pass(box attrs
::AttrPass
);
282 reg
.register_early_lint_pass(box collapsible_if
::CollapsibleIf
);
283 reg
.register_late_lint_pass(box block_in_if_condition
::BlockInIfCondition
);
284 reg
.register_late_lint_pass(box unicode
::Unicode
);
285 reg
.register_late_lint_pass(box strings
::StringAdd
);
286 reg
.register_early_lint_pass(box returns
::ReturnPass
);
287 reg
.register_late_lint_pass(box methods
::Pass
);
288 reg
.register_late_lint_pass(box shadow
::Pass
);
289 reg
.register_late_lint_pass(box types
::LetPass
);
290 reg
.register_late_lint_pass(box types
::UnitCmp
);
291 reg
.register_late_lint_pass(box loops
::Pass
);
292 reg
.register_late_lint_pass(box lifetimes
::LifetimePass
);
293 reg
.register_late_lint_pass(box entry
::HashMapLint
);
294 reg
.register_late_lint_pass(box ranges
::Pass
);
295 reg
.register_late_lint_pass(box types
::CastPass
);
296 reg
.register_late_lint_pass(box types
::TypeComplexityPass
::new(conf
.type_complexity_threshold
));
297 reg
.register_late_lint_pass(box matches
::MatchPass
);
298 reg
.register_late_lint_pass(box minmax
::MinMaxPass
);
299 reg
.register_late_lint_pass(box open_options
::NonSensical
);
300 reg
.register_late_lint_pass(box zero_div_zero
::Pass
);
301 reg
.register_late_lint_pass(box mutex_atomic
::MutexAtomic
);
302 reg
.register_late_lint_pass(box needless_update
::Pass
);
303 reg
.register_late_lint_pass(box needless_borrow
::NeedlessBorrow
);
304 reg
.register_late_lint_pass(box needless_borrowed_ref
::NeedlessBorrowedRef
);
305 reg
.register_late_lint_pass(box no_effect
::Pass
);
306 reg
.register_late_lint_pass(box map_clone
::Pass
);
307 reg
.register_late_lint_pass(box temporary_assignment
::Pass
);
308 reg
.register_late_lint_pass(box transmute
::Transmute
);
309 reg
.register_late_lint_pass(
310 box cyclomatic_complexity
::CyclomaticComplexity
::new(conf
.cyclomatic_complexity_threshold
)
312 reg
.register_late_lint_pass(box escape
::Pass{too_large_for_stack: conf.too_large_for_stack}
);
313 reg
.register_early_lint_pass(box misc_early
::MiscEarly
);
314 reg
.register_late_lint_pass(box array_indexing
::ArrayIndexing
);
315 reg
.register_late_lint_pass(box panic
::Pass
);
316 reg
.register_late_lint_pass(box strings
::StringLitAsBytes
);
317 reg
.register_late_lint_pass(box derive
::Derive
);
318 reg
.register_late_lint_pass(box types
::CharLitAsU8
);
319 reg
.register_late_lint_pass(box print
::Pass
);
320 reg
.register_late_lint_pass(box vec
::Pass
);
321 reg
.register_early_lint_pass(box non_expressive_names
::NonExpressiveNames
{
322 single_char_binding_names_threshold
: conf
.single_char_binding_names_threshold
,
324 reg
.register_late_lint_pass(box drop_forget_ref
::Pass
);
325 reg
.register_late_lint_pass(box empty_enum
::EmptyEnum
);
326 reg
.register_late_lint_pass(box types
::AbsurdExtremeComparisons
);
327 reg
.register_late_lint_pass(box types
::InvalidUpcastComparisons
);
328 reg
.register_late_lint_pass(box regex
::Pass
::default());
329 reg
.register_late_lint_pass(box copies
::CopyAndPaste
);
330 reg
.register_late_lint_pass(box format
::Pass
);
331 reg
.register_early_lint_pass(box formatting
::Formatting
);
332 reg
.register_late_lint_pass(box swap
::Swap
);
333 reg
.register_early_lint_pass(box if_not_else
::IfNotElse
);
334 reg
.register_early_lint_pass(box else_if_without_else
::ElseIfWithoutElse
);
335 reg
.register_early_lint_pass(box int_plus_one
::IntPlusOne
);
336 reg
.register_late_lint_pass(box overflow_check_conditional
::OverflowCheckConditional
);
337 reg
.register_late_lint_pass(box unused_label
::UnusedLabel
);
338 reg
.register_late_lint_pass(box new_without_default
::NewWithoutDefault
);
339 reg
.register_late_lint_pass(box blacklisted_name
::BlackListedName
::new(conf
.blacklisted_names
));
340 reg
.register_late_lint_pass(box functions
::Functions
::new(conf
.too_many_arguments_threshold
));
341 reg
.register_early_lint_pass(box doc
::Doc
::new(conf
.doc_valid_idents
));
342 reg
.register_late_lint_pass(box neg_multiply
::NegMultiply
);
343 reg
.register_early_lint_pass(box unsafe_removed_from_name
::UnsafeNameRemoval
);
344 reg
.register_late_lint_pass(box mem_forget
::MemForget
);
345 reg
.register_late_lint_pass(box arithmetic
::Arithmetic
::default());
346 reg
.register_late_lint_pass(box assign_ops
::AssignOps
);
347 reg
.register_late_lint_pass(box let_if_seq
::LetIfSeq
);
348 reg
.register_late_lint_pass(box eval_order_dependence
::EvalOrderDependence
);
349 reg
.register_late_lint_pass(box missing_doc
::MissingDoc
::new());
350 reg
.register_late_lint_pass(box ok_if_let
::Pass
);
351 reg
.register_late_lint_pass(box if_let_redundant_pattern_matching
::Pass
);
352 reg
.register_late_lint_pass(box partialeq_ne_impl
::Pass
);
353 reg
.register_early_lint_pass(box reference
::Pass
);
354 reg
.register_early_lint_pass(box double_parens
::DoubleParens
);
355 reg
.register_late_lint_pass(box unused_io_amount
::UnusedIoAmount
);
356 reg
.register_late_lint_pass(box large_enum_variant
::LargeEnumVariant
::new(conf
.enum_variant_size_threshold
));
357 reg
.register_late_lint_pass(box explicit_write
::Pass
);
358 reg
.register_late_lint_pass(box needless_pass_by_value
::NeedlessPassByValue
);
359 reg
.register_early_lint_pass(box literal_representation
::LiteralDigitGrouping
);
360 reg
.register_early_lint_pass(box literal_representation
::LiteralRepresentation
::new(
361 conf
.literal_representation_threshold
363 reg
.register_late_lint_pass(box use_self
::UseSelf
);
364 reg
.register_late_lint_pass(box bytecount
::ByteCount
);
365 reg
.register_late_lint_pass(box infinite_iter
::Pass
);
366 reg
.register_late_lint_pass(box inline_fn_without_body
::Pass
);
367 reg
.register_late_lint_pass(box invalid_ref
::InvalidRef
);
368 reg
.register_late_lint_pass(box identity_conversion
::IdentityConversion
::default());
369 reg
.register_late_lint_pass(box types
::ImplicitHasher
);
370 reg
.register_early_lint_pass(box const_static_lifetime
::StaticConst
);
371 reg
.register_late_lint_pass(box fallible_impl_from
::FallibleImplFrom
);
372 reg
.register_late_lint_pass(box replace_consts
::ReplaceConsts
);
373 reg
.register_late_lint_pass(box types
::UnitArg
);
374 reg
.register_late_lint_pass(box double_comparison
::DoubleComparisonPass
);
375 reg
.register_late_lint_pass(box question_mark
::QuestionMarkPass
);
377 reg
.register_lint_group("clippy_restrictions", vec
![
378 arithmetic
::FLOAT_ARITHMETIC
,
379 arithmetic
::INTEGER_ARITHMETIC
,
380 array_indexing
::INDEXING_SLICING
,
381 assign_ops
::ASSIGN_OPS
,
382 else_if_without_else
::ELSE_IF_WITHOUT_ELSE
,
383 methods
::CLONE_ON_REF_PTR
,
384 misc
::FLOAT_CMP_CONST
,
387 reg
.register_lint_group("clippy_pedantic", vec
![
388 booleans
::NONMINIMAL_BOOL
,
389 empty_enum
::EMPTY_ENUM
,
390 enum_glob_use
::ENUM_GLOB_USE
,
391 enum_variants
::PUB_ENUM_VARIANT_NAMES
,
392 enum_variants
::STUTTER
,
393 fallible_impl_from
::FALLIBLE_IMPL_FROM
,
394 if_not_else
::IF_NOT_ELSE
,
395 infinite_iter
::MAYBE_INFINITE_ITER
,
396 int_plus_one
::INT_PLUS_ONE
,
397 items_after_statements
::ITEMS_AFTER_STATEMENTS
,
398 matches
::SINGLE_MATCH_ELSE
,
399 mem_forget
::MEM_FORGET
,
401 methods
::OPTION_MAP_UNWRAP_OR
,
402 methods
::OPTION_MAP_UNWRAP_OR_ELSE
,
403 methods
::OPTION_UNWRAP_USED
,
404 methods
::RESULT_MAP_UNWRAP_OR_ELSE
,
405 methods
::RESULT_UNWRAP_USED
,
406 methods
::WRONG_PUB_SELF_CONVENTION
,
407 misc
::USED_UNDERSCORE_BINDING
,
408 misc_early
::UNSEPARATED_LITERAL_SUFFIX
,
409 missing_doc
::MISSING_DOCS_IN_PRIVATE_ITEMS
,
411 mutex_atomic
::MUTEX_INTEGER
,
412 non_expressive_names
::SIMILAR_NAMES
,
415 ranges
::RANGE_PLUS_ONE
,
416 replace_consts
::REPLACE_CONSTS
,
417 shadow
::SHADOW_REUSE
,
419 shadow
::SHADOW_UNRELATED
,
421 strings
::STRING_ADD_ASSIGN
,
422 types
::CAST_POSSIBLE_TRUNCATION
,
423 types
::CAST_POSSIBLE_WRAP
,
424 types
::CAST_PRECISION_LOSS
,
425 types
::CAST_SIGN_LOSS
,
426 types
::INVALID_UPCAST_COMPARISONS
,
427 unicode
::NON_ASCII_LITERAL
,
428 unicode
::UNICODE_NOT_NFC
,
432 reg
.register_lint_group("clippy_internal", vec
![
433 utils
::internal_lints
::CLIPPY_LINTS_INTERNAL
,
434 utils
::internal_lints
::LINT_WITHOUT_LINT_PASS
,
437 reg
.register_lint_group("clippy", vec
![
438 approx_const
::APPROX_CONSTANT
,
439 array_indexing
::OUT_OF_BOUNDS_INDEXING
,
440 assign_ops
::ASSIGN_OP_PATTERN
,
441 assign_ops
::MISREFACTORED_ASSIGN_OP
,
442 attrs
::DEPRECATED_SEMVER
,
443 attrs
::EMPTY_LINE_AFTER_OUTER_ATTR
,
444 attrs
::INLINE_ALWAYS
,
445 attrs
::USELESS_ATTRIBUTE
,
446 bit_mask
::BAD_BIT_MASK
,
447 bit_mask
::INEFFECTIVE_BIT_MASK
,
448 bit_mask
::VERBOSE_BIT_MASK
,
449 blacklisted_name
::BLACKLISTED_NAME
,
450 block_in_if_condition
::BLOCK_IN_IF_CONDITION_EXPR
,
451 block_in_if_condition
::BLOCK_IN_IF_CONDITION_STMT
,
453 bytecount
::NAIVE_BYTECOUNT
,
454 collapsible_if
::COLLAPSIBLE_IF
,
455 const_static_lifetime
::CONST_STATIC_LIFETIME
,
456 copies
::IF_SAME_THEN_ELSE
,
457 copies
::IFS_SAME_COND
,
458 copies
::MATCH_SAME_ARMS
,
459 cyclomatic_complexity
::CYCLOMATIC_COMPLEXITY
,
460 derive
::DERIVE_HASH_XOR_EQ
,
461 derive
::EXPL_IMPL_CLONE_ON_COPY
,
463 double_comparison
::DOUBLE_COMPARISONS
,
464 double_parens
::DOUBLE_PARENS
,
465 drop_forget_ref
::DROP_COPY
,
466 drop_forget_ref
::DROP_REF
,
467 drop_forget_ref
::FORGET_COPY
,
468 drop_forget_ref
::FORGET_REF
,
470 enum_clike
::ENUM_CLIKE_UNPORTABLE_VARIANT
,
471 enum_variants
::ENUM_VARIANT_NAMES
,
472 enum_variants
::MODULE_INCEPTION
,
475 erasing_op
::ERASING_OP
,
477 eta_reduction
::REDUNDANT_CLOSURE
,
478 eval_order_dependence
::DIVERGING_SUB_EXPRESSION
,
479 eval_order_dependence
::EVAL_ORDER_DEPENDENCE
,
480 explicit_write
::EXPLICIT_WRITE
,
481 format
::USELESS_FORMAT
,
482 formatting
::POSSIBLE_MISSING_COMMA
,
483 formatting
::SUSPICIOUS_ASSIGNMENT_FORMATTING
,
484 formatting
::SUSPICIOUS_ELSE_FORMATTING
,
485 functions
::NOT_UNSAFE_PTR_ARG_DEREF
,
486 functions
::TOO_MANY_ARGUMENTS
,
487 identity_conversion
::IDENTITY_CONVERSION
,
488 identity_op
::IDENTITY_OP
,
489 if_let_redundant_pattern_matching
::IF_LET_REDUNDANT_PATTERN_MATCHING
,
490 infinite_iter
::INFINITE_ITER
,
491 inline_fn_without_body
::INLINE_FN_WITHOUT_BODY
,
492 invalid_ref
::INVALID_REF
,
493 large_enum_variant
::LARGE_ENUM_VARIANT
,
494 len_zero
::LEN_WITHOUT_IS_EMPTY
,
496 let_if_seq
::USELESS_LET_IF_SEQ
,
497 lifetimes
::NEEDLESS_LIFETIMES
,
498 lifetimes
::UNUSED_LIFETIMES
,
499 literal_representation
::DECIMAL_LITERAL_REPRESENTATION
,
500 literal_representation
::INCONSISTENT_DIGIT_GROUPING
,
501 literal_representation
::LARGE_DIGIT_GROUPS
,
502 literal_representation
::UNREADABLE_LITERAL
,
504 loops
::EXPLICIT_COUNTER_LOOP
,
505 loops
::EXPLICIT_INTO_ITER_LOOP
,
506 loops
::EXPLICIT_ITER_LOOP
,
508 loops
::FOR_LOOP_OVER_OPTION
,
509 loops
::FOR_LOOP_OVER_RESULT
,
510 loops
::ITER_NEXT_LOOP
,
511 loops
::MANUAL_MEMCPY
,
512 loops
::MUT_RANGE_BOUND
,
513 loops
::NEEDLESS_RANGE_LOOP
,
515 loops
::REVERSE_RANGE_LOOP
,
516 loops
::UNUSED_COLLECT
,
517 loops
::WHILE_LET_LOOP
,
518 loops
::WHILE_LET_ON_ITERATOR
,
519 map_clone
::MAP_CLONE
,
520 matches
::MATCH_AS_REF
,
522 matches
::MATCH_OVERLAPPING_ARM
,
523 matches
::MATCH_REF_PATS
,
524 matches
::MATCH_WILD_ERR_ARM
,
525 matches
::SINGLE_MATCH
,
526 methods
::CHARS_LAST_CMP
,
527 methods
::CHARS_NEXT_CMP
,
528 methods
::CLONE_DOUBLE_REF
,
529 methods
::CLONE_ON_COPY
,
530 methods
::FILTER_NEXT
,
532 methods
::ITER_CLONED_COLLECT
,
534 methods
::ITER_SKIP_NEXT
,
535 methods
::NEW_RET_NO_SELF
,
537 methods
::OPTION_MAP_OR_NONE
,
538 methods
::OR_FUN_CALL
,
539 methods
::SEARCH_IS_SOME
,
540 methods
::SHOULD_IMPLEMENT_TRAIT
,
541 methods
::SINGLE_CHAR_PATTERN
,
542 methods
::STRING_EXTEND_CHARS
,
543 methods
::TEMPORARY_CSTRING_AS_PTR
,
544 methods
::UNNECESSARY_FOLD
,
545 methods
::USELESS_ASREF
,
546 methods
::WRONG_SELF_CONVENTION
,
552 misc
::REDUNDANT_PATTERN
,
553 misc
::SHORT_CIRCUIT_STATEMENT
,
554 misc
::TOPLEVEL_REF_ARG
,
556 misc_early
::BUILTIN_TYPE_SHADOW
,
557 misc_early
::DOUBLE_NEG
,
558 misc_early
::DUPLICATE_UNDERSCORE_ARGUMENT
,
559 misc_early
::MIXED_CASE_HEX_LITERALS
,
560 misc_early
::REDUNDANT_CLOSURE_CALL
,
561 misc_early
::UNNEEDED_FIELD_PATTERN
,
562 misc_early
::ZERO_PREFIXED_LITERAL
,
563 mut_reference
::UNNECESSARY_MUT_PASSED
,
564 mutex_atomic
::MUTEX_ATOMIC
,
565 needless_bool
::BOOL_COMPARISON
,
566 needless_bool
::NEEDLESS_BOOL
,
567 needless_borrow
::NEEDLESS_BORROW
,
568 needless_borrowed_ref
::NEEDLESS_BORROWED_REFERENCE
,
569 needless_continue
::NEEDLESS_CONTINUE
,
570 needless_pass_by_value
::NEEDLESS_PASS_BY_VALUE
,
571 needless_update
::NEEDLESS_UPDATE
,
572 neg_multiply
::NEG_MULTIPLY
,
573 new_without_default
::NEW_WITHOUT_DEFAULT
,
574 new_without_default
::NEW_WITHOUT_DEFAULT_DERIVE
,
575 no_effect
::NO_EFFECT
,
576 no_effect
::UNNECESSARY_OPERATION
,
577 non_expressive_names
::JUST_UNDERSCORES_AND_DIGITS
,
578 non_expressive_names
::MANY_SINGLE_CHAR_NAMES
,
579 ok_if_let
::IF_LET_SOME_RESULT
,
580 open_options
::NONSENSICAL_OPEN_OPTIONS
,
581 overflow_check_conditional
::OVERFLOW_CHECK_CONDITIONAL
,
583 partialeq_ne_impl
::PARTIALEQ_NE_IMPL
,
584 precedence
::PRECEDENCE
,
585 print
::PRINT_WITH_NEWLINE
,
586 print
::PRINTLN_EMPTY_STRING
,
590 question_mark
::QUESTION_MARK
,
591 ranges
::ITERATOR_STEP_BY_ZERO
,
592 ranges
::RANGE_MINUS_ONE
,
593 ranges
::RANGE_ZIP_WITH_LEN
,
594 reference
::DEREF_ADDROF
,
595 regex
::INVALID_REGEX
,
597 regex
::TRIVIAL_REGEX
,
598 returns
::LET_AND_RETURN
,
599 returns
::NEEDLESS_RETURN
,
600 serde_api
::SERDE_API_MISUSE
,
601 strings
::STRING_LIT_AS_BYTES
,
602 swap
::ALMOST_SWAPPED
,
604 temporary_assignment
::TEMPORARY_ASSIGNMENT
,
605 transmute
::CROSSPOINTER_TRANSMUTE
,
606 transmute
::MISALIGNED_TRANSMUTE
,
607 transmute
::TRANSMUTE_BYTES_TO_STR
,
608 transmute
::TRANSMUTE_INT_TO_BOOL
,
609 transmute
::TRANSMUTE_INT_TO_CHAR
,
610 transmute
::TRANSMUTE_INT_TO_FLOAT
,
611 transmute
::TRANSMUTE_PTR_TO_REF
,
612 transmute
::USELESS_TRANSMUTE
,
613 transmute
::WRONG_TRANSMUTE
,
614 types
::ABSURD_EXTREME_COMPARISONS
,
617 types
::CAST_LOSSLESS
,
618 types
::CHAR_LIT_AS_U8
,
619 types
::IMPLICIT_HASHER
,
620 types
::LET_UNIT_VALUE
,
622 types
::OPTION_OPTION
,
623 types
::TYPE_COMPLEXITY
,
626 types
::UNNECESSARY_CAST
,
627 unicode
::ZERO_WIDTH_SPACE
,
628 unsafe_removed_from_name
::UNSAFE_REMOVED_FROM_NAME
,
629 unused_io_amount
::UNUSED_IO_AMOUNT
,
630 unused_label
::UNUSED_LABEL
,
632 zero_div_zero
::ZERO_DIVIDED_BY_ZERO
,
636 // only exists to let the dogfood integration test works.
637 // Don't run clippy as an executable directly
638 #[allow(dead_code, print_stdout)]
640 panic
!("Please use the cargo-clippy executable");