diff --git a/clippy_tests/.gitignore b/clippy_tests/.gitignore new file mode 100644 index 000000000000..eb5a316cbd19 --- /dev/null +++ b/clippy_tests/.gitignore @@ -0,0 +1 @@ +target diff --git a/clippy_tests/Cargo.toml b/clippy_tests/Cargo.toml new file mode 100644 index 000000000000..c72c1fd56bbd --- /dev/null +++ b/clippy_tests/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "clippy_tests" +version = "0.1.0" +authors = ["Pascal Hertleif <killercup@gmail.com>"] + +[dependencies] +duct = "0.8.2" +env_logger = "0.5.0-rc.1" +failure = "0.1.1" +failure_derive = "0.1.1" +log = "0.4.1" +rustfix = { git = "https://github.com/killercup/rustfix" } +serde_derive = "1.0" +serde = "1.0" +serde_json = "1.0" +tempdir = "0.3.5" +rayon = "0.9.0" +difference = "1.0.0" +ansi_term = "0.10.2" diff --git a/clippy_tests/examples/.gitignore b/clippy_tests/examples/.gitignore new file mode 100644 index 000000000000..e900cc622c46 --- /dev/null +++ b/clippy_tests/examples/.gitignore @@ -0,0 +1 @@ +*--recorded.rs diff --git a/tests/ui/absurd-extreme-comparisons.rs b/clippy_tests/examples/absurd-extreme-comparisons.rs similarity index 100% rename from tests/ui/absurd-extreme-comparisons.rs rename to clippy_tests/examples/absurd-extreme-comparisons.rs diff --git a/tests/ui/absurd-extreme-comparisons.stderr b/clippy_tests/examples/absurd-extreme-comparisons.stderr similarity index 100% rename from tests/ui/absurd-extreme-comparisons.stderr rename to clippy_tests/examples/absurd-extreme-comparisons.stderr diff --git a/tests/ui/approx_const.rs b/clippy_tests/examples/approx_const.rs similarity index 100% rename from tests/ui/approx_const.rs rename to clippy_tests/examples/approx_const.rs diff --git a/tests/ui/approx_const.stderr b/clippy_tests/examples/approx_const.stderr similarity index 100% rename from tests/ui/approx_const.stderr rename to clippy_tests/examples/approx_const.stderr diff --git a/tests/ui/arithmetic.rs b/clippy_tests/examples/arithmetic.rs similarity index 100% rename from tests/ui/arithmetic.rs rename to clippy_tests/examples/arithmetic.rs diff --git a/tests/ui/arithmetic.stderr b/clippy_tests/examples/arithmetic.stderr similarity index 100% rename from tests/ui/arithmetic.stderr rename to clippy_tests/examples/arithmetic.stderr diff --git a/tests/ui/array_indexing.rs b/clippy_tests/examples/array_indexing.rs similarity index 100% rename from tests/ui/array_indexing.rs rename to clippy_tests/examples/array_indexing.rs diff --git a/tests/ui/array_indexing.stderr b/clippy_tests/examples/array_indexing.stderr similarity index 100% rename from tests/ui/array_indexing.stderr rename to clippy_tests/examples/array_indexing.stderr diff --git a/tests/ui/assign_ops.rs b/clippy_tests/examples/assign_ops.rs similarity index 100% rename from tests/ui/assign_ops.rs rename to clippy_tests/examples/assign_ops.rs diff --git a/tests/ui/assign_ops.stderr b/clippy_tests/examples/assign_ops.stderr similarity index 100% rename from tests/ui/assign_ops.stderr rename to clippy_tests/examples/assign_ops.stderr diff --git a/tests/ui/assign_ops2.rs b/clippy_tests/examples/assign_ops2.rs similarity index 100% rename from tests/ui/assign_ops2.rs rename to clippy_tests/examples/assign_ops2.rs diff --git a/tests/ui/assign_ops2.stderr b/clippy_tests/examples/assign_ops2.stderr similarity index 100% rename from tests/ui/assign_ops2.stderr rename to clippy_tests/examples/assign_ops2.stderr diff --git a/tests/ui/attrs.rs b/clippy_tests/examples/attrs.rs similarity index 100% rename from tests/ui/attrs.rs rename to clippy_tests/examples/attrs.rs diff --git a/tests/ui/attrs.stderr b/clippy_tests/examples/attrs.stderr similarity index 100% rename from tests/ui/attrs.stderr rename to clippy_tests/examples/attrs.stderr diff --git a/tests/ui/bit_masks.rs b/clippy_tests/examples/bit_masks.rs similarity index 100% rename from tests/ui/bit_masks.rs rename to clippy_tests/examples/bit_masks.rs diff --git a/tests/ui/bit_masks.stderr b/clippy_tests/examples/bit_masks.stderr similarity index 100% rename from tests/ui/bit_masks.stderr rename to clippy_tests/examples/bit_masks.stderr diff --git a/tests/ui/blacklisted_name.rs b/clippy_tests/examples/blacklisted_name.rs similarity index 100% rename from tests/ui/blacklisted_name.rs rename to clippy_tests/examples/blacklisted_name.rs diff --git a/tests/ui/blacklisted_name.stderr b/clippy_tests/examples/blacklisted_name.stderr similarity index 100% rename from tests/ui/blacklisted_name.stderr rename to clippy_tests/examples/blacklisted_name.stderr diff --git a/tests/ui/block_in_if_condition.rs b/clippy_tests/examples/block_in_if_condition.rs similarity index 100% rename from tests/ui/block_in_if_condition.rs rename to clippy_tests/examples/block_in_if_condition.rs diff --git a/tests/ui/block_in_if_condition.stderr b/clippy_tests/examples/block_in_if_condition.stderr similarity index 100% rename from tests/ui/block_in_if_condition.stderr rename to clippy_tests/examples/block_in_if_condition.stderr diff --git a/tests/ui/bool_comparison.rs b/clippy_tests/examples/bool_comparison.rs similarity index 100% rename from tests/ui/bool_comparison.rs rename to clippy_tests/examples/bool_comparison.rs diff --git a/tests/ui/bool_comparison.stderr b/clippy_tests/examples/bool_comparison.stderr similarity index 100% rename from tests/ui/bool_comparison.stderr rename to clippy_tests/examples/bool_comparison.stderr diff --git a/tests/ui/booleans.rs b/clippy_tests/examples/booleans.rs similarity index 100% rename from tests/ui/booleans.rs rename to clippy_tests/examples/booleans.rs diff --git a/tests/ui/booleans.stderr b/clippy_tests/examples/booleans.stderr similarity index 100% rename from tests/ui/booleans.stderr rename to clippy_tests/examples/booleans.stderr diff --git a/tests/ui/borrow_box.rs b/clippy_tests/examples/borrow_box.rs similarity index 100% rename from tests/ui/borrow_box.rs rename to clippy_tests/examples/borrow_box.rs diff --git a/tests/ui/borrow_box.stderr b/clippy_tests/examples/borrow_box.stderr similarity index 100% rename from tests/ui/borrow_box.stderr rename to clippy_tests/examples/borrow_box.stderr diff --git a/tests/ui/box_vec.rs b/clippy_tests/examples/box_vec.rs similarity index 100% rename from tests/ui/box_vec.rs rename to clippy_tests/examples/box_vec.rs diff --git a/tests/ui/box_vec.stderr b/clippy_tests/examples/box_vec.stderr similarity index 100% rename from tests/ui/box_vec.stderr rename to clippy_tests/examples/box_vec.stderr diff --git a/tests/ui/builtin-type-shadow.rs b/clippy_tests/examples/builtin-type-shadow.rs similarity index 100% rename from tests/ui/builtin-type-shadow.rs rename to clippy_tests/examples/builtin-type-shadow.rs diff --git a/tests/ui/builtin-type-shadow.stderr b/clippy_tests/examples/builtin-type-shadow.stderr similarity index 100% rename from tests/ui/builtin-type-shadow.stderr rename to clippy_tests/examples/builtin-type-shadow.stderr diff --git a/tests/ui/bytecount.rs b/clippy_tests/examples/bytecount.rs similarity index 100% rename from tests/ui/bytecount.rs rename to clippy_tests/examples/bytecount.rs diff --git a/tests/ui/bytecount.stderr b/clippy_tests/examples/bytecount.stderr similarity index 100% rename from tests/ui/bytecount.stderr rename to clippy_tests/examples/bytecount.stderr diff --git a/tests/ui/cast.rs b/clippy_tests/examples/cast.rs similarity index 100% rename from tests/ui/cast.rs rename to clippy_tests/examples/cast.rs diff --git a/tests/ui/cast.stderr b/clippy_tests/examples/cast.stderr similarity index 100% rename from tests/ui/cast.stderr rename to clippy_tests/examples/cast.stderr diff --git a/tests/ui/cast_lossless_float.rs b/clippy_tests/examples/cast_lossless_float.rs similarity index 100% rename from tests/ui/cast_lossless_float.rs rename to clippy_tests/examples/cast_lossless_float.rs diff --git a/tests/ui/cast_lossless_float.stderr b/clippy_tests/examples/cast_lossless_float.stderr similarity index 100% rename from tests/ui/cast_lossless_float.stderr rename to clippy_tests/examples/cast_lossless_float.stderr diff --git a/tests/ui/cast_lossless_integer.rs b/clippy_tests/examples/cast_lossless_integer.rs similarity index 100% rename from tests/ui/cast_lossless_integer.rs rename to clippy_tests/examples/cast_lossless_integer.rs diff --git a/tests/ui/cast_lossless_integer.stderr b/clippy_tests/examples/cast_lossless_integer.stderr similarity index 100% rename from tests/ui/cast_lossless_integer.stderr rename to clippy_tests/examples/cast_lossless_integer.stderr diff --git a/tests/ui/cast_size.rs b/clippy_tests/examples/cast_size.rs similarity index 100% rename from tests/ui/cast_size.rs rename to clippy_tests/examples/cast_size.rs diff --git a/tests/ui/cast_size.stderr b/clippy_tests/examples/cast_size.stderr similarity index 100% rename from tests/ui/cast_size.stderr rename to clippy_tests/examples/cast_size.stderr diff --git a/tests/ui/char_lit_as_u8.rs b/clippy_tests/examples/char_lit_as_u8.rs similarity index 100% rename from tests/ui/char_lit_as_u8.rs rename to clippy_tests/examples/char_lit_as_u8.rs diff --git a/tests/ui/char_lit_as_u8.stderr b/clippy_tests/examples/char_lit_as_u8.stderr similarity index 100% rename from tests/ui/char_lit_as_u8.stderr rename to clippy_tests/examples/char_lit_as_u8.stderr diff --git a/tests/ui/clone_on_copy_impl.rs b/clippy_tests/examples/clone_on_copy_impl.rs similarity index 100% rename from tests/ui/clone_on_copy_impl.rs rename to clippy_tests/examples/clone_on_copy_impl.rs diff --git a/tests/ui/clone_on_copy_mut.rs b/clippy_tests/examples/clone_on_copy_mut.rs similarity index 100% rename from tests/ui/clone_on_copy_mut.rs rename to clippy_tests/examples/clone_on_copy_mut.rs diff --git a/tests/ui/cmp_nan.rs b/clippy_tests/examples/cmp_nan.rs similarity index 100% rename from tests/ui/cmp_nan.rs rename to clippy_tests/examples/cmp_nan.rs diff --git a/tests/ui/cmp_nan.stderr b/clippy_tests/examples/cmp_nan.stderr similarity index 100% rename from tests/ui/cmp_nan.stderr rename to clippy_tests/examples/cmp_nan.stderr diff --git a/tests/ui/cmp_null.rs b/clippy_tests/examples/cmp_null.rs similarity index 100% rename from tests/ui/cmp_null.rs rename to clippy_tests/examples/cmp_null.rs diff --git a/tests/ui/cmp_null.stderr b/clippy_tests/examples/cmp_null.stderr similarity index 100% rename from tests/ui/cmp_null.stderr rename to clippy_tests/examples/cmp_null.stderr diff --git a/tests/ui/cmp_owned.rs b/clippy_tests/examples/cmp_owned.rs similarity index 100% rename from tests/ui/cmp_owned.rs rename to clippy_tests/examples/cmp_owned.rs diff --git a/tests/ui/cmp_owned.stderr b/clippy_tests/examples/cmp_owned.stderr similarity index 100% rename from tests/ui/cmp_owned.stderr rename to clippy_tests/examples/cmp_owned.stderr diff --git a/tests/ui/collapsible_if.rs b/clippy_tests/examples/collapsible_if.rs similarity index 100% rename from tests/ui/collapsible_if.rs rename to clippy_tests/examples/collapsible_if.rs diff --git a/tests/ui/collapsible_if.stderr b/clippy_tests/examples/collapsible_if.stderr similarity index 100% rename from tests/ui/collapsible_if.stderr rename to clippy_tests/examples/collapsible_if.stderr diff --git a/tests/ui/complex_types.rs b/clippy_tests/examples/complex_types.rs similarity index 100% rename from tests/ui/complex_types.rs rename to clippy_tests/examples/complex_types.rs diff --git a/tests/ui/complex_types.stderr b/clippy_tests/examples/complex_types.stderr similarity index 100% rename from tests/ui/complex_types.stderr rename to clippy_tests/examples/complex_types.stderr diff --git a/tests/ui/conf_bad_arg.rs b/clippy_tests/examples/conf_bad_arg.rs similarity index 100% rename from tests/ui/conf_bad_arg.rs rename to clippy_tests/examples/conf_bad_arg.rs diff --git a/tests/ui/conf_bad_arg.stderr b/clippy_tests/examples/conf_bad_arg.stderr similarity index 100% rename from tests/ui/conf_bad_arg.stderr rename to clippy_tests/examples/conf_bad_arg.stderr diff --git a/tests/ui/conf_bad_toml.rs b/clippy_tests/examples/conf_bad_toml.rs similarity index 100% rename from tests/ui/conf_bad_toml.rs rename to clippy_tests/examples/conf_bad_toml.rs diff --git a/tests/ui/conf_bad_toml.stderr b/clippy_tests/examples/conf_bad_toml.stderr similarity index 100% rename from tests/ui/conf_bad_toml.stderr rename to clippy_tests/examples/conf_bad_toml.stderr diff --git a/tests/ui/conf_bad_toml.toml b/clippy_tests/examples/conf_bad_toml.toml similarity index 100% rename from tests/ui/conf_bad_toml.toml rename to clippy_tests/examples/conf_bad_toml.toml diff --git a/tests/ui/conf_bad_type.rs b/clippy_tests/examples/conf_bad_type.rs similarity index 100% rename from tests/ui/conf_bad_type.rs rename to clippy_tests/examples/conf_bad_type.rs diff --git a/tests/ui/conf_bad_type.stderr b/clippy_tests/examples/conf_bad_type.stderr similarity index 100% rename from tests/ui/conf_bad_type.stderr rename to clippy_tests/examples/conf_bad_type.stderr diff --git a/tests/ui/conf_bad_type.toml b/clippy_tests/examples/conf_bad_type.toml similarity index 100% rename from tests/ui/conf_bad_type.toml rename to clippy_tests/examples/conf_bad_type.toml diff --git a/tests/ui/conf_french_blacklisted_name.rs b/clippy_tests/examples/conf_french_blacklisted_name.rs similarity index 100% rename from tests/ui/conf_french_blacklisted_name.rs rename to clippy_tests/examples/conf_french_blacklisted_name.rs diff --git a/tests/ui/conf_french_blacklisted_name.stderr b/clippy_tests/examples/conf_french_blacklisted_name.stderr similarity index 100% rename from tests/ui/conf_french_blacklisted_name.stderr rename to clippy_tests/examples/conf_french_blacklisted_name.stderr diff --git a/tests/ui/conf_path_non_string.rs b/clippy_tests/examples/conf_path_non_string.rs similarity index 100% rename from tests/ui/conf_path_non_string.rs rename to clippy_tests/examples/conf_path_non_string.rs diff --git a/tests/ui/conf_path_non_string.stderr b/clippy_tests/examples/conf_path_non_string.stderr similarity index 100% rename from tests/ui/conf_path_non_string.stderr rename to clippy_tests/examples/conf_path_non_string.stderr diff --git a/tests/ui/conf_unknown_key.rs b/clippy_tests/examples/conf_unknown_key.rs similarity index 100% rename from tests/ui/conf_unknown_key.rs rename to clippy_tests/examples/conf_unknown_key.rs diff --git a/tests/ui/conf_unknown_key.stderr b/clippy_tests/examples/conf_unknown_key.stderr similarity index 100% rename from tests/ui/conf_unknown_key.stderr rename to clippy_tests/examples/conf_unknown_key.stderr diff --git a/tests/ui/const_static_lifetime.rs b/clippy_tests/examples/const_static_lifetime.rs similarity index 100% rename from tests/ui/const_static_lifetime.rs rename to clippy_tests/examples/const_static_lifetime.rs diff --git a/tests/ui/const_static_lifetime.stderr b/clippy_tests/examples/const_static_lifetime.stderr similarity index 100% rename from tests/ui/const_static_lifetime.stderr rename to clippy_tests/examples/const_static_lifetime.stderr diff --git a/tests/ui/copies.rs b/clippy_tests/examples/copies.rs similarity index 100% rename from tests/ui/copies.rs rename to clippy_tests/examples/copies.rs diff --git a/tests/ui/copies.stderr b/clippy_tests/examples/copies.stderr similarity index 100% rename from tests/ui/copies.stderr rename to clippy_tests/examples/copies.stderr diff --git a/tests/ui/cstring.rs b/clippy_tests/examples/cstring.rs similarity index 100% rename from tests/ui/cstring.rs rename to clippy_tests/examples/cstring.rs diff --git a/tests/ui/cstring.stderr b/clippy_tests/examples/cstring.stderr similarity index 100% rename from tests/ui/cstring.stderr rename to clippy_tests/examples/cstring.stderr diff --git a/tests/ui/cyclomatic_complexity.rs b/clippy_tests/examples/cyclomatic_complexity.rs similarity index 100% rename from tests/ui/cyclomatic_complexity.rs rename to clippy_tests/examples/cyclomatic_complexity.rs diff --git a/tests/ui/cyclomatic_complexity.stderr b/clippy_tests/examples/cyclomatic_complexity.stderr similarity index 100% rename from tests/ui/cyclomatic_complexity.stderr rename to clippy_tests/examples/cyclomatic_complexity.stderr diff --git a/tests/ui/cyclomatic_complexity_attr_used.rs b/clippy_tests/examples/cyclomatic_complexity_attr_used.rs similarity index 100% rename from tests/ui/cyclomatic_complexity_attr_used.rs rename to clippy_tests/examples/cyclomatic_complexity_attr_used.rs diff --git a/tests/ui/cyclomatic_complexity_attr_used.stderr b/clippy_tests/examples/cyclomatic_complexity_attr_used.stderr similarity index 100% rename from tests/ui/cyclomatic_complexity_attr_used.stderr rename to clippy_tests/examples/cyclomatic_complexity_attr_used.stderr diff --git a/tests/ui/deprecated.rs b/clippy_tests/examples/deprecated.rs similarity index 100% rename from tests/ui/deprecated.rs rename to clippy_tests/examples/deprecated.rs diff --git a/tests/ui/deprecated.stderr b/clippy_tests/examples/deprecated.stderr similarity index 100% rename from tests/ui/deprecated.stderr rename to clippy_tests/examples/deprecated.stderr diff --git a/tests/ui/derive.rs b/clippy_tests/examples/derive.rs similarity index 100% rename from tests/ui/derive.rs rename to clippy_tests/examples/derive.rs diff --git a/tests/ui/derive.stderr b/clippy_tests/examples/derive.stderr similarity index 100% rename from tests/ui/derive.stderr rename to clippy_tests/examples/derive.stderr diff --git a/tests/ui/diverging_sub_expression.rs b/clippy_tests/examples/diverging_sub_expression.rs similarity index 100% rename from tests/ui/diverging_sub_expression.rs rename to clippy_tests/examples/diverging_sub_expression.rs diff --git a/tests/ui/diverging_sub_expression.stderr b/clippy_tests/examples/diverging_sub_expression.stderr similarity index 100% rename from tests/ui/diverging_sub_expression.stderr rename to clippy_tests/examples/diverging_sub_expression.stderr diff --git a/tests/ui/dlist.rs b/clippy_tests/examples/dlist.rs similarity index 100% rename from tests/ui/dlist.rs rename to clippy_tests/examples/dlist.rs diff --git a/tests/ui/dlist.stderr b/clippy_tests/examples/dlist.stderr similarity index 100% rename from tests/ui/dlist.stderr rename to clippy_tests/examples/dlist.stderr diff --git a/tests/ui/doc.rs b/clippy_tests/examples/doc.rs similarity index 100% rename from tests/ui/doc.rs rename to clippy_tests/examples/doc.rs diff --git a/tests/ui/doc.stderr b/clippy_tests/examples/doc.stderr similarity index 100% rename from tests/ui/doc.stderr rename to clippy_tests/examples/doc.stderr diff --git a/tests/ui/double_neg.rs b/clippy_tests/examples/double_neg.rs similarity index 100% rename from tests/ui/double_neg.rs rename to clippy_tests/examples/double_neg.rs diff --git a/tests/ui/double_neg.stderr b/clippy_tests/examples/double_neg.stderr similarity index 100% rename from tests/ui/double_neg.stderr rename to clippy_tests/examples/double_neg.stderr diff --git a/tests/ui/double_parens.rs b/clippy_tests/examples/double_parens.rs similarity index 100% rename from tests/ui/double_parens.rs rename to clippy_tests/examples/double_parens.rs diff --git a/tests/ui/double_parens.stderr b/clippy_tests/examples/double_parens.stderr similarity index 100% rename from tests/ui/double_parens.stderr rename to clippy_tests/examples/double_parens.stderr diff --git a/tests/ui/drop_forget_copy.rs b/clippy_tests/examples/drop_forget_copy.rs similarity index 100% rename from tests/ui/drop_forget_copy.rs rename to clippy_tests/examples/drop_forget_copy.rs diff --git a/tests/ui/drop_forget_copy.stderr b/clippy_tests/examples/drop_forget_copy.stderr similarity index 100% rename from tests/ui/drop_forget_copy.stderr rename to clippy_tests/examples/drop_forget_copy.stderr diff --git a/tests/ui/drop_forget_ref.rs b/clippy_tests/examples/drop_forget_ref.rs similarity index 100% rename from tests/ui/drop_forget_ref.rs rename to clippy_tests/examples/drop_forget_ref.rs diff --git a/tests/ui/drop_forget_ref.stderr b/clippy_tests/examples/drop_forget_ref.stderr similarity index 100% rename from tests/ui/drop_forget_ref.stderr rename to clippy_tests/examples/drop_forget_ref.stderr diff --git a/tests/ui/duplicate_underscore_argument.rs b/clippy_tests/examples/duplicate_underscore_argument.rs similarity index 100% rename from tests/ui/duplicate_underscore_argument.rs rename to clippy_tests/examples/duplicate_underscore_argument.rs diff --git a/tests/ui/duplicate_underscore_argument.stderr b/clippy_tests/examples/duplicate_underscore_argument.stderr similarity index 100% rename from tests/ui/duplicate_underscore_argument.stderr rename to clippy_tests/examples/duplicate_underscore_argument.stderr diff --git a/tests/ui/else_if_without_else.rs b/clippy_tests/examples/else_if_without_else.rs similarity index 100% rename from tests/ui/else_if_without_else.rs rename to clippy_tests/examples/else_if_without_else.rs diff --git a/tests/ui/else_if_without_else.stderr b/clippy_tests/examples/else_if_without_else.stderr similarity index 100% rename from tests/ui/else_if_without_else.stderr rename to clippy_tests/examples/else_if_without_else.stderr diff --git a/tests/ui/empty_enum.rs b/clippy_tests/examples/empty_enum.rs similarity index 100% rename from tests/ui/empty_enum.rs rename to clippy_tests/examples/empty_enum.rs diff --git a/tests/ui/empty_enum.stderr b/clippy_tests/examples/empty_enum.stderr similarity index 100% rename from tests/ui/empty_enum.stderr rename to clippy_tests/examples/empty_enum.stderr diff --git a/tests/ui/entry.rs b/clippy_tests/examples/entry.rs similarity index 100% rename from tests/ui/entry.rs rename to clippy_tests/examples/entry.rs diff --git a/tests/ui/entry.stderr b/clippy_tests/examples/entry.stderr similarity index 100% rename from tests/ui/entry.stderr rename to clippy_tests/examples/entry.stderr diff --git a/tests/ui/enum_glob_use.rs b/clippy_tests/examples/enum_glob_use.rs similarity index 100% rename from tests/ui/enum_glob_use.rs rename to clippy_tests/examples/enum_glob_use.rs diff --git a/tests/ui/enum_glob_use.stderr b/clippy_tests/examples/enum_glob_use.stderr similarity index 100% rename from tests/ui/enum_glob_use.stderr rename to clippy_tests/examples/enum_glob_use.stderr diff --git a/tests/ui/enum_variants.rs b/clippy_tests/examples/enum_variants.rs similarity index 100% rename from tests/ui/enum_variants.rs rename to clippy_tests/examples/enum_variants.rs diff --git a/tests/ui/enum_variants.stderr b/clippy_tests/examples/enum_variants.stderr similarity index 100% rename from tests/ui/enum_variants.stderr rename to clippy_tests/examples/enum_variants.stderr diff --git a/tests/ui/enums_clike.rs b/clippy_tests/examples/enums_clike.rs similarity index 100% rename from tests/ui/enums_clike.rs rename to clippy_tests/examples/enums_clike.rs diff --git a/tests/ui/enums_clike.stderr b/clippy_tests/examples/enums_clike.stderr similarity index 100% rename from tests/ui/enums_clike.stderr rename to clippy_tests/examples/enums_clike.stderr diff --git a/tests/ui/eq_op.rs b/clippy_tests/examples/eq_op.rs similarity index 100% rename from tests/ui/eq_op.rs rename to clippy_tests/examples/eq_op.rs diff --git a/tests/ui/eq_op.stderr b/clippy_tests/examples/eq_op.stderr similarity index 100% rename from tests/ui/eq_op.stderr rename to clippy_tests/examples/eq_op.stderr diff --git a/tests/ui/erasing_op.rs b/clippy_tests/examples/erasing_op.rs similarity index 100% rename from tests/ui/erasing_op.rs rename to clippy_tests/examples/erasing_op.rs diff --git a/tests/ui/erasing_op.stderr b/clippy_tests/examples/erasing_op.stderr similarity index 100% rename from tests/ui/erasing_op.stderr rename to clippy_tests/examples/erasing_op.stderr diff --git a/tests/ui/escape_analysis.rs b/clippy_tests/examples/escape_analysis.rs similarity index 100% rename from tests/ui/escape_analysis.rs rename to clippy_tests/examples/escape_analysis.rs diff --git a/tests/ui/escape_analysis.stderr b/clippy_tests/examples/escape_analysis.stderr similarity index 100% rename from tests/ui/escape_analysis.stderr rename to clippy_tests/examples/escape_analysis.stderr diff --git a/tests/ui/eta.rs b/clippy_tests/examples/eta.rs similarity index 100% rename from tests/ui/eta.rs rename to clippy_tests/examples/eta.rs diff --git a/tests/ui/eta.stderr b/clippy_tests/examples/eta.stderr similarity index 100% rename from tests/ui/eta.stderr rename to clippy_tests/examples/eta.stderr diff --git a/tests/ui/eval_order_dependence.rs b/clippy_tests/examples/eval_order_dependence.rs similarity index 100% rename from tests/ui/eval_order_dependence.rs rename to clippy_tests/examples/eval_order_dependence.rs diff --git a/tests/ui/eval_order_dependence.stderr b/clippy_tests/examples/eval_order_dependence.stderr similarity index 100% rename from tests/ui/eval_order_dependence.stderr rename to clippy_tests/examples/eval_order_dependence.stderr diff --git a/tests/ui/explicit_write.rs b/clippy_tests/examples/explicit_write.rs similarity index 100% rename from tests/ui/explicit_write.rs rename to clippy_tests/examples/explicit_write.rs diff --git a/tests/ui/explicit_write.stderr b/clippy_tests/examples/explicit_write.stderr similarity index 100% rename from tests/ui/explicit_write.stderr rename to clippy_tests/examples/explicit_write.stderr diff --git a/tests/ui/fallible_impl_from.rs b/clippy_tests/examples/fallible_impl_from.rs similarity index 100% rename from tests/ui/fallible_impl_from.rs rename to clippy_tests/examples/fallible_impl_from.rs diff --git a/tests/ui/fallible_impl_from.stderr b/clippy_tests/examples/fallible_impl_from.stderr similarity index 100% rename from tests/ui/fallible_impl_from.stderr rename to clippy_tests/examples/fallible_impl_from.stderr diff --git a/tests/ui/filter_methods.rs b/clippy_tests/examples/filter_methods.rs similarity index 100% rename from tests/ui/filter_methods.rs rename to clippy_tests/examples/filter_methods.rs diff --git a/tests/ui/filter_methods.stderr b/clippy_tests/examples/filter_methods.stderr similarity index 100% rename from tests/ui/filter_methods.stderr rename to clippy_tests/examples/filter_methods.stderr diff --git a/tests/ui/float_cmp.rs b/clippy_tests/examples/float_cmp.rs similarity index 100% rename from tests/ui/float_cmp.rs rename to clippy_tests/examples/float_cmp.rs diff --git a/tests/ui/float_cmp.stderr b/clippy_tests/examples/float_cmp.stderr similarity index 100% rename from tests/ui/float_cmp.stderr rename to clippy_tests/examples/float_cmp.stderr diff --git a/tests/ui/float_cmp_const.rs b/clippy_tests/examples/float_cmp_const.rs similarity index 100% rename from tests/ui/float_cmp_const.rs rename to clippy_tests/examples/float_cmp_const.rs diff --git a/tests/ui/float_cmp_const.stderr b/clippy_tests/examples/float_cmp_const.stderr similarity index 100% rename from tests/ui/float_cmp_const.stderr rename to clippy_tests/examples/float_cmp_const.stderr diff --git a/tests/ui/for_loop.rs b/clippy_tests/examples/for_loop.rs similarity index 100% rename from tests/ui/for_loop.rs rename to clippy_tests/examples/for_loop.rs diff --git a/tests/ui/for_loop.stderr b/clippy_tests/examples/for_loop.stderr similarity index 100% rename from tests/ui/for_loop.stderr rename to clippy_tests/examples/for_loop.stderr diff --git a/tests/ui/format.rs b/clippy_tests/examples/format.rs similarity index 100% rename from tests/ui/format.rs rename to clippy_tests/examples/format.rs diff --git a/tests/ui/format.stderr b/clippy_tests/examples/format.stderr similarity index 100% rename from tests/ui/format.stderr rename to clippy_tests/examples/format.stderr diff --git a/tests/ui/formatting.rs b/clippy_tests/examples/formatting.rs similarity index 100% rename from tests/ui/formatting.rs rename to clippy_tests/examples/formatting.rs diff --git a/tests/ui/formatting.stderr b/clippy_tests/examples/formatting.stderr similarity index 100% rename from tests/ui/formatting.stderr rename to clippy_tests/examples/formatting.stderr diff --git a/tests/ui/functions.rs b/clippy_tests/examples/functions.rs similarity index 100% rename from tests/ui/functions.rs rename to clippy_tests/examples/functions.rs diff --git a/tests/ui/functions.stderr b/clippy_tests/examples/functions.stderr similarity index 100% rename from tests/ui/functions.stderr rename to clippy_tests/examples/functions.stderr diff --git a/tests/ui/get_unwrap.rs b/clippy_tests/examples/get_unwrap.rs similarity index 100% rename from tests/ui/get_unwrap.rs rename to clippy_tests/examples/get_unwrap.rs diff --git a/tests/ui/get_unwrap.stderr b/clippy_tests/examples/get_unwrap.stderr similarity index 100% rename from tests/ui/get_unwrap.stderr rename to clippy_tests/examples/get_unwrap.stderr diff --git a/tests/ui/identity_conversion.rs b/clippy_tests/examples/identity_conversion.rs similarity index 100% rename from tests/ui/identity_conversion.rs rename to clippy_tests/examples/identity_conversion.rs diff --git a/tests/ui/identity_conversion.stderr b/clippy_tests/examples/identity_conversion.stderr similarity index 100% rename from tests/ui/identity_conversion.stderr rename to clippy_tests/examples/identity_conversion.stderr diff --git a/tests/ui/identity_op.rs b/clippy_tests/examples/identity_op.rs similarity index 100% rename from tests/ui/identity_op.rs rename to clippy_tests/examples/identity_op.rs diff --git a/tests/ui/identity_op.stderr b/clippy_tests/examples/identity_op.stderr similarity index 100% rename from tests/ui/identity_op.stderr rename to clippy_tests/examples/identity_op.stderr diff --git a/tests/ui/if_let_redundant_pattern_matching.rs b/clippy_tests/examples/if_let_redundant_pattern_matching.rs similarity index 100% rename from tests/ui/if_let_redundant_pattern_matching.rs rename to clippy_tests/examples/if_let_redundant_pattern_matching.rs diff --git a/tests/ui/if_let_redundant_pattern_matching.stderr b/clippy_tests/examples/if_let_redundant_pattern_matching.stderr similarity index 100% rename from tests/ui/if_let_redundant_pattern_matching.stderr rename to clippy_tests/examples/if_let_redundant_pattern_matching.stderr diff --git a/tests/ui/if_not_else.rs b/clippy_tests/examples/if_not_else.rs similarity index 100% rename from tests/ui/if_not_else.rs rename to clippy_tests/examples/if_not_else.rs diff --git a/tests/ui/if_not_else.stderr b/clippy_tests/examples/if_not_else.stderr similarity index 100% rename from tests/ui/if_not_else.stderr rename to clippy_tests/examples/if_not_else.stderr diff --git a/tests/ui/implicit_hasher.rs b/clippy_tests/examples/implicit_hasher.rs similarity index 100% rename from tests/ui/implicit_hasher.rs rename to clippy_tests/examples/implicit_hasher.rs diff --git a/tests/ui/implicit_hasher.stderr b/clippy_tests/examples/implicit_hasher.stderr similarity index 100% rename from tests/ui/implicit_hasher.stderr rename to clippy_tests/examples/implicit_hasher.stderr diff --git a/tests/ui/inconsistent_digit_grouping.rs b/clippy_tests/examples/inconsistent_digit_grouping.rs similarity index 100% rename from tests/ui/inconsistent_digit_grouping.rs rename to clippy_tests/examples/inconsistent_digit_grouping.rs diff --git a/tests/ui/inconsistent_digit_grouping.stderr b/clippy_tests/examples/inconsistent_digit_grouping.stderr similarity index 100% rename from tests/ui/inconsistent_digit_grouping.stderr rename to clippy_tests/examples/inconsistent_digit_grouping.stderr diff --git a/tests/ui/infinite_iter.rs b/clippy_tests/examples/infinite_iter.rs similarity index 100% rename from tests/ui/infinite_iter.rs rename to clippy_tests/examples/infinite_iter.rs diff --git a/tests/ui/infinite_iter.stderr b/clippy_tests/examples/infinite_iter.stderr similarity index 100% rename from tests/ui/infinite_iter.stderr rename to clippy_tests/examples/infinite_iter.stderr diff --git a/tests/ui/inline_fn_without_body.rs b/clippy_tests/examples/inline_fn_without_body.rs similarity index 100% rename from tests/ui/inline_fn_without_body.rs rename to clippy_tests/examples/inline_fn_without_body.rs diff --git a/tests/ui/inline_fn_without_body.stderr b/clippy_tests/examples/inline_fn_without_body.stderr similarity index 100% rename from tests/ui/inline_fn_without_body.stderr rename to clippy_tests/examples/inline_fn_without_body.stderr diff --git a/tests/ui/int_plus_one.rs b/clippy_tests/examples/int_plus_one.rs similarity index 100% rename from tests/ui/int_plus_one.rs rename to clippy_tests/examples/int_plus_one.rs diff --git a/tests/ui/int_plus_one.stderr b/clippy_tests/examples/int_plus_one.stderr similarity index 100% rename from tests/ui/int_plus_one.stderr rename to clippy_tests/examples/int_plus_one.stderr diff --git a/tests/ui/invalid_ref.rs b/clippy_tests/examples/invalid_ref.rs similarity index 100% rename from tests/ui/invalid_ref.rs rename to clippy_tests/examples/invalid_ref.rs diff --git a/tests/ui/invalid_ref.stderr b/clippy_tests/examples/invalid_ref.stderr similarity index 100% rename from tests/ui/invalid_ref.stderr rename to clippy_tests/examples/invalid_ref.stderr diff --git a/tests/ui/invalid_upcast_comparisons.rs b/clippy_tests/examples/invalid_upcast_comparisons.rs similarity index 100% rename from tests/ui/invalid_upcast_comparisons.rs rename to clippy_tests/examples/invalid_upcast_comparisons.rs diff --git a/tests/ui/invalid_upcast_comparisons.stderr b/clippy_tests/examples/invalid_upcast_comparisons.stderr similarity index 100% rename from tests/ui/invalid_upcast_comparisons.stderr rename to clippy_tests/examples/invalid_upcast_comparisons.stderr diff --git a/tests/ui/item_after_statement.rs b/clippy_tests/examples/item_after_statement.rs similarity index 100% rename from tests/ui/item_after_statement.rs rename to clippy_tests/examples/item_after_statement.rs diff --git a/tests/ui/item_after_statement.stderr b/clippy_tests/examples/item_after_statement.stderr similarity index 100% rename from tests/ui/item_after_statement.stderr rename to clippy_tests/examples/item_after_statement.stderr diff --git a/tests/ui/large_digit_groups.rs b/clippy_tests/examples/large_digit_groups.rs similarity index 100% rename from tests/ui/large_digit_groups.rs rename to clippy_tests/examples/large_digit_groups.rs diff --git a/tests/ui/large_digit_groups.stderr b/clippy_tests/examples/large_digit_groups.stderr similarity index 100% rename from tests/ui/large_digit_groups.stderr rename to clippy_tests/examples/large_digit_groups.stderr diff --git a/tests/ui/large_enum_variant.rs b/clippy_tests/examples/large_enum_variant.rs similarity index 100% rename from tests/ui/large_enum_variant.rs rename to clippy_tests/examples/large_enum_variant.rs diff --git a/tests/ui/large_enum_variant.stderr b/clippy_tests/examples/large_enum_variant.stderr similarity index 100% rename from tests/ui/large_enum_variant.stderr rename to clippy_tests/examples/large_enum_variant.stderr diff --git a/tests/ui/len_zero.rs b/clippy_tests/examples/len_zero.rs similarity index 100% rename from tests/ui/len_zero.rs rename to clippy_tests/examples/len_zero.rs diff --git a/tests/ui/len_zero.stderr b/clippy_tests/examples/len_zero.stderr similarity index 100% rename from tests/ui/len_zero.stderr rename to clippy_tests/examples/len_zero.stderr diff --git a/tests/ui/let_if_seq.rs b/clippy_tests/examples/let_if_seq.rs similarity index 100% rename from tests/ui/let_if_seq.rs rename to clippy_tests/examples/let_if_seq.rs diff --git a/tests/ui/let_if_seq.stderr b/clippy_tests/examples/let_if_seq.stderr similarity index 100% rename from tests/ui/let_if_seq.stderr rename to clippy_tests/examples/let_if_seq.stderr diff --git a/tests/ui/let_return.rs b/clippy_tests/examples/let_return.rs similarity index 100% rename from tests/ui/let_return.rs rename to clippy_tests/examples/let_return.rs diff --git a/tests/ui/let_return.stderr b/clippy_tests/examples/let_return.stderr similarity index 100% rename from tests/ui/let_return.stderr rename to clippy_tests/examples/let_return.stderr diff --git a/tests/ui/let_unit.rs b/clippy_tests/examples/let_unit.rs similarity index 100% rename from tests/ui/let_unit.rs rename to clippy_tests/examples/let_unit.rs diff --git a/tests/ui/let_unit.stderr b/clippy_tests/examples/let_unit.stderr similarity index 100% rename from tests/ui/let_unit.stderr rename to clippy_tests/examples/let_unit.stderr diff --git a/tests/ui/lifetimes.rs b/clippy_tests/examples/lifetimes.rs similarity index 100% rename from tests/ui/lifetimes.rs rename to clippy_tests/examples/lifetimes.rs diff --git a/tests/ui/lifetimes.stderr b/clippy_tests/examples/lifetimes.stderr similarity index 100% rename from tests/ui/lifetimes.stderr rename to clippy_tests/examples/lifetimes.stderr diff --git a/tests/ui/lint_pass.rs b/clippy_tests/examples/lint_pass.rs similarity index 100% rename from tests/ui/lint_pass.rs rename to clippy_tests/examples/lint_pass.rs diff --git a/tests/ui/lint_pass.stderr b/clippy_tests/examples/lint_pass.stderr similarity index 100% rename from tests/ui/lint_pass.stderr rename to clippy_tests/examples/lint_pass.stderr diff --git a/tests/ui/literals.rs b/clippy_tests/examples/literals.rs similarity index 100% rename from tests/ui/literals.rs rename to clippy_tests/examples/literals.rs diff --git a/tests/ui/literals.stderr b/clippy_tests/examples/literals.stderr similarity index 100% rename from tests/ui/literals.stderr rename to clippy_tests/examples/literals.stderr diff --git a/tests/ui/map_clone.rs b/clippy_tests/examples/map_clone.rs similarity index 100% rename from tests/ui/map_clone.rs rename to clippy_tests/examples/map_clone.rs diff --git a/tests/ui/map_clone.stderr b/clippy_tests/examples/map_clone.stderr similarity index 100% rename from tests/ui/map_clone.stderr rename to clippy_tests/examples/map_clone.stderr diff --git a/tests/ui/matches.rs b/clippy_tests/examples/matches.rs similarity index 100% rename from tests/ui/matches.rs rename to clippy_tests/examples/matches.rs diff --git a/tests/ui/matches.stderr b/clippy_tests/examples/matches.stderr similarity index 100% rename from tests/ui/matches.stderr rename to clippy_tests/examples/matches.stderr diff --git a/tests/ui/mem_forget.rs b/clippy_tests/examples/mem_forget.rs similarity index 100% rename from tests/ui/mem_forget.rs rename to clippy_tests/examples/mem_forget.rs diff --git a/tests/ui/mem_forget.stderr b/clippy_tests/examples/mem_forget.stderr similarity index 100% rename from tests/ui/mem_forget.stderr rename to clippy_tests/examples/mem_forget.stderr diff --git a/tests/ui/methods.rs b/clippy_tests/examples/methods.rs similarity index 100% rename from tests/ui/methods.rs rename to clippy_tests/examples/methods.rs diff --git a/tests/ui/methods.stderr b/clippy_tests/examples/methods.stderr similarity index 100% rename from tests/ui/methods.stderr rename to clippy_tests/examples/methods.stderr diff --git a/tests/ui/min_max.rs b/clippy_tests/examples/min_max.rs similarity index 100% rename from tests/ui/min_max.rs rename to clippy_tests/examples/min_max.rs diff --git a/tests/ui/min_max.stderr b/clippy_tests/examples/min_max.stderr similarity index 100% rename from tests/ui/min_max.stderr rename to clippy_tests/examples/min_max.stderr diff --git a/tests/ui/missing-doc.rs b/clippy_tests/examples/missing-doc.rs similarity index 100% rename from tests/ui/missing-doc.rs rename to clippy_tests/examples/missing-doc.rs diff --git a/tests/ui/missing-doc.stderr b/clippy_tests/examples/missing-doc.stderr similarity index 100% rename from tests/ui/missing-doc.stderr rename to clippy_tests/examples/missing-doc.stderr diff --git a/tests/ui/module_inception.rs b/clippy_tests/examples/module_inception.rs similarity index 100% rename from tests/ui/module_inception.rs rename to clippy_tests/examples/module_inception.rs diff --git a/tests/ui/module_inception.stderr b/clippy_tests/examples/module_inception.stderr similarity index 100% rename from tests/ui/module_inception.stderr rename to clippy_tests/examples/module_inception.stderr diff --git a/tests/ui/modulo_one.rs b/clippy_tests/examples/modulo_one.rs similarity index 100% rename from tests/ui/modulo_one.rs rename to clippy_tests/examples/modulo_one.rs diff --git a/tests/ui/modulo_one.stderr b/clippy_tests/examples/modulo_one.stderr similarity index 100% rename from tests/ui/modulo_one.stderr rename to clippy_tests/examples/modulo_one.stderr diff --git a/tests/ui/mut_from_ref.rs b/clippy_tests/examples/mut_from_ref.rs similarity index 100% rename from tests/ui/mut_from_ref.rs rename to clippy_tests/examples/mut_from_ref.rs diff --git a/tests/ui/mut_from_ref.stderr b/clippy_tests/examples/mut_from_ref.stderr similarity index 100% rename from tests/ui/mut_from_ref.stderr rename to clippy_tests/examples/mut_from_ref.stderr diff --git a/tests/ui/mut_mut.rs b/clippy_tests/examples/mut_mut.rs similarity index 100% rename from tests/ui/mut_mut.rs rename to clippy_tests/examples/mut_mut.rs diff --git a/tests/ui/mut_mut.stderr b/clippy_tests/examples/mut_mut.stderr similarity index 100% rename from tests/ui/mut_mut.stderr rename to clippy_tests/examples/mut_mut.stderr diff --git a/tests/ui/mut_range_bound.rs b/clippy_tests/examples/mut_range_bound.rs similarity index 100% rename from tests/ui/mut_range_bound.rs rename to clippy_tests/examples/mut_range_bound.rs diff --git a/tests/ui/mut_range_bound.stderr b/clippy_tests/examples/mut_range_bound.stderr similarity index 100% rename from tests/ui/mut_range_bound.stderr rename to clippy_tests/examples/mut_range_bound.stderr diff --git a/tests/ui/mut_reference.rs b/clippy_tests/examples/mut_reference.rs similarity index 100% rename from tests/ui/mut_reference.rs rename to clippy_tests/examples/mut_reference.rs diff --git a/tests/ui/mut_reference.stderr b/clippy_tests/examples/mut_reference.stderr similarity index 100% rename from tests/ui/mut_reference.stderr rename to clippy_tests/examples/mut_reference.stderr diff --git a/tests/ui/mutex_atomic.rs b/clippy_tests/examples/mutex_atomic.rs similarity index 100% rename from tests/ui/mutex_atomic.rs rename to clippy_tests/examples/mutex_atomic.rs diff --git a/tests/ui/mutex_atomic.stderr b/clippy_tests/examples/mutex_atomic.stderr similarity index 100% rename from tests/ui/mutex_atomic.stderr rename to clippy_tests/examples/mutex_atomic.stderr diff --git a/tests/ui/needless_bool.rs b/clippy_tests/examples/needless_bool.rs similarity index 100% rename from tests/ui/needless_bool.rs rename to clippy_tests/examples/needless_bool.rs diff --git a/tests/ui/needless_bool.stderr b/clippy_tests/examples/needless_bool.stderr similarity index 100% rename from tests/ui/needless_bool.stderr rename to clippy_tests/examples/needless_bool.stderr diff --git a/tests/ui/needless_borrow.rs b/clippy_tests/examples/needless_borrow.rs similarity index 100% rename from tests/ui/needless_borrow.rs rename to clippy_tests/examples/needless_borrow.rs diff --git a/tests/ui/needless_borrow.stderr b/clippy_tests/examples/needless_borrow.stderr similarity index 100% rename from tests/ui/needless_borrow.stderr rename to clippy_tests/examples/needless_borrow.stderr diff --git a/tests/ui/needless_borrowed_ref.rs b/clippy_tests/examples/needless_borrowed_ref.rs similarity index 100% rename from tests/ui/needless_borrowed_ref.rs rename to clippy_tests/examples/needless_borrowed_ref.rs diff --git a/tests/ui/needless_borrowed_ref.stderr b/clippy_tests/examples/needless_borrowed_ref.stderr similarity index 100% rename from tests/ui/needless_borrowed_ref.stderr rename to clippy_tests/examples/needless_borrowed_ref.stderr diff --git a/tests/ui/needless_continue.rs b/clippy_tests/examples/needless_continue.rs similarity index 100% rename from tests/ui/needless_continue.rs rename to clippy_tests/examples/needless_continue.rs diff --git a/tests/ui/needless_continue.stderr b/clippy_tests/examples/needless_continue.stderr similarity index 100% rename from tests/ui/needless_continue.stderr rename to clippy_tests/examples/needless_continue.stderr diff --git a/tests/ui/needless_pass_by_value.rs b/clippy_tests/examples/needless_pass_by_value.rs similarity index 100% rename from tests/ui/needless_pass_by_value.rs rename to clippy_tests/examples/needless_pass_by_value.rs diff --git a/tests/ui/needless_pass_by_value.stderr b/clippy_tests/examples/needless_pass_by_value.stderr similarity index 100% rename from tests/ui/needless_pass_by_value.stderr rename to clippy_tests/examples/needless_pass_by_value.stderr diff --git a/tests/ui/needless_pass_by_value_proc_macro.rs b/clippy_tests/examples/needless_pass_by_value_proc_macro.rs similarity index 100% rename from tests/ui/needless_pass_by_value_proc_macro.rs rename to clippy_tests/examples/needless_pass_by_value_proc_macro.rs diff --git a/tests/ui/needless_range_loop.rs b/clippy_tests/examples/needless_range_loop.rs similarity index 100% rename from tests/ui/needless_range_loop.rs rename to clippy_tests/examples/needless_range_loop.rs diff --git a/tests/ui/needless_range_loop.stderr b/clippy_tests/examples/needless_range_loop.stderr similarity index 100% rename from tests/ui/needless_range_loop.stderr rename to clippy_tests/examples/needless_range_loop.stderr diff --git a/tests/ui/needless_return.rs b/clippy_tests/examples/needless_return.rs similarity index 100% rename from tests/ui/needless_return.rs rename to clippy_tests/examples/needless_return.rs diff --git a/tests/ui/needless_return.stderr b/clippy_tests/examples/needless_return.stderr similarity index 100% rename from tests/ui/needless_return.stderr rename to clippy_tests/examples/needless_return.stderr diff --git a/tests/ui/needless_update.rs b/clippy_tests/examples/needless_update.rs similarity index 100% rename from tests/ui/needless_update.rs rename to clippy_tests/examples/needless_update.rs diff --git a/tests/ui/needless_update.stderr b/clippy_tests/examples/needless_update.stderr similarity index 100% rename from tests/ui/needless_update.stderr rename to clippy_tests/examples/needless_update.stderr diff --git a/tests/ui/neg_multiply.rs b/clippy_tests/examples/neg_multiply.rs similarity index 100% rename from tests/ui/neg_multiply.rs rename to clippy_tests/examples/neg_multiply.rs diff --git a/tests/ui/neg_multiply.stderr b/clippy_tests/examples/neg_multiply.stderr similarity index 100% rename from tests/ui/neg_multiply.stderr rename to clippy_tests/examples/neg_multiply.stderr diff --git a/tests/ui/never_loop.rs b/clippy_tests/examples/never_loop.rs similarity index 100% rename from tests/ui/never_loop.rs rename to clippy_tests/examples/never_loop.rs diff --git a/tests/ui/never_loop.stderr b/clippy_tests/examples/never_loop.stderr similarity index 100% rename from tests/ui/never_loop.stderr rename to clippy_tests/examples/never_loop.stderr diff --git a/tests/ui/new_without_default.rs b/clippy_tests/examples/new_without_default.rs similarity index 100% rename from tests/ui/new_without_default.rs rename to clippy_tests/examples/new_without_default.rs diff --git a/tests/ui/new_without_default.stderr b/clippy_tests/examples/new_without_default.stderr similarity index 100% rename from tests/ui/new_without_default.stderr rename to clippy_tests/examples/new_without_default.stderr diff --git a/tests/ui/no_effect.rs b/clippy_tests/examples/no_effect.rs similarity index 100% rename from tests/ui/no_effect.rs rename to clippy_tests/examples/no_effect.rs diff --git a/tests/ui/no_effect.stderr b/clippy_tests/examples/no_effect.stderr similarity index 100% rename from tests/ui/no_effect.stderr rename to clippy_tests/examples/no_effect.stderr diff --git a/tests/ui/non_expressive_names.rs b/clippy_tests/examples/non_expressive_names.rs similarity index 100% rename from tests/ui/non_expressive_names.rs rename to clippy_tests/examples/non_expressive_names.rs diff --git a/tests/ui/non_expressive_names.stderr b/clippy_tests/examples/non_expressive_names.stderr similarity index 100% rename from tests/ui/non_expressive_names.stderr rename to clippy_tests/examples/non_expressive_names.stderr diff --git a/tests/ui/ok_expect.rs b/clippy_tests/examples/ok_expect.rs similarity index 100% rename from tests/ui/ok_expect.rs rename to clippy_tests/examples/ok_expect.rs diff --git a/tests/ui/ok_expect.stderr b/clippy_tests/examples/ok_expect.stderr similarity index 100% rename from tests/ui/ok_expect.stderr rename to clippy_tests/examples/ok_expect.stderr diff --git a/tests/ui/ok_if_let.rs b/clippy_tests/examples/ok_if_let.rs similarity index 100% rename from tests/ui/ok_if_let.rs rename to clippy_tests/examples/ok_if_let.rs diff --git a/tests/ui/ok_if_let.stderr b/clippy_tests/examples/ok_if_let.stderr similarity index 100% rename from tests/ui/ok_if_let.stderr rename to clippy_tests/examples/ok_if_let.stderr diff --git a/tests/ui/op_ref.rs b/clippy_tests/examples/op_ref.rs similarity index 100% rename from tests/ui/op_ref.rs rename to clippy_tests/examples/op_ref.rs diff --git a/tests/ui/op_ref.stderr b/clippy_tests/examples/op_ref.stderr similarity index 100% rename from tests/ui/op_ref.stderr rename to clippy_tests/examples/op_ref.stderr diff --git a/tests/ui/open_options.rs b/clippy_tests/examples/open_options.rs similarity index 100% rename from tests/ui/open_options.rs rename to clippy_tests/examples/open_options.rs diff --git a/tests/ui/open_options.stderr b/clippy_tests/examples/open_options.stderr similarity index 100% rename from tests/ui/open_options.stderr rename to clippy_tests/examples/open_options.stderr diff --git a/tests/ui/option_option.rs b/clippy_tests/examples/option_option.rs similarity index 100% rename from tests/ui/option_option.rs rename to clippy_tests/examples/option_option.rs diff --git a/tests/ui/option_option.stderr b/clippy_tests/examples/option_option.stderr similarity index 100% rename from tests/ui/option_option.stderr rename to clippy_tests/examples/option_option.stderr diff --git a/tests/ui/overflow_check_conditional.rs b/clippy_tests/examples/overflow_check_conditional.rs similarity index 100% rename from tests/ui/overflow_check_conditional.rs rename to clippy_tests/examples/overflow_check_conditional.rs diff --git a/tests/ui/overflow_check_conditional.stderr b/clippy_tests/examples/overflow_check_conditional.stderr similarity index 100% rename from tests/ui/overflow_check_conditional.stderr rename to clippy_tests/examples/overflow_check_conditional.stderr diff --git a/tests/ui/panic.rs b/clippy_tests/examples/panic.rs similarity index 100% rename from tests/ui/panic.rs rename to clippy_tests/examples/panic.rs diff --git a/tests/ui/panic.stderr b/clippy_tests/examples/panic.stderr similarity index 100% rename from tests/ui/panic.stderr rename to clippy_tests/examples/panic.stderr diff --git a/tests/ui/partialeq_ne_impl.rs b/clippy_tests/examples/partialeq_ne_impl.rs similarity index 100% rename from tests/ui/partialeq_ne_impl.rs rename to clippy_tests/examples/partialeq_ne_impl.rs diff --git a/tests/ui/partialeq_ne_impl.stderr b/clippy_tests/examples/partialeq_ne_impl.stderr similarity index 100% rename from tests/ui/partialeq_ne_impl.stderr rename to clippy_tests/examples/partialeq_ne_impl.stderr diff --git a/tests/ui/patterns.rs b/clippy_tests/examples/patterns.rs similarity index 100% rename from tests/ui/patterns.rs rename to clippy_tests/examples/patterns.rs diff --git a/tests/ui/patterns.stderr b/clippy_tests/examples/patterns.stderr similarity index 100% rename from tests/ui/patterns.stderr rename to clippy_tests/examples/patterns.stderr diff --git a/tests/ui/precedence.rs b/clippy_tests/examples/precedence.rs similarity index 100% rename from tests/ui/precedence.rs rename to clippy_tests/examples/precedence.rs diff --git a/tests/ui/precedence.stderr b/clippy_tests/examples/precedence.stderr similarity index 100% rename from tests/ui/precedence.stderr rename to clippy_tests/examples/precedence.stderr diff --git a/tests/ui/print.rs b/clippy_tests/examples/print.rs similarity index 100% rename from tests/ui/print.rs rename to clippy_tests/examples/print.rs diff --git a/tests/ui/print.stderr b/clippy_tests/examples/print.stderr similarity index 100% rename from tests/ui/print.stderr rename to clippy_tests/examples/print.stderr diff --git a/tests/ui/print_with_newline.rs b/clippy_tests/examples/print_with_newline.rs similarity index 100% rename from tests/ui/print_with_newline.rs rename to clippy_tests/examples/print_with_newline.rs diff --git a/tests/ui/print_with_newline.stderr b/clippy_tests/examples/print_with_newline.stderr similarity index 100% rename from tests/ui/print_with_newline.stderr rename to clippy_tests/examples/print_with_newline.stderr diff --git a/tests/ui/println_empty_string.rs b/clippy_tests/examples/println_empty_string.rs similarity index 100% rename from tests/ui/println_empty_string.rs rename to clippy_tests/examples/println_empty_string.rs diff --git a/tests/ui/println_empty_string.stderr b/clippy_tests/examples/println_empty_string.stderr similarity index 100% rename from tests/ui/println_empty_string.stderr rename to clippy_tests/examples/println_empty_string.stderr diff --git a/tests/ui/ptr_arg.rs b/clippy_tests/examples/ptr_arg.rs similarity index 100% rename from tests/ui/ptr_arg.rs rename to clippy_tests/examples/ptr_arg.rs diff --git a/tests/ui/ptr_arg.stderr b/clippy_tests/examples/ptr_arg.stderr similarity index 100% rename from tests/ui/ptr_arg.stderr rename to clippy_tests/examples/ptr_arg.stderr diff --git a/tests/ui/range.rs b/clippy_tests/examples/range.rs similarity index 100% rename from tests/ui/range.rs rename to clippy_tests/examples/range.rs diff --git a/tests/ui/range.stderr b/clippy_tests/examples/range.stderr similarity index 100% rename from tests/ui/range.stderr rename to clippy_tests/examples/range.stderr diff --git a/tests/ui/range_plus_minus_one.rs b/clippy_tests/examples/range_plus_minus_one.rs similarity index 100% rename from tests/ui/range_plus_minus_one.rs rename to clippy_tests/examples/range_plus_minus_one.rs diff --git a/tests/ui/range_plus_minus_one.stderr b/clippy_tests/examples/range_plus_minus_one.stderr similarity index 100% rename from tests/ui/range_plus_minus_one.stderr rename to clippy_tests/examples/range_plus_minus_one.stderr diff --git a/tests/ui/redundant_closure_call.rs b/clippy_tests/examples/redundant_closure_call.rs similarity index 100% rename from tests/ui/redundant_closure_call.rs rename to clippy_tests/examples/redundant_closure_call.rs diff --git a/tests/ui/redundant_closure_call.stderr b/clippy_tests/examples/redundant_closure_call.stderr similarity index 100% rename from tests/ui/redundant_closure_call.stderr rename to clippy_tests/examples/redundant_closure_call.stderr diff --git a/tests/ui/reference.rs b/clippy_tests/examples/reference.rs similarity index 100% rename from tests/ui/reference.rs rename to clippy_tests/examples/reference.rs diff --git a/tests/ui/reference.stderr b/clippy_tests/examples/reference.stderr similarity index 100% rename from tests/ui/reference.stderr rename to clippy_tests/examples/reference.stderr diff --git a/tests/ui/regex.rs b/clippy_tests/examples/regex.rs similarity index 100% rename from tests/ui/regex.rs rename to clippy_tests/examples/regex.rs diff --git a/tests/ui/regex.stderr b/clippy_tests/examples/regex.stderr similarity index 100% rename from tests/ui/regex.stderr rename to clippy_tests/examples/regex.stderr diff --git a/tests/ui/replace_consts.rs b/clippy_tests/examples/replace_consts.rs similarity index 100% rename from tests/ui/replace_consts.rs rename to clippy_tests/examples/replace_consts.rs diff --git a/tests/ui/replace_consts.stderr b/clippy_tests/examples/replace_consts.stderr similarity index 100% rename from tests/ui/replace_consts.stderr rename to clippy_tests/examples/replace_consts.stderr diff --git a/tests/ui/serde.rs b/clippy_tests/examples/serde.rs similarity index 100% rename from tests/ui/serde.rs rename to clippy_tests/examples/serde.rs diff --git a/tests/ui/serde.stderr b/clippy_tests/examples/serde.stderr similarity index 100% rename from tests/ui/serde.stderr rename to clippy_tests/examples/serde.stderr diff --git a/tests/ui/shadow.rs b/clippy_tests/examples/shadow.rs similarity index 100% rename from tests/ui/shadow.rs rename to clippy_tests/examples/shadow.rs diff --git a/tests/ui/shadow.stderr b/clippy_tests/examples/shadow.stderr similarity index 100% rename from tests/ui/shadow.stderr rename to clippy_tests/examples/shadow.stderr diff --git a/tests/ui/short_circuit_statement.rs b/clippy_tests/examples/short_circuit_statement.rs similarity index 100% rename from tests/ui/short_circuit_statement.rs rename to clippy_tests/examples/short_circuit_statement.rs diff --git a/tests/ui/short_circuit_statement.stderr b/clippy_tests/examples/short_circuit_statement.stderr similarity index 100% rename from tests/ui/short_circuit_statement.stderr rename to clippy_tests/examples/short_circuit_statement.stderr diff --git a/tests/ui/single_char_pattern.rs b/clippy_tests/examples/single_char_pattern.rs similarity index 100% rename from tests/ui/single_char_pattern.rs rename to clippy_tests/examples/single_char_pattern.rs diff --git a/tests/ui/single_char_pattern.stderr b/clippy_tests/examples/single_char_pattern.stderr similarity index 100% rename from tests/ui/single_char_pattern.stderr rename to clippy_tests/examples/single_char_pattern.stderr diff --git a/tests/ui/starts_ends_with.rs b/clippy_tests/examples/starts_ends_with.rs similarity index 100% rename from tests/ui/starts_ends_with.rs rename to clippy_tests/examples/starts_ends_with.rs diff --git a/tests/ui/starts_ends_with.stderr b/clippy_tests/examples/starts_ends_with.stderr similarity index 100% rename from tests/ui/starts_ends_with.stderr rename to clippy_tests/examples/starts_ends_with.stderr diff --git a/tests/ui/string_extend.rs b/clippy_tests/examples/string_extend.rs similarity index 100% rename from tests/ui/string_extend.rs rename to clippy_tests/examples/string_extend.rs diff --git a/tests/ui/string_extend.stderr b/clippy_tests/examples/string_extend.stderr similarity index 100% rename from tests/ui/string_extend.stderr rename to clippy_tests/examples/string_extend.stderr diff --git a/tests/ui/strings.rs b/clippy_tests/examples/strings.rs similarity index 100% rename from tests/ui/strings.rs rename to clippy_tests/examples/strings.rs diff --git a/tests/ui/strings.stderr b/clippy_tests/examples/strings.stderr similarity index 100% rename from tests/ui/strings.stderr rename to clippy_tests/examples/strings.stderr diff --git a/tests/ui/stutter.rs b/clippy_tests/examples/stutter.rs similarity index 100% rename from tests/ui/stutter.rs rename to clippy_tests/examples/stutter.rs diff --git a/tests/ui/stutter.stderr b/clippy_tests/examples/stutter.stderr similarity index 100% rename from tests/ui/stutter.stderr rename to clippy_tests/examples/stutter.stderr diff --git a/tests/ui/swap.rs b/clippy_tests/examples/swap.rs similarity index 100% rename from tests/ui/swap.rs rename to clippy_tests/examples/swap.rs diff --git a/tests/ui/swap.stderr b/clippy_tests/examples/swap.stderr similarity index 100% rename from tests/ui/swap.stderr rename to clippy_tests/examples/swap.stderr diff --git a/tests/ui/temporary_assignment.rs b/clippy_tests/examples/temporary_assignment.rs similarity index 100% rename from tests/ui/temporary_assignment.rs rename to clippy_tests/examples/temporary_assignment.rs diff --git a/tests/ui/temporary_assignment.stderr b/clippy_tests/examples/temporary_assignment.stderr similarity index 100% rename from tests/ui/temporary_assignment.stderr rename to clippy_tests/examples/temporary_assignment.stderr diff --git a/tests/ui/toplevel_ref_arg.rs b/clippy_tests/examples/toplevel_ref_arg.rs similarity index 100% rename from tests/ui/toplevel_ref_arg.rs rename to clippy_tests/examples/toplevel_ref_arg.rs diff --git a/tests/ui/toplevel_ref_arg.stderr b/clippy_tests/examples/toplevel_ref_arg.stderr similarity index 100% rename from tests/ui/toplevel_ref_arg.stderr rename to clippy_tests/examples/toplevel_ref_arg.stderr diff --git a/tests/ui/trailing_zeros.rs b/clippy_tests/examples/trailing_zeros.rs similarity index 100% rename from tests/ui/trailing_zeros.rs rename to clippy_tests/examples/trailing_zeros.rs diff --git a/tests/ui/trailing_zeros.stderr b/clippy_tests/examples/trailing_zeros.stderr similarity index 100% rename from tests/ui/trailing_zeros.stderr rename to clippy_tests/examples/trailing_zeros.stderr diff --git a/tests/ui/trailing_zeros.stdout b/clippy_tests/examples/trailing_zeros.stdout similarity index 100% rename from tests/ui/trailing_zeros.stdout rename to clippy_tests/examples/trailing_zeros.stdout diff --git a/tests/ui/transmute.rs b/clippy_tests/examples/transmute.rs similarity index 100% rename from tests/ui/transmute.rs rename to clippy_tests/examples/transmute.rs diff --git a/tests/ui/transmute.stderr b/clippy_tests/examples/transmute.stderr similarity index 100% rename from tests/ui/transmute.stderr rename to clippy_tests/examples/transmute.stderr diff --git a/tests/ui/transmute_32bit.rs b/clippy_tests/examples/transmute_32bit.rs similarity index 100% rename from tests/ui/transmute_32bit.rs rename to clippy_tests/examples/transmute_32bit.rs diff --git a/tests/ui/transmute_64bit.rs b/clippy_tests/examples/transmute_64bit.rs similarity index 100% rename from tests/ui/transmute_64bit.rs rename to clippy_tests/examples/transmute_64bit.rs diff --git a/tests/ui/transmute_64bit.stderr b/clippy_tests/examples/transmute_64bit.stderr similarity index 100% rename from tests/ui/transmute_64bit.stderr rename to clippy_tests/examples/transmute_64bit.stderr diff --git a/tests/ui/ty_fn_sig.rs b/clippy_tests/examples/ty_fn_sig.rs similarity index 100% rename from tests/ui/ty_fn_sig.rs rename to clippy_tests/examples/ty_fn_sig.rs diff --git a/tests/ui/types.rs b/clippy_tests/examples/types.rs similarity index 100% rename from tests/ui/types.rs rename to clippy_tests/examples/types.rs diff --git a/tests/ui/types.stderr b/clippy_tests/examples/types.stderr similarity index 100% rename from tests/ui/types.stderr rename to clippy_tests/examples/types.stderr diff --git a/tests/ui/unicode.rs b/clippy_tests/examples/unicode.rs similarity index 100% rename from tests/ui/unicode.rs rename to clippy_tests/examples/unicode.rs diff --git a/tests/ui/unicode.stderr b/clippy_tests/examples/unicode.stderr similarity index 100% rename from tests/ui/unicode.stderr rename to clippy_tests/examples/unicode.stderr diff --git a/tests/ui/unit_arg.rs b/clippy_tests/examples/unit_arg.rs similarity index 100% rename from tests/ui/unit_arg.rs rename to clippy_tests/examples/unit_arg.rs diff --git a/tests/ui/unit_arg.stderr b/clippy_tests/examples/unit_arg.stderr similarity index 100% rename from tests/ui/unit_arg.stderr rename to clippy_tests/examples/unit_arg.stderr diff --git a/tests/ui/unit_cmp.rs b/clippy_tests/examples/unit_cmp.rs similarity index 100% rename from tests/ui/unit_cmp.rs rename to clippy_tests/examples/unit_cmp.rs diff --git a/tests/ui/unit_cmp.stderr b/clippy_tests/examples/unit_cmp.stderr similarity index 100% rename from tests/ui/unit_cmp.stderr rename to clippy_tests/examples/unit_cmp.stderr diff --git a/tests/ui/unnecessary_clone.rs b/clippy_tests/examples/unnecessary_clone.rs similarity index 100% rename from tests/ui/unnecessary_clone.rs rename to clippy_tests/examples/unnecessary_clone.rs diff --git a/tests/ui/unnecessary_clone.stderr b/clippy_tests/examples/unnecessary_clone.stderr similarity index 100% rename from tests/ui/unnecessary_clone.stderr rename to clippy_tests/examples/unnecessary_clone.stderr diff --git a/tests/ui/unneeded_field_pattern.rs b/clippy_tests/examples/unneeded_field_pattern.rs similarity index 100% rename from tests/ui/unneeded_field_pattern.rs rename to clippy_tests/examples/unneeded_field_pattern.rs diff --git a/tests/ui/unneeded_field_pattern.stderr b/clippy_tests/examples/unneeded_field_pattern.stderr similarity index 100% rename from tests/ui/unneeded_field_pattern.stderr rename to clippy_tests/examples/unneeded_field_pattern.stderr diff --git a/tests/ui/unreadable_literal.rs b/clippy_tests/examples/unreadable_literal.rs similarity index 100% rename from tests/ui/unreadable_literal.rs rename to clippy_tests/examples/unreadable_literal.rs diff --git a/tests/ui/unreadable_literal.stderr b/clippy_tests/examples/unreadable_literal.stderr similarity index 100% rename from tests/ui/unreadable_literal.stderr rename to clippy_tests/examples/unreadable_literal.stderr diff --git a/tests/ui/unsafe_removed_from_name.rs b/clippy_tests/examples/unsafe_removed_from_name.rs similarity index 100% rename from tests/ui/unsafe_removed_from_name.rs rename to clippy_tests/examples/unsafe_removed_from_name.rs diff --git a/tests/ui/unsafe_removed_from_name.stderr b/clippy_tests/examples/unsafe_removed_from_name.stderr similarity index 100% rename from tests/ui/unsafe_removed_from_name.stderr rename to clippy_tests/examples/unsafe_removed_from_name.stderr diff --git a/tests/ui/unused_io_amount.rs b/clippy_tests/examples/unused_io_amount.rs similarity index 100% rename from tests/ui/unused_io_amount.rs rename to clippy_tests/examples/unused_io_amount.rs diff --git a/tests/ui/unused_io_amount.stderr b/clippy_tests/examples/unused_io_amount.stderr similarity index 100% rename from tests/ui/unused_io_amount.stderr rename to clippy_tests/examples/unused_io_amount.stderr diff --git a/tests/ui/unused_labels.rs b/clippy_tests/examples/unused_labels.rs similarity index 100% rename from tests/ui/unused_labels.rs rename to clippy_tests/examples/unused_labels.rs diff --git a/tests/ui/unused_labels.stderr b/clippy_tests/examples/unused_labels.stderr similarity index 100% rename from tests/ui/unused_labels.stderr rename to clippy_tests/examples/unused_labels.stderr diff --git a/tests/ui/unused_lt.rs b/clippy_tests/examples/unused_lt.rs similarity index 100% rename from tests/ui/unused_lt.rs rename to clippy_tests/examples/unused_lt.rs diff --git a/tests/ui/unused_lt.stderr b/clippy_tests/examples/unused_lt.stderr similarity index 100% rename from tests/ui/unused_lt.stderr rename to clippy_tests/examples/unused_lt.stderr diff --git a/tests/ui/update-all-references.sh b/clippy_tests/examples/update-all-references.sh similarity index 100% rename from tests/ui/update-all-references.sh rename to clippy_tests/examples/update-all-references.sh diff --git a/tests/ui/update-references.sh b/clippy_tests/examples/update-references.sh similarity index 100% rename from tests/ui/update-references.sh rename to clippy_tests/examples/update-references.sh diff --git a/tests/ui/use_self.rs b/clippy_tests/examples/use_self.rs similarity index 100% rename from tests/ui/use_self.rs rename to clippy_tests/examples/use_self.rs diff --git a/tests/ui/use_self.stderr b/clippy_tests/examples/use_self.stderr similarity index 100% rename from tests/ui/use_self.stderr rename to clippy_tests/examples/use_self.stderr diff --git a/tests/ui/used_underscore_binding.rs b/clippy_tests/examples/used_underscore_binding.rs similarity index 100% rename from tests/ui/used_underscore_binding.rs rename to clippy_tests/examples/used_underscore_binding.rs diff --git a/tests/ui/used_underscore_binding.stderr b/clippy_tests/examples/used_underscore_binding.stderr similarity index 100% rename from tests/ui/used_underscore_binding.stderr rename to clippy_tests/examples/used_underscore_binding.stderr diff --git a/tests/ui/useless_asref.rs b/clippy_tests/examples/useless_asref.rs similarity index 100% rename from tests/ui/useless_asref.rs rename to clippy_tests/examples/useless_asref.rs diff --git a/tests/ui/useless_asref.stderr b/clippy_tests/examples/useless_asref.stderr similarity index 100% rename from tests/ui/useless_asref.stderr rename to clippy_tests/examples/useless_asref.stderr diff --git a/tests/ui/useless_attribute.rs b/clippy_tests/examples/useless_attribute.rs similarity index 100% rename from tests/ui/useless_attribute.rs rename to clippy_tests/examples/useless_attribute.rs diff --git a/tests/ui/useless_attribute.stderr b/clippy_tests/examples/useless_attribute.stderr similarity index 100% rename from tests/ui/useless_attribute.stderr rename to clippy_tests/examples/useless_attribute.stderr diff --git a/tests/ui/vec.rs b/clippy_tests/examples/vec.rs similarity index 100% rename from tests/ui/vec.rs rename to clippy_tests/examples/vec.rs diff --git a/tests/ui/vec.stderr b/clippy_tests/examples/vec.stderr similarity index 100% rename from tests/ui/vec.stderr rename to clippy_tests/examples/vec.stderr diff --git a/tests/ui/while_loop.rs b/clippy_tests/examples/while_loop.rs similarity index 100% rename from tests/ui/while_loop.rs rename to clippy_tests/examples/while_loop.rs diff --git a/tests/ui/while_loop.stderr b/clippy_tests/examples/while_loop.stderr similarity index 100% rename from tests/ui/while_loop.stderr rename to clippy_tests/examples/while_loop.stderr diff --git a/tests/ui/wrong_self_convention.rs b/clippy_tests/examples/wrong_self_convention.rs similarity index 100% rename from tests/ui/wrong_self_convention.rs rename to clippy_tests/examples/wrong_self_convention.rs diff --git a/tests/ui/wrong_self_convention.stderr b/clippy_tests/examples/wrong_self_convention.stderr similarity index 100% rename from tests/ui/wrong_self_convention.stderr rename to clippy_tests/examples/wrong_self_convention.stderr diff --git a/tests/ui/zero_div_zero.rs b/clippy_tests/examples/zero_div_zero.rs similarity index 100% rename from tests/ui/zero_div_zero.rs rename to clippy_tests/examples/zero_div_zero.rs diff --git a/tests/ui/zero_div_zero.stderr b/clippy_tests/examples/zero_div_zero.stderr similarity index 100% rename from tests/ui/zero_div_zero.stderr rename to clippy_tests/examples/zero_div_zero.stderr diff --git a/tests/ui/zero_ptr.rs b/clippy_tests/examples/zero_ptr.rs similarity index 100% rename from tests/ui/zero_ptr.rs rename to clippy_tests/examples/zero_ptr.rs diff --git a/tests/ui/zero_ptr.stderr b/clippy_tests/examples/zero_ptr.stderr similarity index 100% rename from tests/ui/zero_ptr.stderr rename to clippy_tests/examples/zero_ptr.stderr diff --git a/clippy_tests/src/compile.rs b/clippy_tests/src/compile.rs new file mode 100644 index 000000000000..ae99eedd5fe5 --- /dev/null +++ b/clippy_tests/src/compile.rs @@ -0,0 +1,56 @@ +use std::path::Path; +use failure::{Error, err_msg}; +use std::process::Output; + +fn compile(file: &Path) -> Result<Output, Error> { + let example_name = file.file_stem() + .ok_or_else(|| err_msg(format!("Couldn't get file name from {:?}", file)))?; + + let better_call_clippy = cmd!( + "cargo", "check", + "--example", example_name, + "--message-format=json", "--quiet" + ); + let res = better_call_clippy + .env("RUSTC_WRAPPER", "clippy-driver") + .env("RUSTC_FLAGS", "-Dwarnings") + .env("CLIPPY_DISABLE_DOCS_LINKS", "true") + .env("CLIPPY_TESTS", "true") + .env("RUST_BACKTRACE", "0") + .stdout_capture() + .stderr_capture() + .unchecked() + .run()?; + + Ok(res) +} + +pub fn get_json_errors(file: &Path) -> Result<String, Error> { + let res = compile(file)?; + match res.status.code() { + Some(0) | Some(1) | Some(101) => Ok(String::from_utf8(res.stdout)?), + _ => Err(err_msg( + format!( + "failed with status {:?}: {}", + res.status.code(), String::from_utf8(res.stderr)?, + ), + )) + } +} + +pub fn without_errors(file: &Path) -> Result<(), Error> { + let res = compile(file)?; + + match res.status.code() { + Some(0) => Ok(()), + _ => { + debug!("file {:?} failed to compile:\n{}\n{}", + file, String::from_utf8(res.stdout)?, String::from_utf8(res.stderr)? + ); + Err(err_msg(format!( + "failed with status {:?} (`env RUST_LOG=clippy_test=info` for more info)", + res.status.code(), + ))) + } + } +} diff --git a/clippy_tests/src/diff.rs b/clippy_tests/src/diff.rs new file mode 100644 index 000000000000..1111728972f6 --- /dev/null +++ b/clippy_tests/src/diff.rs @@ -0,0 +1,196 @@ +//! Draw some pretty diff + +extern crate ansi_term; +extern crate difference; + +use failure::Error; + +pub fn render(left: &str, right: &str) -> Result<String, Error> { + let mut fancy_diff = String::new(); + let changeset = Changeset::new(&left, &right, "\n"); + format_changeset(&mut fancy_diff, &changeset)?; + + Ok(fancy_diff) +} + +// What follows is copied from [1] which is Copyright 2016-2017 by Colin Kiegel, +// and licensed under MIT/Apache-2.0. +// +// [1]: https://github.com/colin-kiegel/rust-pretty-assertions/blob/cf599543726ddac31f6be2319b35413952c9f9dc/src/format_changeset.rs + +use self::difference::{Difference, Changeset}; +use std::fmt; +use self::ansi_term::Colour::{Red, Green, Fixed}; +use self::ansi_term::Style; + +macro_rules! paint { + ($f:ident, $colour:expr, $fmt:expr, $($args:tt)*) => ( + write!($f, "{}", $colour.paint(format!($fmt, $($args)*))) + ) +} + +const SIGN_RIGHT: char = '>'; // + > → +const SIGN_LEFT: char = '<'; // - < ← + +// Adapted from: +// https://github.com/johannhof/difference.rs/blob/c5749ad7d82aa3d480c15cb61af9f6baa08f116f/examples/github-style.rs +// Credits johannhof (MIT License) + +fn format_changeset(f: &mut fmt::Write, changeset: &Changeset) -> fmt::Result { + let ref diffs = changeset.diffs; + + writeln!( + f, + "{} {} / {} :", + Style::new().bold().paint("Diff"), + Red.paint(format!("{} left", SIGN_LEFT)), + Green.paint(format!("right {}", SIGN_RIGHT)) + )?; + for i in 0..diffs.len() { + match diffs[i] { + Difference::Same(ref same) => { + // Have to split line by line in order to have the extra whitespace + // at the beginning. + for line in same.split("\n") { + writeln!(f, " {}", line)?; + } + } + Difference::Add(ref added) => { + match diffs.get(i - 1) { + Some(&Difference::Rem(ref removed)) => { + // The addition is preceded by an removal. + // + // Let's highlight the character-differences in this replaced + // chunk. Note that this chunk can span over multiple lines. + format_replacement(f, added, removed)?; + } + _ => { + for line in added.split("\n") { + paint!(f, Green, "{}{}\n", SIGN_RIGHT, line)?; + } + } + }; + } + Difference::Rem(ref removed) => { + match diffs.get(i + 1) { + Some(&Difference::Add(_)) => { + // The removal is followed by an addition. + // + // ... we'll handle both in the next iteration. + } + _ => { + for line in removed.split("\n") { + paint!(f, Red, "{}{}\n", SIGN_LEFT, line)?; + } + } + } + } + } + } + Ok(()) +} + +macro_rules! join { + ( + $elem:ident in ($iter:expr) { + $( $body:tt )* + } seperated by { + $( $separator:tt )* + } + ) => ( + let mut iter = $iter; + + if let Some($elem) = iter.next() { + $( $body )* + } + + for $elem in iter { + $( $separator )* + $( $body )* + } + ) +} + +pub fn format_replacement(f: &mut fmt::Write, added: &str, removed: &str) -> fmt::Result { + let Changeset { diffs, .. } = Changeset::new(removed, added, ""); + + // LEFT side (==what's been) + paint!(f, Red, "{}", SIGN_LEFT)?; + for c in &diffs { + match *c { + Difference::Same(ref word_diff) => { + join!(chunk in (word_diff.split("\n")) { + paint!(f, Red, "{}", chunk)?; + } seperated by { + writeln!(f)?; + paint!(f, Red, "{}", SIGN_LEFT)?; + }); + } + Difference::Rem(ref word_diff) => { + join!(chunk in (word_diff.split("\n")) { + paint!(f, Red.on(Fixed(52)).bold(), "{}", chunk)?; + } seperated by { + writeln!(f)?; + paint!(f, Red.bold(), "{}", SIGN_LEFT)?; + }); + } + _ => (), + } + } + writeln!(f, "")?; + + // RIGHT side (==what's new) + paint!(f, Green, "{}", SIGN_RIGHT)?; + for c in &diffs { + match *c { + Difference::Same(ref word_diff) => { + join!(chunk in (word_diff.split("\n")) { + paint!(f, Green, "{}", chunk)?; + } seperated by { + writeln!(f)?; + paint!(f, Green, "{}", SIGN_RIGHT)?; + }); + } + Difference::Add(ref word_diff) => { + join!(chunk in (word_diff.split("\n")) { + paint!(f, Green.on(Fixed(22)).bold(), "{}", chunk)?; + } seperated by { + writeln!(f)?; + paint!(f, Green.bold(), "{}", SIGN_RIGHT)?; + }); + } + _ => (), + } + } + + writeln!(f, "") +} + +#[test] +fn test_format_replacement() { + let added = " 84,\ + \n 248,"; + let removed = " 0,\ + \n 0,\ + \n 128,"; + + let mut buf = String::new(); + let _ = format_replacement(&mut buf, added, removed); + + println!( + "## removed ##\ + \n{}\ + \n## added ##\ + \n{}\ + \n## diff ##\ + \n{}", + removed, + added, + buf + ); + + assert_eq!( + buf, + "\u{1b}[31m<\u{1b}[0m\u{1b}[31m \u{1b}[0m\u{1b}[1;48;5;52;31m0\u{1b}[0m\u{1b}[31m,\u{1b}[0m\n\u{1b}[31m<\u{1b}[0m\u{1b}[31m \u{1b}[0m\u{1b}[1;48;5;52;31m0,\u{1b}[0m\n\u{1b}[1;31m<\u{1b}[0m\u{1b}[1;48;5;52;31m 1\u{1b}[0m\u{1b}[31m2\u{1b}[0m\u{1b}[31m8,\u{1b}[0m\n\u{1b}[32m>\u{1b}[0m\u{1b}[32m \u{1b}[0m\u{1b}[1;48;5;22;32m84\u{1b}[0m\u{1b}[32m,\u{1b}[0m\n\u{1b}[32m>\u{1b}[0m\u{1b}[32m \u{1b}[0m\u{1b}[32m2\u{1b}[0m\u{1b}[1;48;5;22;32m4\u{1b}[0m\u{1b}[32m8,\u{1b}[0m\n" + ); +} diff --git a/clippy_tests/src/fix.rs b/clippy_tests/src/fix.rs new file mode 100644 index 000000000000..cf66a178f96b --- /dev/null +++ b/clippy_tests/src/fix.rs @@ -0,0 +1,62 @@ +use rustfix::{Suggestion, Replacement}; +use failure::Error; + +pub fn apply_suggestions(file_content: &str, suggestions: &[Suggestion]) -> Result<String, Error> { + let mut fixed = String::from(file_content); + + for sug in suggestions.into_iter().rev() { + trace!("{:?}", sug); + for sol in &sug.solutions { + trace!("{:?}", sol); + for r in &sol.replacements { + debug!("replaced."); + trace!("{:?}", r); + fixed = apply_suggestion(&mut fixed, r)?; + } + } + } + + Ok(fixed) +} + +fn apply_suggestion(file_content: &mut String, suggestion: &Replacement) -> Result<String, Error> { + use std::cmp::max; + + let mut new_content = String::new(); + + // Add the lines before the section we want to replace + new_content.push_str(&file_content.lines() + .take(max(suggestion.snippet.line_range.start.line - 1, 0) as usize) + .collect::<Vec<_>>() + .join("\n")); + new_content.push_str("\n"); + + // Parts of line before replacement + new_content.push_str(&file_content.lines() + .nth(suggestion.snippet.line_range.start.line - 1) + .unwrap_or("") + .chars() + .take(suggestion.snippet.line_range.start.column - 1) + .collect::<String>()); + + // Insert new content! Finally! + new_content.push_str(&suggestion.replacement); + + // Parts of line after replacement + new_content.push_str(&file_content.lines() + .nth(suggestion.snippet.line_range.end.line - 1) + .unwrap_or("") + .chars() + .skip(suggestion.snippet.line_range.end.column - 1) + .collect::<String>()); + + // Add the lines after the section we want to replace + new_content.push_str("\n"); + new_content.push_str(&file_content.lines() + .skip(suggestion.snippet.line_range.end.line as usize) + .collect::<Vec<_>>() + .join("\n")); + new_content.push_str("\n"); + + Ok(new_content) +} diff --git a/clippy_tests/src/human.rs b/clippy_tests/src/human.rs new file mode 100644 index 000000000000..a723fc35a673 --- /dev/null +++ b/clippy_tests/src/human.rs @@ -0,0 +1,19 @@ +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +struct CargoMessage { + message: Diagnostic, +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +struct Diagnostic { + rendered: String, +} + +pub fn ui_from_json(input: &str) -> String { + input.lines() + .map(|l| ::serde_json::from_str::<CargoMessage>(l)) + // eat parsing errors + .flat_map(|line| line.ok()) + // One diagnostic line might have multiple suggestions + .map(|c| c.message.rendered) + .collect() +} diff --git a/clippy_tests/src/main.rs b/clippy_tests/src/main.rs new file mode 100644 index 000000000000..b85372c0e5f1 --- /dev/null +++ b/clippy_tests/src/main.rs @@ -0,0 +1,173 @@ +#[macro_use] extern crate serde_derive; +extern crate serde; +extern crate serde_json; +#[macro_use] extern crate failure_derive; +extern crate failure; +#[macro_use] extern crate log; +#[macro_use] extern crate duct; +extern crate tempdir; +extern crate env_logger; +extern crate rayon; +extern crate rustfix; + +use std::fs; +use std::path::{Path, PathBuf}; +use std::collections::HashSet; +use failure::{Error, ResultExt, err_msg}; +use rayon::prelude::*; + +mod compile; +mod fix; +mod diff; +mod human; +mod test_results; +use test_results::TestResults; + +fn read_file(path: &Path) -> Result<String, Error> { + use std::io::Read; + + let mut buffer = String::new(); + let mut file = fs::File::open(path)?; + file.read_to_string(&mut buffer)?; + Ok(buffer) +} + +fn rename(file: &Path, suffix: &str) -> Result<PathBuf, Error> { + let name = file.file_stem() + .ok_or_else(|| err_msg(format!("Couldn't get file stem from {:?}", file)))? + .to_str() + .ok_or_else(|| err_msg(format!("Couldn't parse file stem from {:?}", file)))?; + + Ok(file.with_file_name(&format!("{}--{}.rs", name, suffix))) +} + +#[derive(Fail, Debug)] +#[fail(display = "Could not test suggestions, there was no assertion file")] +struct NoSuggestionsTestFile; + +#[derive(Fail, Debug)] +#[fail(display = "Could not test human readable error messages, there was no assertion file")] +struct NoUiTestFile; + +#[derive(Fail, Debug)] +#[fail(display = "Mismatch between expected and generated fixed file")] +struct FixedFileMismatch; + +#[derive(Fail, Debug)] +#[fail(display = "Mismatch between expected and generated diagnostics output")] +struct StderrFileMismatch; + +fn test_rustfix_with_file<P: AsRef<Path>>(file: P) -> Result<(), Error> { + let file: &Path = file.as_ref(); + let fixed_file = rename(file, "fixed")?; + + debug!("testing: {:?}", file); + + let code = read_file(file)?; + debug!("compiling... {:?}", file); + let errors = compile::get_json_errors(file)?; + + let diagnostics = human::ui_from_json(&errors); + + if std::env::var("RECORD_NEW_DIAGNOSTICS").is_ok() { + use std::io::Write; + let diagnostics_recording = rename(file, "recorded")?.with_extension("stderr"); + let mut recorded_diagnostics = fs::File::create(&diagnostics_recording)?; + recorded_diagnostics.write_all(diagnostics.as_bytes())?; + debug!("wrote recorded diagnostics for {:?} to {:?}", file, diagnostics_recording); + } + + let ui_file = file.with_extension("stderr"); + let expected_diagnostics = read_file(&ui_file).map_err(|_| NoUiTestFile)?; + + debug!("comparing diagnostics for {:?}", file); + if diagnostics.trim() != expected_diagnostics.trim() { + use log::Level::Debug; + if log_enabled!(Debug) { + debug!( + "Difference between generated and expected diagnostics:\n{}", + diff::render(&diagnostics, &expected_diagnostics)?, + ); + } + Err(StderrFileMismatch)?; + }; + + debug!("collecting suggestions for {:?}", file); + let suggestions = rustfix::get_suggestions_from_json(&errors, &HashSet::new()); + + debug!("applying suggestions for {:?}", file); + let fixed = fix::apply_suggestions(&code, &suggestions)?; + + if std::env::var("RUSTFIX_PLS_FIX_AND_RECORD_MY_CODE").is_ok() { + use std::io::Write; + let fixes_recording = rename(file, "recorded")?; + let mut recorded_rust = fs::File::create(&fixes_recording)?; + recorded_rust.write_all(fixed.as_bytes())?; + debug!("wrote recorded fixes for {:?} to {:?}", file, fixes_recording); + } + + let expected_fixed = read_file(&fixed_file).map_err(|_| NoSuggestionsTestFile)?; + if fixed.trim() != expected_fixed.trim() { + use log::Level::Debug; + if log_enabled!(Debug) { + debug!( + "Difference between file produced by rustfix \ + and expected fixed file:\n{}", + diff::render(&fixed, &expected_fixed)?, + ); + } + Err(FixedFileMismatch)?; + }; + + debug!("compiling fixed file {:?}", fixed_file); + compile::without_errors(&fixed_file)?; + + Ok(()) +} + +fn get_fixture_files() -> Result<Vec<PathBuf>, Error> { + Ok(fs::read_dir("./examples").context("couldn't read examples dir")? + .into_iter() + .map(|e| e.unwrap().path()) + .filter(|p| p.is_file()) + .filter(|p| { + let x = p.to_string_lossy(); + x.ends_with(".rs") && !x.ends_with("--fixed.rs") && !x.ends_with("--recorded.rs") + }) + .collect()) +} + +fn run(file: &Path) -> TestResults { + match test_rustfix_with_file(&file) { + Ok(_) => { + info!("passed: {:?}", file); + TestResults::passed() + }, + Err(e) => { + match e.downcast::<NoSuggestionsTestFile>() { + Ok(e) => { + info!("ignored: {:?} (no fixed file)", file); + debug!("{}", e); + TestResults::ignored() + }, + Err(e) => { + warn!("failed: {:?}", file); + debug!("{}", e); + TestResults::failed() + } + } + } + } +} + +fn main() { + env_logger::init(); + let files = get_fixture_files().unwrap(); + + let res = files.par_iter() + // .take(10) + .map(|path| run(path)) + .reduce(TestResults::default, |a, b| a + b); + + println!("{}", res); +} diff --git a/clippy_tests/src/test_results.rs b/clippy_tests/src/test_results.rs new file mode 100644 index 000000000000..96b00d68d19e --- /dev/null +++ b/clippy_tests/src/test_results.rs @@ -0,0 +1,43 @@ +#[derive(Debug, Default, Clone, Copy)] +pub struct TestResults { + passed: i32, + failed: i32, + ignored: i32, +} + +impl TestResults { + pub fn passed() -> TestResults { + TestResults { passed: 1, ..TestResults::default() } + } + + pub fn failed() -> TestResults { + TestResults { failed: 1, ..TestResults::default() } + } + + pub fn ignored() -> TestResults { + TestResults { ignored: 1, ..TestResults::default() } + } +} + +impl ::std::ops::Add for TestResults { + type Output = TestResults; + + fn add(self, other: Self) -> Self { + TestResults { + passed: self.passed + other.passed, + failed: self.failed + other.failed, + ignored: self.ignored + other.ignored, + } + } +} + +impl ::std::fmt::Display for TestResults { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + let res = if self.failed > 0 { "failed" } else { "ok" }; + + write!(f, + "test result: {}. {} passed; {} failed; {} ignored;", + res, self.passed, self.failed, self.ignored, + ) + } +}