Skip to content

Prefer unwrap_or_else to unwrap_or in case of function calls/allocations #55014

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 20, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/bootstrap/config.rs
Original file line number Diff line number Diff line change
@@ -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();
3 changes: 2 additions & 1 deletion src/build_helper/lib.rs
Original file line number Diff line number Diff line change
@@ -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('=') {
2 changes: 1 addition & 1 deletion src/librustc/hir/lowering.rs
Original file line number Diff line number Diff line change
@@ -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 {
2 changes: 1 addition & 1 deletion src/librustc/lint/levels.rs
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion src/librustc/lint/mod.rs
Original file line number Diff line number Diff line change
@@ -519,7 +519,7 @@ impl LintBuffer {
}

pub fn take(&mut self, id: ast::NodeId) -> Vec<BufferedEarlyLint> {
self.map.remove(&id).unwrap_or(Vec::new())
self.map.remove(&id).unwrap_or_default()
}

pub fn get_any(&self) -> Option<&[BufferedEarlyLint]> {
4 changes: 2 additions & 2 deletions src/librustc/traits/auto_trait.rs
Original file line number Diff line number Diff line change
@@ -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
4 changes: 2 additions & 2 deletions src/librustc/traits/error_reporting.rs
Original file line number Diff line number Diff line change
@@ -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);
2 changes: 1 addition & 1 deletion src/librustc/ty/context.rs
Original file line number Diff line number Diff line change
@@ -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>> {
2 changes: 1 addition & 1 deletion src/librustc/ty/query/on_disk_cache.rs
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 1 addition & 1 deletion src/librustc_codegen_llvm/attributes.rs
Original file line number Diff line number Diff line change
@@ -154,7 +154,7 @@ pub fn from_fn_attrs(
id: Option<DefId>,
) {
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);

2 changes: 1 addition & 1 deletion src/librustc_codegen_llvm/back/rpath.rs
Original file line number Diff line number Diff line change
@@ -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();
2 changes: 1 addition & 1 deletion src/librustc_codegen_llvm/llvm/archive_ro.rs
Original file line number Diff line number Diff line change
@@ -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 })
};
2 changes: 1 addition & 1 deletion src/librustc_codegen_llvm/llvm/diagnostic.rs
Original file line number Diff line number Diff line change
@@ -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("<unknown file>");
}
2 changes: 1 addition & 1 deletion src/librustc_codegen_utils/link.rs
Original file line number Diff line number Diff line change
@@ -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);

2 changes: 1 addition & 1 deletion src/librustc_driver/driver.rs
Original file line number Diff line number Diff line change
@@ -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 {
2 changes: 1 addition & 1 deletion src/librustc_errors/diagnostic_builder.rs
Original file line number Diff line number Diff line change
@@ -128,7 +128,7 @@ impl<'a> DiagnosticBuilder<'a> {
message: &str,
span: Option<S>,
) -> &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
}
2 changes: 1 addition & 1 deletion src/librustc_metadata/locator.rs
Original file line number Diff line number Diff line change
@@ -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
}
19 changes: 10 additions & 9 deletions src/librustc_mir/borrow_check/error_reporting.rs
Original file line number Diff line number Diff line change
@@ -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,15 +944,15 @@ 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,
)
} else {
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,
)
};
2 changes: 1 addition & 1 deletion src/librustc_mir/borrow_check/mutability_errors.rs
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion src/librustc_mir/borrow_check/nll/mod.rs
Original file line number Diff line number Diff line change
@@ -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(
4 changes: 2 additions & 2 deletions src/librustc_mir/interpret/cast.rs
Original file line number Diff line number Diff line change
@@ -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,
2 changes: 1 addition & 1 deletion src/librustc_mir/transform/elaborate_drops.rs
Original file line number Diff line number Diff line change
@@ -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 {
2 changes: 1 addition & 1 deletion src/librustc_mir/util/borrowck_errors.rs
Original file line number Diff line number Diff line change
@@ -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,
2 changes: 1 addition & 1 deletion src/librustc_resolve/resolve_imports.rs
Original file line number Diff line number Diff line change
@@ -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;

8 changes: 4 additions & 4 deletions src/librustc_save_analysis/dump_visitor.rs
Original file line number Diff line number Diff line change
@@ -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("<no source>".to_owned()),
crate_root: crate_root.unwrap_or_else(|| "<no source>".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::<Vec<_>>()
.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).
4 changes: 2 additions & 2 deletions src/librustc_save_analysis/lib.rs
Original file line number Diff line number Diff line change
@@ -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) => {
4 changes: 2 additions & 2 deletions src/librustc_typeck/check/method/suggest.rs
Original file line number Diff line number Diff line change
@@ -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::<Vec<_>>()
.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("<numeric literal>".to_owned());
.unwrap_or_else(|_| "<numeric literal>".to_owned());

err.span_suggestion_with_applicability(
lit.span,
Loading