diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index a5ed096a73581..851d18d92257a 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -430,7 +430,7 @@ impl Config { } }).unwrap_or_else(|| TomlConfig::default()); - let build = toml.build.clone().unwrap_or(Build::default()); + let build = toml.build.clone().unwrap_or_default(); // set by bootstrap.py config.hosts.push(config.build.clone()); for host in build.host.iter() { @@ -524,7 +524,7 @@ impl Config { set(&mut config.llvm_link_shared, llvm.link_shared); config.llvm_targets = llvm.targets.clone(); config.llvm_experimental_targets = llvm.experimental_targets.clone() - .unwrap_or("WebAssembly;RISCV".to_string()); + .unwrap_or_else(|| "WebAssembly;RISCV".to_string()); config.llvm_link_jobs = llvm.link_jobs; config.llvm_version_suffix = llvm.version_suffix.clone(); config.llvm_clang_cl = llvm.clang_cl.clone(); diff --git a/src/build_helper/lib.rs b/src/build_helper/lib.rs index 5d174719ab23e..0cbb08023615f 100644 --- a/src/build_helper/lib.rs +++ b/src/build_helper/lib.rs @@ -233,7 +233,8 @@ pub fn native_lib_boilerplate( let src_dir = current_dir.join("..").join(src_name); rerun_if_changed_anything_in_dir(&src_dir); - let out_dir = env::var_os("RUSTBUILD_NATIVE_DIR").unwrap_or(env::var_os("OUT_DIR").unwrap()); + let out_dir = env::var_os("RUSTBUILD_NATIVE_DIR").unwrap_or_else(|| + env::var_os("OUT_DIR").unwrap()); let out_dir = PathBuf::from(out_dir).join(out_name); t!(fs::create_dir_all(&out_dir)); if link_name.contains('=') { diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index e99d65024967b..ad82d597849cc 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -1589,7 +1589,7 @@ impl<'a> LoweringContext<'a> { let resolution = self.resolver .get_resolution(id) - .unwrap_or(PathResolution::new(Def::Err)); + .unwrap_or_else(|| PathResolution::new(Def::Err)); let proj_start = p.segments.len() - resolution.unresolved_segments(); let path = P(hir::Path { diff --git a/src/librustc/lint/levels.rs b/src/librustc/lint/levels.rs index 950754a07ab09..19eb127e6ccfc 100644 --- a/src/librustc/lint/levels.rs +++ b/src/librustc/lint/levels.rs @@ -97,7 +97,7 @@ impl LintLevelSets { // If `level` is none then we actually assume the default level for this // lint. - let mut level = level.unwrap_or(lint.default_level(sess)); + let mut level = level.unwrap_or_else(|| lint.default_level(sess)); // If we're about to issue a warning, check at the last minute for any // directives against the warnings "lint". If, for example, there's an diff --git a/src/librustc/lint/mod.rs b/src/librustc/lint/mod.rs index 3327b117d6056..5ac0c0d32dcdc 100644 --- a/src/librustc/lint/mod.rs +++ b/src/librustc/lint/mod.rs @@ -519,7 +519,7 @@ impl LintBuffer { } pub fn take(&mut self, id: ast::NodeId) -> Vec { - self.map.remove(&id).unwrap_or(Vec::new()) + self.map.remove(&id).unwrap_or_default() } pub fn get_any(&self) -> Option<&[BufferedEarlyLint]> { diff --git a/src/librustc/traits/auto_trait.rs b/src/librustc/traits/auto_trait.rs index 1e5ce15914d6a..666e06a646465 100644 --- a/src/librustc/traits/auto_trait.rs +++ b/src/librustc/traits/auto_trait.rs @@ -498,8 +498,8 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> { panic!("Missing lifetime with name {:?} for {:?}", name, region) ) ) - .unwrap_or(&"'static".to_owned()) - .clone() + .cloned() + .unwrap_or_else(|| "'static".to_owned()) } // This is very similar to handle_lifetimes. However, instead of matching ty::Region's diff --git a/src/librustc/traits/error_reporting.rs b/src/librustc/traits/error_reporting.rs index db775beae4f97..4ec9bfcce9e9a 100644 --- a/src/librustc/traits/error_reporting.rs +++ b/src/librustc/traits/error_reporting.rs @@ -352,7 +352,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> { obligation: &PredicateObligation<'tcx>, ) -> OnUnimplementedNote { let def_id = self.impl_similar_to(trait_ref, obligation) - .unwrap_or(trait_ref.def_id()); + .unwrap_or_else(|| trait_ref.def_id()); let trait_ref = *trait_ref.skip_binder(); let mut flags = vec![]; @@ -639,7 +639,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> { let (post_message, pre_message) = self.get_parent_trait_ref(&obligation.cause.code) .map(|t| (format!(" in `{}`", t), format!("within `{}`, ", t))) - .unwrap_or((String::new(), String::new())); + .unwrap_or_default(); let OnUnimplementedNote { message, label, note } = self.on_unimplemented_note(trait_ref, obligation); diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 1bccd05af8323..29474032ddce6 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -565,7 +565,7 @@ impl<'tcx> TypeckTables<'tcx> { pub fn node_substs(&self, id: hir::HirId) -> &'tcx Substs<'tcx> { validate_hir_id_for_typeck_tables(self.local_id_root, id, false); - self.node_substs.get(&id.local_id).cloned().unwrap_or(Substs::empty()) + self.node_substs.get(&id.local_id).cloned().unwrap_or_else(|| Substs::empty()) } pub fn node_substs_opt(&self, id: hir::HirId) -> Option<&'tcx Substs<'tcx>> { diff --git a/src/librustc/ty/query/on_disk_cache.rs b/src/librustc/ty/query/on_disk_cache.rs index ce580c7803355..368ec9bbaf532 100644 --- a/src/librustc/ty/query/on_disk_cache.rs +++ b/src/librustc/ty/query/on_disk_cache.rs @@ -342,7 +342,7 @@ impl<'sess> OnDiskCache<'sess> { &self.prev_diagnostics_index, "diagnostics"); - diagnostics.unwrap_or(Vec::new()) + diagnostics.unwrap_or_default() } /// Store a diagnostic emitted during the current compilation session. diff --git a/src/librustc_codegen_llvm/attributes.rs b/src/librustc_codegen_llvm/attributes.rs index 90ba103ca4ceb..57c4b46108d5f 100644 --- a/src/librustc_codegen_llvm/attributes.rs +++ b/src/librustc_codegen_llvm/attributes.rs @@ -154,7 +154,7 @@ pub fn from_fn_attrs( id: Option, ) { let codegen_fn_attrs = id.map(|id| cx.tcx.codegen_fn_attrs(id)) - .unwrap_or(CodegenFnAttrs::new()); + .unwrap_or_else(|| CodegenFnAttrs::new()); inline(cx, llfn, codegen_fn_attrs.inline); diff --git a/src/librustc_codegen_llvm/back/rpath.rs b/src/librustc_codegen_llvm/back/rpath.rs index aa4f7688b0f42..9609cb0c1553b 100644 --- a/src/librustc_codegen_llvm/back/rpath.rs +++ b/src/librustc_codegen_llvm/back/rpath.rs @@ -109,7 +109,7 @@ fn get_rpath_relative_to_output(config: &mut RPathConfig, lib: &Path) -> String }; let cwd = env::current_dir().unwrap(); - let mut lib = fs::canonicalize(&cwd.join(lib)).unwrap_or(cwd.join(lib)); + let mut lib = fs::canonicalize(&cwd.join(lib)).unwrap_or_else(|_| cwd.join(lib)); lib.pop(); let mut output = cwd.join(&config.out_filename); output.pop(); diff --git a/src/librustc_codegen_llvm/llvm/archive_ro.rs b/src/librustc_codegen_llvm/llvm/archive_ro.rs index e0a9f31e508ba..2a77f256e3a0c 100644 --- a/src/librustc_codegen_llvm/llvm/archive_ro.rs +++ b/src/librustc_codegen_llvm/llvm/archive_ro.rs @@ -40,7 +40,7 @@ impl ArchiveRO { return unsafe { let s = path2cstr(dst); let ar = super::LLVMRustOpenArchive(s.as_ptr()).ok_or_else(|| { - super::last_error().unwrap_or("failed to open archive".to_owned()) + super::last_error().unwrap_or_else(|| "failed to open archive".to_owned()) })?; Ok(ArchiveRO { raw: ar }) }; diff --git a/src/librustc_codegen_llvm/llvm/diagnostic.rs b/src/librustc_codegen_llvm/llvm/diagnostic.rs index c41a5f74ae302..b080c51c83a5b 100644 --- a/src/librustc_codegen_llvm/llvm/diagnostic.rs +++ b/src/librustc_codegen_llvm/llvm/diagnostic.rs @@ -77,7 +77,7 @@ impl OptimizationDiagnostic<'ll> { ).ok() ).ok(); - let mut filename = filename.unwrap_or(String::new()); + let mut filename = filename.unwrap_or_default(); if filename.is_empty() { filename.push_str(""); } diff --git a/src/librustc_codegen_utils/link.rs b/src/librustc_codegen_utils/link.rs index 3d47f91a6239a..2a1fbe6ace541 100644 --- a/src/librustc_codegen_utils/link.rs +++ b/src/librustc_codegen_utils/link.rs @@ -103,7 +103,7 @@ pub fn filename_for_metadata(sess: &Session, let libname = format!("{}{}", crate_name, sess.opts.cg.extra_filename); let out_filename = outputs.single_output_file.clone() - .unwrap_or(outputs.out_directory.join(&format!("lib{}.rmeta", libname))); + .unwrap_or_else(|| outputs.out_directory.join(&format!("lib{}.rmeta", libname))); check_file_is_writeable(&out_filename, sess); diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index 4f48b00c93707..8020d596afd0f 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -882,7 +882,7 @@ where ) }); - let mut registry = registry.unwrap_or(Registry::new(sess, krate.span)); + let mut registry = registry.unwrap_or_else(|| Registry::new(sess, krate.span)); time(sess, "plugin registration", || { if sess.features_untracked().rustc_diagnostic_macros { diff --git a/src/librustc_errors/diagnostic_builder.rs b/src/librustc_errors/diagnostic_builder.rs index 60a68b1e49662..f4289ea2d4b26 100644 --- a/src/librustc_errors/diagnostic_builder.rs +++ b/src/librustc_errors/diagnostic_builder.rs @@ -128,7 +128,7 @@ impl<'a> DiagnosticBuilder<'a> { message: &str, span: Option, ) -> &mut Self { - let span = span.map(|s| s.into()).unwrap_or(MultiSpan::new()); + let span = span.map(|s| s.into()).unwrap_or_else(|| MultiSpan::new()); self.diagnostic.sub(level, message, span, None); self } diff --git a/src/librustc_metadata/locator.rs b/src/librustc_metadata/locator.rs index adff34af61ed8..bc1952ea34fc0 100644 --- a/src/librustc_metadata/locator.rs +++ b/src/librustc_metadata/locator.rs @@ -678,7 +678,7 @@ impl<'a> Context<'a> { if let Some((ref prev, _)) = ret { let sysroot = self.sess.sysroot(); let sysroot = sysroot.canonicalize() - .unwrap_or(sysroot.to_path_buf()); + .unwrap_or_else(|_| sysroot.to_path_buf()); if prev.starts_with(&sysroot) { continue } diff --git a/src/librustc_mir/borrow_check/error_reporting.rs b/src/librustc_mir/borrow_check/error_reporting.rs index baf9e032270a6..5d24d5a58f0b9 100644 --- a/src/librustc_mir/borrow_check/error_reporting.rs +++ b/src/librustc_mir/borrow_check/error_reporting.rs @@ -96,7 +96,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { span, desired_action.as_noun(), &self.describe_place_with_options(moved_place, IncludingDowncast(true)) - .unwrap_or("_".to_owned()), + .unwrap_or_else(|| "_".to_owned()), Origin::Mir, ); err.span_label(span, format!("use of possibly uninitialized {}", item_msg)); @@ -260,7 +260,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { let mut err = tcx.cannot_move_when_borrowed( span, - &self.describe_place(place).unwrap_or("_".to_owned()), + &self.describe_place(place).unwrap_or_else(|| "_".to_owned()), Origin::Mir, ); err.span_label(borrow_span, format!("borrow of {} occurs here", borrow_msg)); @@ -299,16 +299,16 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { let mut err = tcx.cannot_use_when_mutably_borrowed( span, - &self.describe_place(place).unwrap_or("_".to_owned()), + &self.describe_place(place).unwrap_or_else(|| "_".to_owned()), borrow_span, &self.describe_place(&borrow.borrowed_place) - .unwrap_or("_".to_owned()), + .unwrap_or_else(|| "_".to_owned()), Origin::Mir, ); borrow_spans.var_span_label(&mut err, { let place = &borrow.borrowed_place; - let desc_place = self.describe_place(place).unwrap_or("_".to_owned()); + let desc_place = self.describe_place(place).unwrap_or_else(|| "_".to_owned()); format!("borrow occurs due to use of `{}`{}", desc_place, borrow_spans.describe()) }); @@ -337,7 +337,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { "closure" }; - let desc_place = self.describe_place(place).unwrap_or("_".to_owned()); + let desc_place = self.describe_place(place).unwrap_or_else(|| "_".to_owned()); let tcx = self.infcx.tcx; let first_borrow_desc; @@ -490,7 +490,8 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { ); } else { let borrow_place = &issued_borrow.borrowed_place; - let borrow_place_desc = self.describe_place(borrow_place).unwrap_or("_".to_owned()); + let borrow_place_desc = self.describe_place(borrow_place) + .unwrap_or_else(|| "_".to_owned()); issued_spans.var_span_label( &mut err, format!( @@ -943,7 +944,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { tcx.cannot_mutate_in_match_guard( span, loan_span, - &self.describe_place(place).unwrap_or("_".to_owned()), + &self.describe_place(place).unwrap_or_else(|| "_".to_owned()), "assign", Origin::Mir, ) @@ -951,7 +952,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { tcx.cannot_assign_to_borrowed( span, loan_span, - &self.describe_place(place).unwrap_or("_".to_owned()), + &self.describe_place(place).unwrap_or_else(|| "_".to_owned()), Origin::Mir, ) }; diff --git a/src/librustc_mir/borrow_check/mutability_errors.rs b/src/librustc_mir/borrow_check/mutability_errors.rs index 30f4fc9d5ea23..b71b131570d7b 100644 --- a/src/librustc_mir/borrow_check/mutability_errors.rs +++ b/src/librustc_mir/borrow_check/mutability_errors.rs @@ -208,7 +208,7 @@ impl<'a, 'gcx, 'tcx> MirBorrowckCtxt<'a, 'gcx, 'tcx> { format!( "mutable borrow occurs due to use of `{}` in closure", // always Some() if the message is printed. - self.describe_place(access_place).unwrap_or(String::new()), + self.describe_place(access_place).unwrap_or_default(), ) ); borrow_span diff --git a/src/librustc_mir/borrow_check/nll/mod.rs b/src/librustc_mir/borrow_check/nll/mod.rs index 6e35f2e63f74c..e538524f33a10 100644 --- a/src/librustc_mir/borrow_check/nll/mod.rs +++ b/src/librustc_mir/borrow_check/nll/mod.rs @@ -184,7 +184,7 @@ pub(in borrow_check) fn compute_regions<'cx, 'gcx, 'tcx>( if infcx.tcx.sess.opts.debugging_opts.polonius { let algorithm = env::var("POLONIUS_ALGORITHM") - .unwrap_or(String::from("DatafrogOpt")); + .unwrap_or_else(|_| String::from("DatafrogOpt")); let algorithm = Algorithm::from_str(&algorithm).unwrap(); debug!("compute_regions: using polonius algorithm {:?}", algorithm); Some(Rc::new(Output::compute( diff --git a/src/librustc_mir/interpret/cast.rs b/src/librustc_mir/interpret/cast.rs index f5e824b762888..1504b694be192 100644 --- a/src/librustc_mir/interpret/cast.rs +++ b/src/librustc_mir/interpret/cast.rs @@ -245,7 +245,7 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M> match dest_ty.sty { // float -> uint Uint(t) => { - let width = t.bit_width().unwrap_or(self.pointer_size().bits() as usize); + let width = t.bit_width().unwrap_or_else(|| self.pointer_size().bits() as usize); let v = match fty { FloatTy::F32 => Single::from_bits(bits).to_u128(width).value, FloatTy::F64 => Double::from_bits(bits).to_u128(width).value, @@ -255,7 +255,7 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M> }, // float -> int Int(t) => { - let width = t.bit_width().unwrap_or(self.pointer_size().bits() as usize); + let width = t.bit_width().unwrap_or_else(|| self.pointer_size().bits() as usize); let v = match fty { FloatTy::F32 => Single::from_bits(bits).to_i128(width).value, FloatTy::F64 => Double::from_bits(bits).to_i128(width).value, diff --git a/src/librustc_mir/transform/elaborate_drops.rs b/src/librustc_mir/transform/elaborate_drops.rs index 9d77289d7b9b1..64e6fb7d344a5 100644 --- a/src/librustc_mir/transform/elaborate_drops.rs +++ b/src/librustc_mir/transform/elaborate_drops.rs @@ -482,7 +482,7 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { source_info: terminator.source_info }; - let unwind = unwind.unwrap_or(self.patch.resume_block()); + let unwind = unwind.unwrap_or_else(|| self.patch.resume_block()); let unwind = self.patch.new_block(BasicBlockData { statements: vec![assign.clone()], terminator: Some(Terminator { diff --git a/src/librustc_mir/util/borrowck_errors.rs b/src/librustc_mir/util/borrowck_errors.rs index d5c655a3de472..5a7268c057bd8 100644 --- a/src/librustc_mir/util/borrowck_errors.rs +++ b/src/librustc_mir/util/borrowck_errors.rs @@ -476,7 +476,7 @@ pub trait BorrowckErrors<'cx>: Sized + Copy { ) -> DiagnosticBuilder<'cx> { let moved_path = moved_path .map(|mp| format!(": `{}`", mp)) - .unwrap_or(String::new()); + .unwrap_or_default(); let err = struct_span_err!( self, diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index 48f312ce9f27d..1e4e38c6be612 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -849,7 +849,7 @@ impl<'a, 'b:'a, 'c: 'b> ImportResolver<'a, 'b, 'c> { fn resolve_import(&mut self, directive: &'b ImportDirective<'b>) -> bool { debug!("(resolving import for module) resolving import `{}::...` in `{}`", names_to_string(&directive.module_path[..]), - module_to_string(self.current_module).unwrap_or("???".to_string())); + module_to_string(self.current_module).unwrap_or_else(|| "???".to_string())); self.current_module = directive.parent; diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs index ab8f468672944..468fc1a2d5b33 100644 --- a/src/librustc_save_analysis/dump_visitor.rs +++ b/src/librustc_save_analysis/dump_visitor.rs @@ -163,7 +163,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { .to_fingerprint() .as_value(), }, - crate_root: crate_root.unwrap_or("".to_owned()), + crate_root: crate_root.unwrap_or_else(|| "".to_owned()), external_crates: self.save_ctxt.get_external_crates(), span: self.span_from_span(krate.span), }; @@ -650,7 +650,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { .iter() .enumerate() .map(|(i, f)| { - f.ident.map(|i| i.to_string()).unwrap_or(i.to_string()) + f.ident.map(|i| i.to_string()).unwrap_or_else(|| i.to_string()) }) .collect::>() .join(", "); @@ -1030,7 +1030,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> DumpVisitor<'l, 'tcx, 'll, O> { .tables .node_id_to_type_opt(hir_id) .map(|t| t.to_string()) - .unwrap_or(String::new()); + .unwrap_or_default(); value.push_str(": "); value.push_str(&typ); @@ -1737,7 +1737,7 @@ impl<'l, 'tcx: 'l, 'll, O: DumpOutput + 'll> Visitor<'l> for DumpVisitor<'l, 'tc let value = l.init .as_ref() .map(|i| self.span.snippet(i.span)) - .unwrap_or(String::new()); + .unwrap_or_default(); self.process_var_decl(&l.pat, value); // Just walk the initialiser and type (don't want to walk the pattern again). diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index 1148daef8e391..4b43a1a6270f8 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -367,7 +367,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> { .as_ref() .and_then(|t| self.lookup_ref_id(t.ref_id)) .map(id_from_def_id) - .unwrap_or(null_id()), + .unwrap_or_else(|| null_id()), }, Impl { id: impl_id, @@ -632,7 +632,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> { ref_id: def_id .or(decl_id) .map(|id| id_from_def_id(id)) - .unwrap_or(null_id()), + .unwrap_or_else(|| null_id()), })) } ast::ExprKind::Path(_, ref path) => { diff --git a/src/librustc_typeck/check/method/suggest.rs b/src/librustc_typeck/check/method/suggest.rs index 2006796a10089..bbfcbc7847ab8 100644 --- a/src/librustc_typeck/check/method/suggest.rs +++ b/src/librustc_typeck/check/method/suggest.rs @@ -174,7 +174,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { .map(|arg| print::to_string(print::NO_ANN, |s| s.print_expr(arg))) .collect::>() - .join(", ")).unwrap_or("...".to_owned()))); + .join(", ")).unwrap_or_else(|| "...".to_owned()))); } } } @@ -249,7 +249,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { match expr.node { hir::ExprKind::Lit(ref lit) => { // numeric literal let snippet = tcx.sess.source_map().span_to_snippet(lit.span) - .unwrap_or("".to_owned()); + .unwrap_or_else(|_| "".to_owned()); err.span_suggestion_with_applicability( lit.span, diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index 14ce1bb4ccdee..feaa59e643f08 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -3115,7 +3115,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { Ok(formal_args.iter().map(|ty| { self.resolve_type_vars_if_possible(ty) }).collect()) - }).unwrap_or(Vec::new()); + }).unwrap_or_default(); debug!("expected_inputs_for_expected_output(formal={:?} -> {:?}, expected={:?} -> {:?})", formal_args, formal_ret, expect_args, expected_ret); @@ -4133,7 +4133,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { // [1] self.tcx.sess.delay_span_bug(body.span, "no coercion, but loop may not break"); } - ctxt.coerce.map(|c| c.complete(self)).unwrap_or(self.tcx.mk_unit()) + ctxt.coerce.map(|c| c.complete(self)).unwrap_or_else(|| self.tcx.mk_unit()) } hir::ExprKind::Match(ref discrim, ref arms, match_src) => { self.check_match(expr, &discrim, arms, expected, match_src) diff --git a/src/libstd/build.rs b/src/libstd/build.rs index 0831e29bdddbf..b3851d22841e8 100644 --- a/src/libstd/build.rs +++ b/src/libstd/build.rs @@ -97,8 +97,8 @@ fn build_libbacktrace(target: &str) -> Result<(), ()> { .file("../libbacktrace/sort.c") .file("../libbacktrace/state.c"); - let any_debug = env::var("RUSTC_DEBUGINFO").unwrap_or(String::new()) == "true" || - env::var("RUSTC_DEBUGINFO_LINES").unwrap_or(String::new()) == "true"; + let any_debug = env::var("RUSTC_DEBUGINFO").unwrap_or_default() == "true" || + env::var("RUSTC_DEBUGINFO_LINES").unwrap_or_default() == "true"; build.debug(any_debug); if target.contains("darwin") { diff --git a/src/libstd/sys/redox/args.rs b/src/libstd/sys/redox/args.rs index 556ed77372e69..a7c8ade66f08f 100644 --- a/src/libstd/sys/redox/args.rs +++ b/src/libstd/sys/redox/args.rs @@ -85,7 +85,7 @@ mod imp { } pub fn args() -> Args { - let bytes = clone().unwrap_or(Vec::new()); + let bytes = clone().unwrap_or_default(); let v: Vec = bytes.into_iter().map(|v| { OsStringExt::from_vec(v) }).collect(); diff --git a/src/libstd/sys/unix/process/process_unix.rs b/src/libstd/sys/unix/process/process_unix.rs index 9d6d607e3f340..7f1f9353c6d09 100644 --- a/src/libstd/sys/unix/process/process_unix.rs +++ b/src/libstd/sys/unix/process/process_unix.rs @@ -331,7 +331,7 @@ impl Command { cvt(libc::posix_spawnattr_setflags(&mut attrs.0, flags as _))?; let envp = envp.map(|c| c.as_ptr()) - .unwrap_or(*sys::os::environ() as *const _); + .unwrap_or_else(|| *sys::os::environ() as *const _); let ret = libc::posix_spawnp( &mut p.pid, self.get_argv()[0], diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index c7089a295fc3d..9c47589a0bd27 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3228,7 +3228,7 @@ impl<'a> Parser<'a> { })); let expr_str = self.sess.source_map().span_to_snippet(expr.span) - .unwrap_or(pprust::expr_to_string(&expr)); + .unwrap_or_else(|_| pprust::expr_to_string(&expr)); err.span_suggestion_with_applicability( expr.span, &format!("try {} the cast value", op_verb), diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 83a05921510b4..ce7708cc42e56 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -3119,7 +3119,7 @@ impl<'a> State<'a> { if cmnt.style != comments::Trailing { return Ok(()) } let span_line = cm.lookup_char_pos(span.hi()); let comment_line = cm.lookup_char_pos(cmnt.pos); - let next = next_pos.unwrap_or(cmnt.pos + BytePos(1)); + let next = next_pos.unwrap_or_else(|| cmnt.pos + BytePos(1)); if span.hi() < cmnt.pos && cmnt.pos < next && span_line.line == comment_line.line { self.print_comment(cmnt)?; } diff --git a/src/libsyntax/source_map.rs b/src/libsyntax/source_map.rs index 7ee5835062184..d7033e3993a43 100644 --- a/src/libsyntax/source_map.rs +++ b/src/libsyntax/source_map.rs @@ -942,7 +942,8 @@ impl SourceMap { } else { format!("{}<", &snippet[..offset]) }; - new_snippet.push_str(&self.span_to_snippet(span).unwrap_or("T".to_string())); + new_snippet.push_str( + &self.span_to_snippet(span).unwrap_or_else(|_| "T".to_string())); new_snippet.push('>'); return Some((sugg_span, new_snippet)); diff --git a/src/libsyntax/tokenstream.rs b/src/libsyntax/tokenstream.rs index 70867f9e42ff5..29bd63d28c5ec 100644 --- a/src/libsyntax/tokenstream.rs +++ b/src/libsyntax/tokenstream.rs @@ -606,7 +606,7 @@ impl Cursor { CursorKind::JointTree(ref tree, _) => tree.clone().joint(), CursorKind::Stream(ref cursor) => TokenStream::concat_rc_vec({ cursor.stack.get(0).cloned().map(|(stream, _)| stream) - .unwrap_or(cursor.stream.clone()) + .unwrap_or_else(|| cursor.stream.clone()) }), } }