From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- .../tests/ui/default_numeric_fallback_i32.fixed | 182 +++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 src/tools/clippy/tests/ui/default_numeric_fallback_i32.fixed (limited to 'src/tools/clippy/tests/ui/default_numeric_fallback_i32.fixed') diff --git a/src/tools/clippy/tests/ui/default_numeric_fallback_i32.fixed b/src/tools/clippy/tests/ui/default_numeric_fallback_i32.fixed new file mode 100644 index 000000000..55451cf2f --- /dev/null +++ b/src/tools/clippy/tests/ui/default_numeric_fallback_i32.fixed @@ -0,0 +1,182 @@ +// run-rustfix +// aux-build:macro_rules.rs + +#![feature(lint_reasons)] +#![warn(clippy::default_numeric_fallback)] +#![allow( + unused, + clippy::never_loop, + clippy::no_effect, + clippy::unnecessary_operation, + clippy::branches_sharing_code, + clippy::let_unit_value +)] + +#[macro_use] +extern crate macro_rules; + +mod basic_expr { + fn test() { + // Should lint unsuffixed literals typed `i32`. + let x = 22_i32; + let x = [1_i32, 2_i32, 3_i32]; + let x = if true { (1_i32, 2_i32) } else { (3_i32, 4_i32) }; + let x = match 1_i32 { + 1_i32 => 1_i32, + _ => 2_i32, + }; + + // Should NOT lint suffixed literals. + let x = 22_i32; + + // Should NOT lint literals in init expr if `Local` has a type annotation. + let x: [i32; 3] = [1, 2, 3]; + let x: (i32, i32) = if true { (1, 2) } else { (3, 4) }; + let x: _ = 1; + } +} + +mod nested_local { + fn test() { + let x: _ = { + // Should lint this because this literal is not bound to any types. + let y = 1_i32; + + // Should NOT lint this because this literal is bound to `_` of outer `Local`. + 1 + }; + + let x: _ = if true { + // Should lint this because this literal is not bound to any types. + let y = 1_i32; + + // Should NOT lint this because this literal is bound to `_` of outer `Local`. + 1 + } else { + // Should lint this because this literal is not bound to any types. + let y = 1_i32; + + // Should NOT lint this because this literal is bound to `_` of outer `Local`. + 2 + }; + } +} + +mod function_def { + fn ret_i32() -> i32 { + // Even though the output type is specified, + // this unsuffixed literal is linted to reduce heuristics and keep codebase simple. + 1_i32 + } + + fn test() { + // Should lint this because return type is inferred to `i32` and NOT bound to a concrete + // type. + let f = || -> _ { 1_i32 }; + + // Even though the output type is specified, + // this unsuffixed literal is linted to reduce heuristics and keep codebase simple. + let f = || -> i32 { 1_i32 }; + } +} + +mod function_calls { + fn concrete_arg(x: i32) {} + + fn generic_arg(t: T) {} + + fn test() { + // Should NOT lint this because the argument type is bound to a concrete type. + concrete_arg(1); + + // Should lint this because the argument type is inferred to `i32` and NOT bound to a concrete type. + generic_arg(1_i32); + + // Should lint this because the argument type is inferred to `i32` and NOT bound to a concrete type. + let x: _ = generic_arg(1_i32); + } +} + +mod struct_ctor { + struct ConcreteStruct { + x: i32, + } + + struct GenericStruct { + x: T, + } + + fn test() { + // Should NOT lint this because the field type is bound to a concrete type. + ConcreteStruct { x: 1 }; + + // Should lint this because the field type is inferred to `i32` and NOT bound to a concrete type. + GenericStruct { x: 1_i32 }; + + // Should lint this because the field type is inferred to `i32` and NOT bound to a concrete type. + let _ = GenericStruct { x: 1_i32 }; + } +} + +mod enum_ctor { + enum ConcreteEnum { + X(i32), + } + + enum GenericEnum { + X(T), + } + + fn test() { + // Should NOT lint this because the field type is bound to a concrete type. + ConcreteEnum::X(1); + + // Should lint this because the field type is inferred to `i32` and NOT bound to a concrete type. + GenericEnum::X(1_i32); + } +} + +mod method_calls { + struct StructForMethodCallTest; + + impl StructForMethodCallTest { + fn concrete_arg(&self, x: i32) {} + + fn generic_arg(&self, t: T) {} + } + + fn test() { + let s = StructForMethodCallTest {}; + + // Should NOT lint this because the argument type is bound to a concrete type. + s.concrete_arg(1); + + // Should lint this because the argument type is bound to a concrete type. + s.generic_arg(1_i32); + } +} + +mod in_macro { + macro_rules! internal_macro { + () => { + let x = 22_i32; + }; + } + + // Should lint in internal macro. + fn internal() { + internal_macro!(); + } + + // Should NOT lint in external macro. + fn external() { + default_numeric_fallback!(); + } +} + +fn check_expect_suppression() { + #[expect(clippy::default_numeric_fallback)] + let x = 21; +} + +fn main() {} -- cgit v1.2.3