Skip to content

Commit 991610a

Browse files
committed
Auto merge of #10473 - flip1995:rustup, r=flip1995
Rustup r? `@ghost` changelog: none
2 parents a7fae6e + f3074c4 commit 991610a

39 files changed

+49
-65
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "clippy"
3-
version = "0.1.69"
3+
version = "0.1.70"
44
description = "A bunch of helpful lints to avoid common pitfalls in Rust"
55
repository = "https://github.com/rust-lang/rust-clippy"
66
readme = "README.md"

clippy_lints/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "clippy_lints"
3-
version = "0.1.69"
3+
version = "0.1.70"
44
description = "A bunch of helpful lints to avoid common pitfalls in Rust"
55
repository = "https://github.com/rust-lang/rust-clippy"
66
readme = "README.md"

clippy_lints/src/dereference.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1049,7 +1049,7 @@ fn binding_ty_auto_deref_stability<'tcx>(
10491049
))
10501050
.is_sized(cx.tcx, cx.param_env.without_caller_bounds()),
10511051
),
1052-
TyKind::OpaqueDef(..) | TyKind::Infer | TyKind::Typeof(..) | TyKind::TraitObject(..) | TyKind::Err => {
1052+
TyKind::OpaqueDef(..) | TyKind::Infer | TyKind::Typeof(..) | TyKind::TraitObject(..) | TyKind::Err(_) => {
10531053
Position::ReborrowStable(precedence)
10541054
},
10551055
};
@@ -1065,7 +1065,7 @@ fn ty_contains_infer(ty: &hir::Ty<'_>) -> bool {
10651065
if self.0
10661066
|| matches!(
10671067
ty.kind,
1068-
TyKind::OpaqueDef(..) | TyKind::Infer | TyKind::Typeof(_) | TyKind::Err
1068+
TyKind::OpaqueDef(..) | TyKind::Infer | TyKind::Typeof(_) | TyKind::Err(_)
10691069
)
10701070
{
10711071
self.0 = true;
@@ -1357,7 +1357,7 @@ fn replace_types<'tcx>(
13571357
&& let Some(term_ty) = projection_predicate.term.ty()
13581358
&& let ty::Param(term_param_ty) = term_ty.kind()
13591359
{
1360-
let projection = cx.tcx.mk_ty(ty::Alias(
1360+
let projection = cx.tcx.mk_ty_from_kind(ty::Alias(
13611361
ty::Projection,
13621362
projection_predicate.projection_ty.with_self_ty(cx.tcx, new_ty),
13631363
));

clippy_lints/src/derivable_impls.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use rustc_hir::{
88
Body, Expr, ExprKind, GenericArg, Impl, ImplItemKind, Item, ItemKind, Node, PathSegment, QPath, Ty, TyKind,
99
};
1010
use rustc_lint::{LateContext, LateLintPass};
11-
use rustc_middle::ty::{Adt, AdtDef, DefIdTree, SubstsRef};
11+
use rustc_middle::ty::{Adt, AdtDef, SubstsRef};
1212
use rustc_session::{declare_tool_lint, impl_lint_pass};
1313
use rustc_span::sym;
1414

clippy_lints/src/derive.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ fn param_env_for_derived_eq(tcx: TyCtxt<'_>, did: DefId, eq_trait_id: DefId) ->
514514
}
515515

516516
ParamEnv::new(
517-
tcx.mk_predicates(ty_predicates.iter().map(|&(p, _)| p).chain(
517+
tcx.mk_predicates_from_iter(ty_predicates.iter().map(|&(p, _)| p).chain(
518518
params.iter().filter(|&&(_, needs_eq)| needs_eq).map(|&(param, _)| {
519519
tcx.mk_predicate(Binder::dummy(PredicateKind::Clause(Clause::Trait(TraitPredicate {
520520
trait_ref: tcx.mk_trait_ref(eq_trait_id, [tcx.mk_param_from_def(param)]),

clippy_lints/src/loops/manual_flatten.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use rustc_errors::Applicability;
99
use rustc_hir::def::{DefKind, Res};
1010
use rustc_hir::{Expr, Pat, PatKind};
1111
use rustc_lint::LateContext;
12-
use rustc_middle::ty::{self, DefIdTree};
12+
use rustc_middle::ty;
1313
use rustc_span::source_map::Span;
1414

1515
/// Check for unnecessary `if let` usage in a for loop where only the `Some` or `Ok` variant of the

clippy_lints/src/loops/never_loop.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ fn never_loop_expr(expr: &Expr<'_>, ignore_ids: &mut Vec<HirId>, main_loop_id: H
232232
| ExprKind::Path(_)
233233
| ExprKind::ConstBlock(_)
234234
| ExprKind::Lit(_)
235-
| ExprKind::Err => NeverLoopResult::Otherwise,
235+
| ExprKind::Err(_) => NeverLoopResult::Otherwise,
236236
}
237237
}
238238

clippy_lints/src/manual_non_exhaustive.rs

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use rustc_errors::Applicability;
88
use rustc_hir::def::{CtorKind, CtorOf, DefKind, Res};
99
use rustc_hir::{self as hir, Expr, ExprKind, QPath};
1010
use rustc_lint::{EarlyContext, EarlyLintPass, LateContext, LateLintPass, LintContext};
11-
use rustc_middle::ty::DefIdTree;
1211
use rustc_session::{declare_tool_lint, impl_lint_pass};
1312
use rustc_span::def_id::{DefId, LocalDefId};
1413
use rustc_span::{sym, Span};

clippy_lints/src/matches/manual_unwrap_or.rs

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ use rustc_hir::def::{DefKind, Res};
1010
use rustc_hir::LangItem::{OptionNone, ResultErr};
1111
use rustc_hir::{Arm, Expr, PatKind};
1212
use rustc_lint::LateContext;
13-
use rustc_middle::ty::DefIdTree;
1413
use rustc_span::sym;
1514

1615
use super::MANUAL_UNWRAP_OR;

clippy_lints/src/matches/redundant_pattern_match.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use rustc_hir::def::{DefKind, Res};
1212
use rustc_hir::LangItem::{self, OptionNone, OptionSome, PollPending, PollReady, ResultErr, ResultOk};
1313
use rustc_hir::{Arm, Expr, ExprKind, Node, Pat, PatKind, QPath, UnOp};
1414
use rustc_lint::LateContext;
15-
use rustc_middle::ty::{self, subst::GenericArgKind, DefIdTree, Ty};
15+
use rustc_middle::ty::{self, subst::GenericArgKind, Ty};
1616
use rustc_span::{sym, Symbol};
1717

1818
pub(super) fn check<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {

clippy_lints/src/matches/significant_drop_in_scrutinee.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ impl<'a, 'tcx> Visitor<'tcx> for SigDropHelper<'a, 'tcx> {
341341
ExprKind::ConstBlock(_) |
342342
ExprKind::Continue(_) |
343343
ExprKind::DropTemps(_) |
344-
ExprKind::Err |
344+
ExprKind::Err(_) |
345345
ExprKind::InlineAsm(_) |
346346
ExprKind::Let(_) |
347347
ExprKind::Lit(_) |

clippy_lints/src/methods/bind_instead_of_map.rs

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use rustc_hir as hir;
88
use rustc_hir::def::{CtorKind, CtorOf, DefKind, Res};
99
use rustc_hir::{LangItem, QPath};
1010
use rustc_lint::LateContext;
11-
use rustc_middle::ty::DefIdTree;
1211
use rustc_span::Span;
1312

1413
pub(crate) struct OptionAndThenSome;

clippy_lints/src/methods/chars_cmp.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use rustc_errors::Applicability;
66
use rustc_hir as hir;
77
use rustc_lint::LateContext;
88
use rustc_lint::Lint;
9-
use rustc_middle::ty::{self, DefIdTree};
9+
use rustc_middle::ty;
1010

1111
/// Wrapper fn for `CHARS_NEXT_CMP` and `CHARS_LAST_CMP` lints.
1212
pub(super) fn check(

clippy_lints/src/methods/needless_collect.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ fn is_contains_sig(cx: &LateContext<'_>, call_id: HirId, iter_expr: &Expr<'_>) -
173173
&& let Some(iter_item) = cx.tcx
174174
.associated_items(iter_trait)
175175
.find_by_name_and_kind(cx.tcx, Ident::with_dummy_span(Symbol::intern("Item")), AssocKind::Type, iter_trait)
176-
&& let substs = cx.tcx.intern_substs(&[GenericArg::from(typeck.expr_ty_adjusted(iter_expr))])
176+
&& let substs = cx.tcx.mk_substs(&[GenericArg::from(typeck.expr_ty_adjusted(iter_expr))])
177177
&& let proj_ty = cx.tcx.mk_projection(iter_item.def_id, substs)
178178
&& let Ok(item_ty) = cx.tcx.try_normalize_erasing_regions(cx.param_env, proj_ty)
179179
{

clippy_lints/src/methods/option_map_or_none.rs

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use rustc_errors::Applicability;
66
use rustc_hir as hir;
77
use rustc_hir::LangItem::{OptionNone, OptionSome};
88
use rustc_lint::LateContext;
9-
use rustc_middle::ty::DefIdTree;
109
use rustc_span::symbol::sym;
1110

1211
use super::OPTION_MAP_OR_NONE;

clippy_lints/src/methods/unnecessary_to_owned.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ fn can_change_type<'a>(cx: &LateContext<'a>, mut expr: &'a Expr<'a>, mut ty: Ty<
414414
}
415415
});
416416

417-
let new_subst = cx.tcx.mk_substs(
417+
let new_subst = cx.tcx.mk_substs_from_iter(
418418
call_substs.iter()
419419
.enumerate()
420420
.map(|(i, t)|

clippy_lints/src/missing_doc.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use rustc_ast::ast::{self, MetaItem, MetaItemKind};
1313
use rustc_hir as hir;
1414
use rustc_hir::def_id::LocalDefId;
1515
use rustc_lint::{LateContext, LateLintPass, LintContext};
16-
use rustc_middle::ty::{DefIdTree, Visibility};
16+
use rustc_middle::ty::Visibility;
1717
use rustc_session::{declare_tool_lint, impl_lint_pass};
1818
use rustc_span::def_id::CRATE_DEF_ID;
1919
use rustc_span::source_map::Span;

clippy_lints/src/needless_question_mark.rs

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use rustc_errors::Applicability;
66
use rustc_hir::def::{DefKind, Res};
77
use rustc_hir::{AsyncGeneratorKind, Block, Body, Expr, ExprKind, GeneratorKind, LangItem, MatchSource, QPath};
88
use rustc_lint::{LateContext, LateLintPass};
9-
use rustc_middle::ty::DefIdTree;
109
use rustc_session::{declare_lint_pass, declare_tool_lint};
1110

1211
declare_clippy_lint! {

clippy_lints/src/operators/cmp_owned.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ fn check_op(cx: &LateContext<'_>, expr: &Expr<'_>, other: &Expr<'_>, left: bool)
4949
(arg, arg.span)
5050
},
5151
ExprKind::Call(path, [arg])
52-
if path_def_id(cx, path).map_or(false, |id| {
53-
if match_def_path(cx, id, &paths::FROM_STR_METHOD) {
52+
if path_def_id(cx, path).map_or(false, |did| {
53+
if match_def_path(cx, did, &paths::FROM_STR_METHOD) {
5454
true
55-
} else if cx.tcx.lang_items().from_fn() == Some(id) {
55+
} else if cx.tcx.is_diagnostic_item(sym::from_fn, did) {
5656
!is_copy(cx, typeck.expr_ty(expr))
5757
} else {
5858
false

clippy_lints/src/redundant_slicing.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ impl<'tcx> LateLintPass<'tcx> for RedundantSlicing {
134134
} else if let Some(target_id) = cx.tcx.lang_items().deref_target() {
135135
if let Ok(deref_ty) = cx.tcx.try_normalize_erasing_regions(
136136
cx.param_env,
137-
cx.tcx.mk_projection(target_id, cx.tcx.intern_substs(&[GenericArg::from(indexed_ty)])),
137+
cx.tcx.mk_projection(target_id, cx.tcx.mk_substs(&[GenericArg::from(indexed_ty)])),
138138
) {
139139
if deref_ty == expr_ty {
140140
let snip = snippet_with_context(cx, indexed.span, ctxt, "..", &mut app).0;

clippy_lints/src/std_instead_of_core.rs

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use clippy_utils::diagnostics::span_lint_and_help;
22
use rustc_hir::def_id::DefId;
33
use rustc_hir::{def::Res, HirId, Path, PathSegment};
44
use rustc_lint::{LateContext, LateLintPass};
5-
use rustc_middle::ty::DefIdTree;
65
use rustc_session::{declare_tool_lint, impl_lint_pass};
76
use rustc_span::{sym, symbol::kw, Span};
87

clippy_lints/src/unnecessary_owned_empty_strings.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use rustc_hir::{BorrowKind, Expr, ExprKind, LangItem, Mutability};
77
use rustc_lint::{LateContext, LateLintPass};
88
use rustc_middle::ty;
99
use rustc_session::{declare_lint_pass, declare_tool_lint};
10+
use rustc_span::symbol::sym;
1011

1112
declare_clippy_lint! {
1213
/// ### What it does
@@ -54,7 +55,7 @@ impl<'tcx> LateLintPass<'tcx> for UnnecessaryOwnedEmptyStrings {
5455
);
5556
} else {
5657
if_chain! {
57-
if Some(fun_def_id) == cx.tcx.lang_items().from_fn();
58+
if cx.tcx.is_diagnostic_item(sym::from_fn, fun_def_id);
5859
if let [.., last_arg] = args;
5960
if let ExprKind::Lit(spanned) = &last_arg.kind;
6061
if let LitKind::Str(symbol, _) = spanned.node;

clippy_lints/src/useless_conversion.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ impl<'tcx> LateLintPass<'tcx> for UselessConversion {
161161
}
162162

163163
if_chain! {
164-
if Some(def_id) == cx.tcx.lang_items().from_fn();
164+
if cx.tcx.is_diagnostic_item(sym::from_fn, def_id);
165165
if same_type_and_consts(a, b);
166166

167167
then {

clippy_lints/src/utils/author.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ impl<'a, 'tcx> PrintVisitor<'a, 'tcx> {
588588
},
589589
}
590590
},
591-
ExprKind::Err => kind!("Err"),
591+
ExprKind::Err(_) => kind!("Err(_)"),
592592
ExprKind::DropTemps(expr) => {
593593
bind!(self, expr);
594594
kind!("DropTemps({expr})");

clippy_lints/src/utils/internal_lints/interning_defined_symbol.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use rustc_hir::def_id::DefId;
1111
use rustc_hir::{BinOpKind, Expr, ExprKind, UnOp};
1212
use rustc_lint::{LateContext, LateLintPass};
1313
use rustc_middle::mir::interpret::ConstValue;
14-
use rustc_middle::ty::{self};
14+
use rustc_middle::ty;
1515
use rustc_session::{declare_tool_lint, impl_lint_pass};
1616
use rustc_span::symbol::Symbol;
1717

clippy_lints/src/utils/internal_lints/unnecessary_def_path.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use rustc_hir::def_id::DefId;
1111
use rustc_hir::{Expr, ExprKind, Local, Mutability, Node};
1212
use rustc_lint::{LateContext, LateLintPass};
1313
use rustc_middle::mir::interpret::{Allocation, ConstValue, GlobalAlloc};
14-
use rustc_middle::ty::{self, DefIdTree, Ty};
14+
use rustc_middle::ty::{self, Ty};
1515
use rustc_session::{declare_tool_lint, impl_lint_pass};
1616
use rustc_span::symbol::Symbol;
1717
use rustc_span::Span;

clippy_lints/src/wildcard_imports.rs

+3-7
Original file line numberDiff line numberDiff line change
@@ -155,14 +155,10 @@ impl LateLintPass<'_> for WildcardImports {
155155
)
156156
};
157157

158-
let imports_string = if used_imports.len() == 1 {
159-
used_imports.iter().next().unwrap().to_string()
158+
let mut imports = used_imports.items().map(ToString::to_string).into_sorted_stable_ord(false);
159+
let imports_string = if imports.len() == 1 {
160+
imports.pop().unwrap()
160161
} else {
161-
let mut imports = used_imports
162-
.iter()
163-
.map(ToString::to_string)
164-
.collect::<Vec<_>>();
165-
imports.sort();
166162
if braced_glob {
167163
imports.join(", ")
168164
} else {

clippy_utils/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "clippy_utils"
3-
version = "0.1.69"
3+
version = "0.1.70"
44
edition = "2021"
55
publish = false
66

clippy_utils/src/consts.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ pub fn constant<'tcx>(
237237
typeck_results,
238238
param_env: lcx.param_env,
239239
needed_resolution: false,
240-
substs: lcx.tcx.intern_substs(&[]),
240+
substs: ty::List::empty(),
241241
};
242242
cx.expr(e).map(|cst| (cst, cx.needed_resolution))
243243
}
@@ -306,7 +306,7 @@ pub fn constant_context<'a, 'tcx>(
306306
typeck_results,
307307
param_env: lcx.param_env,
308308
needed_resolution: false,
309-
substs: lcx.tcx.intern_substs(&[]),
309+
substs: ty::List::empty(),
310310
}
311311
}
312312

clippy_utils/src/eager_or_lazy.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ fn expr_eagerness<'tcx>(cx: &LateContext<'tcx>, e: &'tcx Expr<'_>) -> EagernessS
193193
| ExprKind::Ret(_)
194194
| ExprKind::InlineAsm(_)
195195
| ExprKind::Yield(..)
196-
| ExprKind::Err => {
196+
| ExprKind::Err(_) => {
197197
self.eagerness = ForceNoChange;
198198
return;
199199
},

clippy_utils/src/higher.rs

+5-8
Original file line numberDiff line numberDiff line change
@@ -287,15 +287,12 @@ impl<'a> VecArgs<'a> {
287287
Some(VecArgs::Repeat(&args[0], &args[1]))
288288
} else if match_def_path(cx, fun_def_id, &paths::SLICE_INTO_VEC) && args.len() == 1 {
289289
// `vec![a, b, c]` case
290-
if_chain! {
291-
if let hir::ExprKind::Box(boxed) = args[0].kind;
292-
if let hir::ExprKind::Array(args) = boxed.kind;
293-
then {
294-
return Some(VecArgs::Vec(args));
295-
}
290+
if let hir::ExprKind::Call(_, [arg]) = &args[0].kind
291+
&& let hir::ExprKind::Array(args) = arg.kind {
292+
Some(VecArgs::Vec(args))
293+
} else {
294+
None
296295
}
297-
298-
None
299296
} else if match_def_path(cx, fun_def_id, &paths::VEC_NEW) && args.is_empty() {
300297
Some(VecArgs::Vec(&[]))
301298
} else {

clippy_utils/src/hir_utils.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ impl<'a, 'tcx> SpanlessHash<'a, 'tcx> {
714714
}
715715
self.hash_pat(pat);
716716
},
717-
ExprKind::Err => {},
717+
ExprKind::Err(_) => {},
718718
ExprKind::Lit(ref l) => {
719719
l.node.hash(&mut self.s);
720720
},
@@ -986,7 +986,7 @@ impl<'a, 'tcx> SpanlessHash<'a, 'tcx> {
986986
TyKind::Typeof(anon_const) => {
987987
self.hash_body(anon_const.body);
988988
},
989-
TyKind::Err | TyKind::Infer | TyKind::Never => {},
989+
TyKind::Err(_) | TyKind::Infer | TyKind::Never => {},
990990
}
991991
}
992992

clippy_utils/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ use rustc_middle::ty::fast_reject::SimplifiedType::{
104104
PtrSimplifiedType, SliceSimplifiedType, StrSimplifiedType, UintSimplifiedType,
105105
};
106106
use rustc_middle::ty::{
107-
layout::IntegerExt, BorrowKind, ClosureKind, DefIdTree, Ty, TyCtxt, TypeAndMut, TypeVisitableExt, UpvarCapture,
107+
layout::IntegerExt, BorrowKind, ClosureKind, Ty, TyCtxt, TypeAndMut, TypeVisitableExt, UpvarCapture,
108108
};
109109
use rustc_middle::ty::{FloatTy, IntTy, UintTy};
110110
use rustc_span::hygiene::{ExpnKind, MacroKind};

clippy_utils/src/qualify_min_const_fn.rs

-4
Original file line numberDiff line numberDiff line change
@@ -299,10 +299,6 @@ fn check_terminator<'tcx>(
299299
| TerminatorKind::Unreachable => Ok(()),
300300

301301
TerminatorKind::Drop { place, .. } => check_place(tcx, *place, span, body),
302-
TerminatorKind::DropAndReplace { place, value, .. } => {
303-
check_place(tcx, *place, span, body)?;
304-
check_operand(tcx, value, span, body)
305-
},
306302

307303
TerminatorKind::SwitchInt { discr, targets: _ } => check_operand(tcx, discr, span, body),
308304

clippy_utils/src/sugg.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ impl<'a> Sugg<'a> {
157157
| hir::ExprKind::Ret(..)
158158
| hir::ExprKind::Struct(..)
159159
| hir::ExprKind::Tup(..)
160-
| hir::ExprKind::Err => Sugg::NonParen(get_snippet(expr.span)),
160+
| hir::ExprKind::Err(_) => Sugg::NonParen(get_snippet(expr.span)),
161161
hir::ExprKind::DropTemps(inner) => Self::hir_from_snippet(inner, get_snippet),
162162
hir::ExprKind::Assign(lhs, rhs, _) => {
163163
Sugg::BinOp(AssocOp::Assign, get_snippet(lhs.span), get_snippet(rhs.span))

0 commit comments

Comments
 (0)