diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs index 7c65f59579018..9a4561f286997 100644 --- a/src/libcore/slice/mod.rs +++ b/src/libcore/slice/mod.rs @@ -3823,7 +3823,7 @@ where // The last index of self.v is already checked and found to match // by the last iteration, so we start searching a new match // one index to the left. - let remainder = if self.v.len() == 0 { &[] } else { &self.v[..(self.v.len() - 1)] }; + let remainder = if self.v.is_empty() { &[] } else { &self.v[..(self.v.len() - 1)] }; let idx = remainder.iter().rposition(|x| (self.pred)(x)).map(|idx| idx + 1).unwrap_or(0); if idx == 0 { self.finished = true; @@ -4033,7 +4033,7 @@ where return None; } - let idx_opt = if self.v.len() == 0 { + let idx_opt = if self.v.is_empty() { None } else { // work around borrowck limitations diff --git a/src/librustc/arena.rs b/src/librustc/arena.rs index ca55d410ceba4..16920947c800b 100644 --- a/src/librustc/arena.rs +++ b/src/librustc/arena.rs @@ -250,7 +250,7 @@ impl<'tcx> Arena<'tcx> { #[inline] pub fn alloc_slice(&self, value: &[T]) -> &mut [T] { - if value.len() == 0 { + if value.is_empty() { return &mut []; } self.dropless.alloc_slice(value) diff --git a/src/librustc/dep_graph/graph.rs b/src/librustc/dep_graph/graph.rs index 531a45b120c24..33902fe913a9c 100644 --- a/src/librustc/dep_graph/graph.rs +++ b/src/librustc/dep_graph/graph.rs @@ -809,7 +809,7 @@ impl DepGraph { dep_node ); - if unlikely!(diagnostics.len() > 0) { + if unlikely!(!diagnostics.is_empty()) { self.emit_diagnostics(tcx, data, dep_node_index, prev_dep_node_index, diagnostics); } diff --git a/src/librustc/ich/hcx.rs b/src/librustc/ich/hcx.rs index 1a9c5d1f13fe1..2cb8388aca63f 100644 --- a/src/librustc/ich/hcx.rs +++ b/src/librustc/ich/hcx.rs @@ -19,7 +19,7 @@ use smallvec::SmallVec; use std::cmp::Ord; fn compute_ignored_attr_names() -> FxHashSet { - debug_assert!(ich::IGNORED_ATTRIBUTES.len() > 0); + debug_assert!(!ich::IGNORED_ATTRIBUTES.is_empty()); ich::IGNORED_ATTRIBUTES.iter().map(|&s| s).collect() } diff --git a/src/librustc/ich/impls_syntax.rs b/src/librustc/ich/impls_syntax.rs index d1815d5e320db..889c8f3aca05e 100644 --- a/src/librustc/ich/impls_syntax.rs +++ b/src/librustc/ich/impls_syntax.rs @@ -14,7 +14,7 @@ impl<'ctx> rustc_target::HashStableContext for StableHashingContext<'ctx> {} impl<'a> HashStable> for [ast::Attribute] { fn hash_stable(&self, hcx: &mut StableHashingContext<'a>, hasher: &mut StableHasher) { - if self.len() == 0 { + if self.is_empty() { self.len().hash_stable(hcx, hasher); return; } diff --git a/src/librustc/mir/interpret/error.rs b/src/librustc/mir/interpret/error.rs index a23ff6bd66d4b..28e197b2a7fc1 100644 --- a/src/librustc/mir/interpret/error.rs +++ b/src/librustc/mir/interpret/error.rs @@ -171,7 +171,7 @@ impl<'tcx> ConstEvalErr<'tcx> { // Skip the last, which is just the environment of the constant. The stacktrace // is sometimes empty because we create "fake" eval contexts in CTFE to do work // on constant values. - if self.stacktrace.len() > 0 { + if !self.stacktrace.is_empty() { for frame_info in &self.stacktrace[..self.stacktrace.len() - 1] { err.span_label(frame_info.call_site, frame_info.to_string()); } diff --git a/src/librustc/mir/mod.rs b/src/librustc/mir/mod.rs index 6a937b87645cd..a415c72d0ba46 100644 --- a/src/librustc/mir/mod.rs +++ b/src/librustc/mir/mod.rs @@ -2219,7 +2219,7 @@ impl<'tcx> Debug for Rvalue<'tcx> { }); let region = if print_region { let mut region = region.to_string(); - if region.len() > 0 { + if !region.is_empty() { region.push(' '); } region diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 823cbf0966de9..befae4195f3b3 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -2473,7 +2473,7 @@ impl<'tcx> TyCtxt<'tcx> { // FIXME consider asking the input slice to be sorted to avoid // re-interning permutations, in which case that would be asserted // here. - if preds.len() == 0 { + if preds.is_empty() { // The macro-generated method below asserts we don't intern an empty slice. List::empty() } else { @@ -2482,31 +2482,31 @@ impl<'tcx> TyCtxt<'tcx> { } pub fn intern_type_list(self, ts: &[Ty<'tcx>]) -> &'tcx List> { - if ts.len() == 0 { List::empty() } else { self._intern_type_list(ts) } + if ts.is_empty() { List::empty() } else { self._intern_type_list(ts) } } pub fn intern_substs(self, ts: &[GenericArg<'tcx>]) -> &'tcx List> { - if ts.len() == 0 { List::empty() } else { self._intern_substs(ts) } + if ts.is_empty() { List::empty() } else { self._intern_substs(ts) } } pub fn intern_projs(self, ps: &[ProjectionKind]) -> &'tcx List { - if ps.len() == 0 { List::empty() } else { self._intern_projs(ps) } + if ps.is_empty() { List::empty() } else { self._intern_projs(ps) } } pub fn intern_place_elems(self, ts: &[PlaceElem<'tcx>]) -> &'tcx List> { - if ts.len() == 0 { List::empty() } else { self._intern_place_elems(ts) } + if ts.is_empty() { List::empty() } else { self._intern_place_elems(ts) } } pub fn intern_canonical_var_infos(self, ts: &[CanonicalVarInfo]) -> CanonicalVarInfos<'tcx> { - if ts.len() == 0 { List::empty() } else { self._intern_canonical_var_infos(ts) } + if ts.is_empty() { List::empty() } else { self._intern_canonical_var_infos(ts) } } pub fn intern_clauses(self, ts: &[Clause<'tcx>]) -> Clauses<'tcx> { - if ts.len() == 0 { List::empty() } else { self._intern_clauses(ts) } + if ts.is_empty() { List::empty() } else { self._intern_clauses(ts) } } pub fn intern_goals(self, ts: &[Goal<'tcx>]) -> Goals<'tcx> { - if ts.len() == 0 { List::empty() } else { self._intern_goals(ts) } + if ts.is_empty() { List::empty() } else { self._intern_goals(ts) } } pub fn mk_fn_sig( diff --git a/src/librustc/ty/instance.rs b/src/librustc/ty/instance.rs index 66888cdb55210..f65822aba4c9e 100644 --- a/src/librustc/ty/instance.rs +++ b/src/librustc/ty/instance.rs @@ -314,7 +314,7 @@ impl<'tcx> Instance<'tcx> { ) -> Option> { debug!("resolve(def_id={:?}, substs={:?})", def_id, substs); let fn_sig = tcx.fn_sig(def_id); - let is_vtable_shim = fn_sig.inputs().skip_binder().len() > 0 + let is_vtable_shim = !fn_sig.inputs().skip_binder().is_empty() && fn_sig.input(0).skip_binder().is_param(0) && tcx.generics_of(def_id).has_self; if is_vtable_shim { diff --git a/src/librustc/ty/layout.rs b/src/librustc/ty/layout.rs index e8bf2eb9a12c9..cb98ff4c9e5cb 100644 --- a/src/librustc/ty/layout.rs +++ b/src/librustc/ty/layout.rs @@ -798,7 +798,7 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> { // (Typechecking will reject discriminant-sizing attrs.) let v = present_first.unwrap(); - let kind = if def.is_enum() || variants[v].len() == 0 { + let kind = if def.is_enum() || variants[v].is_empty() { StructKind::AlwaysSized } else { let param_env = tcx.param_env(def.did); diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs index dae9f945ce098..4c7046781c100 100644 --- a/src/librustc/ty/mod.rs +++ b/src/librustc/ty/mod.rs @@ -698,7 +698,7 @@ impl List { fn from_arena<'tcx>(arena: &'tcx Arena<'tcx>, slice: &[T]) -> &'tcx List { assert!(!mem::needs_drop::()); assert!(mem::size_of::() != 0); - assert!(slice.len() != 0); + assert!(!slice.is_empty()); // Align up the size of the len (usize) field let align = mem::align_of::(); diff --git a/src/librustc_ast_lowering/path.rs b/src/librustc_ast_lowering/path.rs index b45a06e1c1d2a..248874dbe46f5 100644 --- a/src/librustc_ast_lowering/path.rs +++ b/src/librustc_ast_lowering/path.rs @@ -229,7 +229,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { err.span_label(data.span, "only `Fn` traits may use parentheses"); if let Ok(snippet) = self.sess.source_map().span_to_snippet(data.span) { // Do not suggest going from `Trait()` to `Trait<>` - if data.inputs.len() > 0 { + if !data.inputs.is_empty() { if let Some(split) = snippet.find('(') { let trait_name = &snippet[0..split]; let args = &snippet[split + 1..snippet.len() - 1]; diff --git a/src/librustc_ast_pretty/pprust.rs b/src/librustc_ast_pretty/pprust.rs index 3431c1b8e9d42..76e1e7c175b01 100644 --- a/src/librustc_ast_pretty/pprust.rs +++ b/src/librustc_ast_pretty/pprust.rs @@ -791,7 +791,7 @@ impl<'a> PrintState<'a> for State<'a> { s.print_generic_arg(generic_arg) }); - let mut comma = data.args.len() != 0; + let mut comma = !data.args.is_empty(); for constraint in data.constraints.iter() { if comma { diff --git a/src/librustc_builtin_macros/concat.rs b/src/librustc_builtin_macros/concat.rs index ed65611da61e1..1f1c8b8d21e39 100644 --- a/src/librustc_builtin_macros/concat.rs +++ b/src/librustc_builtin_macros/concat.rs @@ -49,7 +49,7 @@ pub fn expand_concat( } } } - if missing_literal.len() > 0 { + if !missing_literal.is_empty() { let mut err = cx.struct_span_err(missing_literal, "expected a literal"); err.note("only literals (like `\"foo\"`, `42` and `3.14`) can be passed to `concat!()`"); err.emit(); diff --git a/src/librustc_builtin_macros/format.rs b/src/librustc_builtin_macros/format.rs index a9298abe2d759..5343ab0fbbe2d 100644 --- a/src/librustc_builtin_macros/format.rs +++ b/src/librustc_builtin_macros/format.rs @@ -1096,7 +1096,7 @@ pub fn expand_preparsed_format_args( cx.str_pieces.push(s); } - if cx.invalid_refs.len() >= 1 { + if !cx.invalid_refs.is_empty() { cx.report_invalid_references(numbered_position_args); } diff --git a/src/librustc_codegen_llvm/back/lto.rs b/src/librustc_codegen_llvm/back/lto.rs index d7297ed41769c..8c3fdcb8ecd66 100644 --- a/src/librustc_codegen_llvm/back/lto.rs +++ b/src/librustc_codegen_llvm/back/lto.rs @@ -237,7 +237,7 @@ fn fat_lto( let module: ModuleCodegen = match costliest_module { Some((_cost, i)) => in_memory.remove(i), None => { - assert!(serialized_modules.len() > 0, "must have at least one serialized module"); + assert!(!serialized_modules.is_empty(), "must have at least one serialized module"); let (buffer, name) = serialized_modules.remove(0); info!("no in-memory regular modules to choose from, parsing {:?}", name); ModuleCodegen { diff --git a/src/librustc_codegen_llvm/llvm_util.rs b/src/librustc_codegen_llvm/llvm_util.rs index 6d3498f8b800b..0081a75a4da11 100644 --- a/src/librustc_codegen_llvm/llvm_util.rs +++ b/src/librustc_codegen_llvm/llvm_util.rs @@ -61,7 +61,7 @@ unsafe fn configure_llvm(sess: &Session) { let sess_args = cg_opts.chain(tg_opts); let user_specified_args: FxHashSet<_> = - sess_args.clone().map(|s| llvm_arg_to_arg_name(s)).filter(|s| s.len() > 0).collect(); + sess_args.clone().map(|s| llvm_arg_to_arg_name(s)).filter(|s| !s.is_empty()).collect(); { // This adds the given argument to LLVM. Unless `force` is true diff --git a/src/librustc_codegen_ssa/back/link.rs b/src/librustc_codegen_ssa/back/link.rs index 78aacc56ea42e..90601521b19f1 100644 --- a/src/librustc_codegen_ssa/back/link.rs +++ b/src/librustc_codegen_ssa/back/link.rs @@ -1524,12 +1524,12 @@ fn add_upstream_rust_crates<'a, B: ArchiveBuilder<'a>>( for &(cnum, _) in deps.iter().rev() { if let Some(missing) = info.missing_lang_items.get(&cnum) { end_with.extend(missing.iter().cloned()); - if end_with.len() > 0 && group_end.is_none() { + if !end_with.is_empty() && group_end.is_none() { group_end = Some(cnum); } } end_with.retain(|item| info.lang_item_to_crate.get(item) != Some(&cnum)); - if end_with.len() == 0 && group_end.is_some() { + if end_with.is_empty() && group_end.is_some() { group_start = Some(cnum); break; } diff --git a/src/librustc_codegen_ssa/back/write.rs b/src/librustc_codegen_ssa/back/write.rs index 92f795acc5438..2cdbb204696c7 100644 --- a/src/librustc_codegen_ssa/back/write.rs +++ b/src/librustc_codegen_ssa/back/write.rs @@ -1244,11 +1244,11 @@ fn start_executing_work( while !codegen_done || running > 0 || (!codegen_aborted - && (work_items.len() > 0 - || needs_fat_lto.len() > 0 - || needs_thin_lto.len() > 0 - || lto_import_only_modules.len() > 0 - || main_thread_worker_state != MainThreadWorkerState::Idle)) + && !(work_items.is_empty() + && needs_fat_lto.is_empty() + && needs_thin_lto.is_empty() + && lto_import_only_modules.is_empty() + && main_thread_worker_state == MainThreadWorkerState::Idle)) { // While there are still CGUs to be codegened, the coordinator has // to decide how to utilize the compiler processes implicit Token: @@ -1289,7 +1289,7 @@ fn start_executing_work( // Perform the serial work here of figuring out what we're // going to LTO and then push a bunch of work items onto our // queue to do LTO - if work_items.len() == 0 + if work_items.is_empty() && running == 0 && main_thread_worker_state == MainThreadWorkerState::Idle { @@ -1354,7 +1354,7 @@ fn start_executing_work( // Spin up what work we can, only doing this while we've got available // parallelism slots and work left to spawn. - while !codegen_aborted && work_items.len() > 0 && running < tokens.len() { + while !codegen_aborted && !work_items.is_empty() && running < tokens.len() { let (item, _) = work_items.pop().unwrap(); maybe_start_llvm_timer(prof, cgcx.config(item.module_kind()), &mut llvm_start_time); diff --git a/src/librustc_data_structures/profiling.rs b/src/librustc_data_structures/profiling.rs index f2c80510f2269..a70314c35c07c 100644 --- a/src/librustc_data_structures/profiling.rs +++ b/src/librustc_data_structures/profiling.rs @@ -425,7 +425,7 @@ impl SelfProfiler { } // Warn about any unknown event names - if unknown_events.len() > 0 { + if !unknown_events.is_empty() { unknown_events.sort(); unknown_events.dedup(); diff --git a/src/librustc_errors/emitter.rs b/src/librustc_errors/emitter.rs index f3653da4be666..2d7ff191c77a5 100644 --- a/src/librustc_errors/emitter.rs +++ b/src/librustc_errors/emitter.rs @@ -231,7 +231,7 @@ pub trait Emitter { ].contains(&sugg.style) { let substitution = &sugg.substitutions[0].parts[0].snippet.trim(); - let msg = if substitution.len() == 0 || sugg.style.hide_inline() { + let msg = if substitution.is_empty() || sugg.style.hide_inline() { // This substitution is only removal OR we explicitly don't want to show the // code inline (`hide_inline`). Therefore, we don't show the substitution. format!("help: {}", sugg.msg) diff --git a/src/librustc_errors/snippet.rs b/src/librustc_errors/snippet.rs index a39e19f0bf75b..0660590a72570 100644 --- a/src/librustc_errors/snippet.rs +++ b/src/librustc_errors/snippet.rs @@ -152,7 +152,7 @@ impl Annotation { // | // // Note that this would be the complete output users would see. - label.len() > 0 + !label.is_empty() } else { false } diff --git a/src/librustc_infer/infer/canonical/query_response.rs b/src/librustc_infer/infer/canonical/query_response.rs index f4196e576054a..f77faf3d4ab59 100644 --- a/src/librustc_infer/infer/canonical/query_response.rs +++ b/src/librustc_infer/infer/canonical/query_response.rs @@ -421,7 +421,7 @@ impl<'cx, 'tcx> InferCtxt<'cx, 'tcx> { for _ in num_universes_in_query..num_universes_in_response { universe_map.push(self.create_next_universe()); } - assert!(universe_map.len() >= 1); // always have the root universe + assert!(!universe_map.is_empty()); // always have the root universe assert_eq!(universe_map[ty::UniverseIndex::ROOT.as_usize()], ty::UniverseIndex::ROOT); // Every canonical query result includes values for each of diff --git a/src/librustc_infer/infer/region_constraints/mod.rs b/src/librustc_infer/infer/region_constraints/mod.rs index af4e199f28804..3f9fa6459b37f 100644 --- a/src/librustc_infer/infer/region_constraints/mod.rs +++ b/src/librustc_infer/infer/region_constraints/mod.rs @@ -587,7 +587,7 @@ impl<'tcx> RegionConstraintCollector<'tcx> { // skip no-op cases known to be satisfied if let VerifyBound::AllBounds(ref bs) = verify.bound { - if bs.len() == 0 { + if bs.is_empty() { return; } } diff --git a/src/librustc_infer/traits/error_reporting/mod.rs b/src/librustc_infer/traits/error_reporting/mod.rs index 9bfa219695096..80b5e8ca69d36 100644 --- a/src/librustc_infer/traits/error_reporting/mod.rs +++ b/src/librustc_infer/traits/error_reporting/mod.rs @@ -440,7 +440,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { /// going to help). pub fn report_overflow_error_cycle(&self, cycle: &[PredicateObligation<'tcx>]) -> ! { let cycle = self.resolve_vars_if_possible(&cycle.to_owned()); - assert!(cycle.len() > 0); + assert!(!cycle.is_empty()); debug!("report_overflow_error_cycle: cycle={:?}", cycle); diff --git a/src/librustc_infer/traits/select.rs b/src/librustc_infer/traits/select.rs index c6878fad2a405..925665763cbe5 100644 --- a/src/librustc_infer/traits/select.rs +++ b/src/librustc_infer/traits/select.rs @@ -2157,7 +2157,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { debug!("builtin_bound: nested={:?}", nested); candidates .vec - .push(BuiltinCandidate { has_nested: nested.skip_binder().len() > 0 }); + .push(BuiltinCandidate { has_nested: !nested.skip_binder().is_empty() }); } BuiltinImplConditions::None => {} BuiltinImplConditions::Ambiguous => { diff --git a/src/librustc_lint/levels.rs b/src/librustc_lint/levels.rs index da449ed42fd00..8e1947e52ca32 100644 --- a/src/librustc_lint/levels.rs +++ b/src/librustc_lint/levels.rs @@ -375,7 +375,7 @@ impl<'s> LintLevelsBuilder<'s> { } let prev = self.cur; - if specs.len() > 0 { + if !specs.is_empty() { self.cur = self.sets.list.len() as u32; self.sets.list.push(LintSet::Node { specs: specs, parent: prev }); } diff --git a/src/librustc_metadata/dependency_format.rs b/src/librustc_metadata/dependency_format.rs index 375f372005f7c..9e71839dbfde6 100644 --- a/src/librustc_metadata/dependency_format.rs +++ b/src/librustc_metadata/dependency_format.rs @@ -339,7 +339,7 @@ fn activate_injected_dep( // there's only going to be one allocator in the output. fn verify_ok(tcx: TyCtxt<'_>, list: &[Linkage]) { let sess = &tcx.sess; - if list.len() == 0 { + if list.is_empty() { return; } let mut panic_runtime = None; diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs index cce4b90e224e6..7a3f09ac80b3d 100644 --- a/src/librustc_mir/interpret/eval_context.rs +++ b/src/librustc_mir/interpret/eval_context.rs @@ -264,7 +264,7 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { #[inline(always)] pub fn cur_frame(&self) -> usize { - assert!(self.stack.len() > 0); + assert!(!self.stack.is_empty()); self.stack.len() - 1 } @@ -505,7 +505,7 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { return_place: Option>, return_to_block: StackPopCleanup, ) -> InterpResult<'tcx> { - if self.stack.len() > 0 { + if !self.stack.is_empty() { info!("PAUSING({}) {}", self.cur_frame(), self.frame().instance); } ::log_settings::settings().indentation += 1; @@ -698,7 +698,7 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { } } - if self.stack.len() > 0 { + if !self.stack.is_empty() { info!( "CONTINUING({}) {} (unwinding = {})", self.cur_frame(), diff --git a/src/librustc_mir/transform/uninhabited_enum_branching.rs b/src/librustc_mir/transform/uninhabited_enum_branching.rs index 0bf0ff2852d72..8f2f2094b1e38 100644 --- a/src/librustc_mir/transform/uninhabited_enum_branching.rs +++ b/src/librustc_mir/transform/uninhabited_enum_branching.rs @@ -28,7 +28,7 @@ fn get_switched_on_type<'tcx>( // Only bother checking blocks which terminate by switching on a local. if let Some(local) = get_discriminant_local(&terminator.kind) { - let stmt_before_term = (block_data.statements.len() > 0) + let stmt_before_term = (!block_data.statements.is_empty()) .then(|| &block_data.statements[block_data.statements.len() - 1].kind); if let Some(StatementKind::Assign(box (l, Rvalue::Discriminant(place)))) = stmt_before_term diff --git a/src/librustc_mir/util/elaborate_drops.rs b/src/librustc_mir/util/elaborate_drops.rs index fab64e37cbc5a..83483aeb6a4b4 100644 --- a/src/librustc_mir/util/elaborate_drops.rs +++ b/src/librustc_mir/util/elaborate_drops.rs @@ -369,7 +369,7 @@ where fn open_drop_for_adt(&mut self, adt: &'tcx ty::AdtDef, substs: SubstsRef<'tcx>) -> BasicBlock { debug!("open_drop_for_adt({:?}, {:?}, {:?})", self, adt, substs); - if adt.variants.len() == 0 { + if adt.variants.is_empty() { return self.elaborator.patch().new_block(BasicBlockData { statements: vec![], terminator: Some(Terminator { diff --git a/src/librustc_mir/util/patch.rs b/src/librustc_mir/util/patch.rs index 68aa82f902f01..473692a43f3e9 100644 --- a/src/librustc_mir/util/patch.rs +++ b/src/librustc_mir/util/patch.rs @@ -37,7 +37,7 @@ impl<'tcx> MirPatch<'tcx> { let mut resume_stmt_block = None; for (bb, block) in body.basic_blocks().iter_enumerated() { if let TerminatorKind::Resume = block.terminator().kind { - if block.statements.len() > 0 { + if !block.statements.is_empty() { assert!(resume_stmt_block.is_none()); resume_stmt_block = Some(bb); } else { diff --git a/src/librustc_mir_build/build/matches/mod.rs b/src/librustc_mir_build/build/matches/mod.rs index d9091f92b035d..bb61e56a2c51d 100644 --- a/src/librustc_mir_build/build/matches/mod.rs +++ b/src/librustc_mir_build/build/matches/mod.rs @@ -1438,7 +1438,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { let target_blocks: Vec<_> = target_candidates .into_iter() .map(|mut candidates| { - if candidates.len() != 0 { + if !candidates.is_empty() { let candidate_start = this.cfg.start_new_block(); this.match_candidates( span, diff --git a/src/librustc_mir_build/build/matches/test.rs b/src/librustc_mir_build/build/matches/test.rs index 1acfa7dddbe1f..9f450f8fc7b77 100644 --- a/src/librustc_mir_build/build/matches/test.rs +++ b/src/librustc_mir_build/build/matches/test.rs @@ -222,7 +222,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> { TestKind::SwitchInt { switch_ty, ref options, indices: _ } => { let target_blocks = make_target_blocks(self); let terminator = if switch_ty.kind == ty::Bool { - assert!(options.len() > 0 && options.len() <= 2); + assert!(!options.is_empty() && options.len() <= 2); if let [first_bb, second_bb] = *target_blocks { let (true_bb, false_bb) = match options[0] { 1 => (first_bb, second_bb), diff --git a/src/librustc_parse/lexer/tokentrees.rs b/src/librustc_parse/lexer/tokentrees.rs index a412dabf14427..e87dde8863cc8 100644 --- a/src/librustc_parse/lexer/tokentrees.rs +++ b/src/librustc_parse/lexer/tokentrees.rs @@ -141,7 +141,7 @@ impl<'a> TokenTreesReader<'a> { self.last_delim_empty_block_spans.insert(delim, empty_block_span); } - if self.open_braces.len() == 0 { + if self.open_braces.is_empty() { // Clear up these spans to avoid suggesting them as we've found // properly matched delimiters so far for an entire block. self.matching_delim_spans.clear(); diff --git a/src/librustc_parse/lib.rs b/src/librustc_parse/lib.rs index 4cf9e4c305972..c60330864defd 100644 --- a/src/librustc_parse/lib.rs +++ b/src/librustc_parse/lib.rs @@ -371,7 +371,7 @@ fn prepend_attrs( span: rustc_span::Span, ) -> Option { let tokens = tokens?; - if attrs.len() == 0 { + if attrs.is_empty() { return Some(tokens.clone()); } let mut builder = tokenstream::TokenStreamBuilder::new(); diff --git a/src/librustc_parse/parser/path.rs b/src/librustc_parse/parser/path.rs index 18e57c6a5d49f..550cf48601f4b 100644 --- a/src/librustc_parse/parser/path.rs +++ b/src/librustc_parse/parser/path.rs @@ -470,7 +470,7 @@ impl<'a> Parser<'a> { // FIXME: we would like to report this in ast_validation instead, but we currently do not // preserve ordering of generic parameters with respect to associated type binding, so we // lose that information after parsing. - if misplaced_assoc_ty_constraints.len() > 0 { + if !misplaced_assoc_ty_constraints.is_empty() { let mut err = self.struct_span_err( args_lo.to(self.prev_span), "associated type bindings must be declared after generic parameters", diff --git a/src/librustc_resolve/check_unused.rs b/src/librustc_resolve/check_unused.rs index e8e3b68579488..74154cb3df415 100644 --- a/src/librustc_resolve/check_unused.rs +++ b/src/librustc_resolve/check_unused.rs @@ -158,7 +158,7 @@ fn calc_unused_spans( } } ast::UseTreeKind::Nested(ref nested) => { - if nested.len() == 0 { + if nested.is_empty() { return UnusedSpanResult::FlatUnused(use_tree.span, full_span); } diff --git a/src/librustc_resolve/imports.rs b/src/librustc_resolve/imports.rs index 55ce51e0ff057..3926849e7cad1 100644 --- a/src/librustc_resolve/imports.rs +++ b/src/librustc_resolve/imports.rs @@ -1478,7 +1478,7 @@ impl<'a, 'b> ImportResolver<'a, 'b> { } }); - if reexports.len() > 0 { + if !reexports.is_empty() { if let Some(def_id) = module.def_id() { self.r.export_map.insert(def_id, reexports); } diff --git a/src/librustc_resolve/late.rs b/src/librustc_resolve/late.rs index c924fef4dc9d2..6b0fc5bda4189 100644 --- a/src/librustc_resolve/late.rs +++ b/src/librustc_resolve/late.rs @@ -1016,7 +1016,7 @@ impl<'a, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> { trait_items .iter() .filter_map(|item| match &item.kind { - AssocItemKind::TyAlias(_, _, bounds, _) if bounds.len() == 0 => { + AssocItemKind::TyAlias(_, _, bounds, _) if bounds.is_empty() => { Some(item.ident) } _ => None, diff --git a/src/librustc_resolve/late/diagnostics.rs b/src/librustc_resolve/late/diagnostics.rs index 957574cced79b..f1f42f491aaa1 100644 --- a/src/librustc_resolve/late/diagnostics.rs +++ b/src/librustc_resolve/late/diagnostics.rs @@ -354,7 +354,7 @@ impl<'a> LateResolutionVisitor<'a, '_, '_> { let mut has_self_arg = None; if let PathSource::Expr(parent) = source { match &parent?.kind { - ExprKind::Call(_, args) if args.len() > 0 => { + ExprKind::Call(_, args) if !args.is_empty() => { let mut expr_kind = &args[0].kind; loop { match expr_kind { @@ -968,18 +968,14 @@ impl<'tcx> LifetimeContext<'_, 'tcx> { for missing in &self.missing_named_lifetime_spots { match missing { MissingLifetimeSpot::Generics(generics) => { - let (span, sugg) = if let Some(param) = generics - .params - .iter() - .filter(|p| match p.kind { + let (span, sugg) = if let Some(param) = + generics.params.iter().find(|p| match p.kind { hir::GenericParamKind::Type { synthetic: Some(hir::SyntheticTyParamKind::ImplTrait), .. } => false, _ => true, - }) - .next() - { + }) { (param.span.shrink_to_lo(), format!("{}, ", lifetime_ref)) } else { (generics.span, format!("<{}>", lifetime_ref)) diff --git a/src/librustc_session/config.rs b/src/librustc_session/config.rs index a6f9a5fe3e0fa..8c7ea63d40538 100644 --- a/src/librustc_session/config.rs +++ b/src/librustc_session/config.rs @@ -1129,7 +1129,7 @@ pub fn parse_error_format( // Conservatively require that the `--json` argument is coupled with // `--error-format=json`. This means that `--json` is specified we // should actually be emitting JSON blobs. - _ if matches.opt_strs("json").len() > 0 => { + _ if !matches.opt_strs("json").is_empty() => { early_error( ErrorOutputType::default(), "using `--json` requires also using `--error-format=json`", diff --git a/src/librustc_span/lib.rs b/src/librustc_span/lib.rs index f9f3a9003117f..a361267b59e36 100644 --- a/src/librustc_span/lib.rs +++ b/src/librustc_span/lib.rs @@ -1205,7 +1205,7 @@ impl SourceFile { /// number. If the source_file is empty or the position is located before the /// first line, `None` is returned. pub fn lookup_line(&self, pos: BytePos) -> Option { - if self.lines.len() == 0 { + if self.lines.is_empty() { return None; } diff --git a/src/librustc_traits/dropck_outlives.rs b/src/librustc_traits/dropck_outlives.rs index e14295de061e5..2f854c045e50e 100644 --- a/src/librustc_traits/dropck_outlives.rs +++ b/src/librustc_traits/dropck_outlives.rs @@ -92,7 +92,7 @@ fn dropck_outlives<'tcx>( // information and will just decrease the speed at which we can emit these errors // (since we'll be printing for just that much longer for the often enormous types // that result here). - if result.overflows.len() >= 1 { + if !result.overflows.is_empty() { break; } diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index 710f02cdedba3..5819a9f2df747 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -1743,7 +1743,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { potential_assoc_types: Vec, trait_bounds: &[hir::PolyTraitRef<'_>], ) { - if !associated_types.values().any(|v| v.len() > 0) { + if !associated_types.values().any(|v| !v.is_empty()) { return; } let tcx = self.tcx(); diff --git a/src/librustc_typeck/check/op.rs b/src/librustc_typeck/check/op.rs index cb6e028ab86ca..1c72b49fbbe46 100644 --- a/src/librustc_typeck/check/op.rs +++ b/src/librustc_typeck/check/op.rs @@ -529,7 +529,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { .lookup_op_method(fn_sig.output(), &[other_ty], Op::Binary(op, is_assign)) .is_ok() { - let (variable_snippet, applicability) = if fn_sig.inputs().len() > 0 { + let (variable_snippet, applicability) = if !fn_sig.inputs().is_empty() { ( format!("{}( /* arguments */ )", source_map.span_to_snippet(span).unwrap()), Applicability::HasPlaceholders, diff --git a/src/librustc_typeck/check/pat.rs b/src/librustc_typeck/check/pat.rs index 2c7cbed6a2d36..c8eef9dfd046e 100644 --- a/src/librustc_typeck/check/pat.rs +++ b/src/librustc_typeck/check/pat.rs @@ -339,7 +339,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { }); } - if pat_adjustments.len() > 0 { + if !pat_adjustments.is_empty() { debug!("default binding mode is now {:?}", def_bm); self.inh.tables.borrow_mut().pat_adjustments_mut().insert(pat.hir_id, pat_adjustments); } @@ -987,7 +987,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { .filter(|ident| !used_fields.contains_key(&ident)) .collect::>(); - if inexistent_fields.len() > 0 && !variant.recovered { + if !inexistent_fields.is_empty() && !variant.recovered { self.error_inexistent_fields( kind_name, &inexistent_fields, @@ -1018,7 +1018,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { if etc { tcx.sess.struct_span_err(span, "`..` cannot be used in union patterns").emit(); } - } else if !etc && unmentioned_fields.len() > 0 { + } else if !etc && !unmentioned_fields.is_empty() { self.error_unmentioned_fields(span, &unmentioned_fields, variant); } no_field_errors diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs index 1fade1b5ca65e..5e0f80b3357d4 100644 --- a/src/librustc_typeck/collect.rs +++ b/src/librustc_typeck/collect.rs @@ -2481,7 +2481,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs { // purpose functions as they wouldn't have the right target features // enabled. For that reason we also forbid #[inline(always)] as it can't be // respected. - if codegen_fn_attrs.target_features.len() > 0 { + if !codegen_fn_attrs.target_features.is_empty() { if codegen_fn_attrs.inline == InlineAttr::Always { if let Some(span) = inline_span { tcx.sess.span_err( diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 50c780e9ecb52..8be6bf8f0d38a 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -398,7 +398,7 @@ impl Clean for hir::GenericParam<'_> { fn clean(&self, _: &DocContext<'_>) -> Lifetime { match self.kind { hir::GenericParamKind::Lifetime { .. } => { - if self.bounds.len() > 0 { + if !self.bounds.is_empty() { let mut bounds = self.bounds.iter().map(|bound| match bound { hir::GenericBound::Outlives(lt) => lt, _ => panic!(), @@ -607,7 +607,7 @@ impl Clean for hir::GenericParam<'_> { fn clean(&self, cx: &DocContext<'_>) -> GenericParamDef { let (name, kind) = match self.kind { hir::GenericParamKind::Lifetime { .. } => { - let name = if self.bounds.len() > 0 { + let name = if !self.bounds.is_empty() { let mut bounds = self.bounds.iter().map(|bound| match bound { hir::GenericBound::Outlives(lt) => lt, _ => panic!(), diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 4f58116e4fea8..ee685c90a629b 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -201,7 +201,7 @@ impl Item { classes.push("deprecated"); } - if classes.len() != 0 { Some(classes.join(" ")) } else { None } + if !classes.is_empty() { Some(classes.join(" ")) } else { None } }) } diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index bda220d880635..e1ac962f200b6 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -2783,7 +2783,7 @@ fn assoc_type( fn render_stability_since_raw(w: &mut Buffer, ver: Option<&str>, containing_ver: Option<&str>) { if let Some(v) = ver { - if containing_ver != ver && v.len() > 0 { + if containing_ver != ver && !v.is_empty() { write!(w, "{0}", v) } } @@ -3143,7 +3143,7 @@ fn render_attribute(attr: &ast::MetaItem) -> Option { .filter_map(|attr| attr.meta_item().and_then(|mi| render_attribute(mi))) .collect(); - if display.len() > 0 { Some(format!("{}({})", path, display.join(", "))) } else { None } + if !display.is_empty() { Some(format!("{}({})", path, display.join(", "))) } else { None } } else { None } @@ -3178,7 +3178,7 @@ fn render_attributes(w: &mut Buffer, it: &clean::Item, top: bool) { attrs.push_str(&format!("#[{}]\n", s)); } } - if attrs.len() > 0 { + if !attrs.is_empty() { write!( w, "{}", diff --git a/src/librustdoc/theme.rs b/src/librustdoc/theme.rs index 620f9f56a6ae8..a8a571e7c5491 100644 --- a/src/librustdoc/theme.rs +++ b/src/librustdoc/theme.rs @@ -191,7 +191,7 @@ fn build_rule(v: &[u8], positions: &[usize]) -> String { .replace("{", "") .replace("}", "") .split(' ') - .filter(|s| s.len() > 0) + .filter(|s| !s.is_empty()) .collect::>() .join(" "), ) diff --git a/src/libstd/backtrace.rs b/src/libstd/backtrace.rs index a1c9aa75d779a..97db0ff3791d7 100644 --- a/src/libstd/backtrace.rs +++ b/src/libstd/backtrace.rs @@ -304,7 +304,7 @@ impl Backtrace { // If no frames came out assume that this is an unsupported platform // since `backtrace` doesn't provide a way of learning this right now, // and this should be a good enough approximation. - let inner = if frames.len() == 0 { + let inner = if frames.is_empty() { Inner::Unsupported } else { Inner::Captured(Mutex::new(Capture { diff --git a/src/libtest/formatters/json.rs b/src/libtest/formatters/json.rs index 863cad9f9d724..9ebc991d638cb 100644 --- a/src/libtest/formatters/json.rs +++ b/src/libtest/formatters/json.rs @@ -80,7 +80,7 @@ impl OutputFormatter for JsonFormatter { state: &ConsoleTestState, ) -> io::Result<()> { let display_stdout = state.options.display_output || *result != TestResult::TrOk; - let stdout = if display_stdout && stdout.len() > 0 { + let stdout = if display_stdout && !stdout.is_empty() { Some(String::from_utf8_lossy(stdout)) } else { None