diff options
| author | Grzegorz Bartoszek <grzegorz.bartoszek@thaumatec.com> | 2019-01-22 12:33:47 +0100 |
|---|---|---|
| committer | Grzegorz Bartoszek <grzegorz.bartoszek@thaumatec.com> | 2019-01-22 14:07:53 +0100 |
| commit | 0f5c43a7227f830f1c083b00d89ceb2f57ccb923 (patch) | |
| tree | 78f5ea72ba0035a7b7563d4b24da9647d69c36bb | |
| parent | 9d5b14864827d8b4655842b29a1bd803e15e3f17 (diff) | |
| download | rust-0f5c43a7227f830f1c083b00d89ceb2f57ccb923.tar.gz rust-0f5c43a7227f830f1c083b00d89ceb2f57ccb923.zip | |
Added "make_return" and "blockify" convenience methods in Sugg and used them in "needless_bool".
| -rw-r--r-- | clippy_lints/src/needless_bool.rs | 14 | ||||
| -rw-r--r-- | clippy_lints/src/utils/sugg.rs | 29 |
2 files changed, 35 insertions, 8 deletions
diff --git a/clippy_lints/src/needless_bool.rs b/clippy_lints/src/needless_bool.rs index a898a740cd8..3b1fea465f5 100644 --- a/clippy_lints/src/needless_bool.rs +++ b/clippy_lints/src/needless_bool.rs @@ -70,16 +70,14 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NeedlessBool { let reduce = |ret, not| { let mut applicability = Applicability::MachineApplicable; let snip = Sugg::hir_with_applicability(cx, pred, "<predicate>", &mut applicability); - let snip = if not { !snip } else { snip }; + let mut snip = if not { !snip } else { snip }; - let mut hint = if ret { - format!("return {}", snip) - } else { - snip.to_string() - }; + if ret { + snip = snip.make_return(); + } if parent_node_is_if_expr(&e, &cx) { - hint = format!("{{ {} }}", hint); + snip = snip.blockify() } span_lint_and_sugg( @@ -88,7 +86,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NeedlessBool { e.span, "this if-then-else expression returns a bool literal", "you can reduce it to", - hint, + snip.to_string(), applicability, ); }; diff --git a/clippy_lints/src/utils/sugg.rs b/clippy_lints/src/utils/sugg.rs index d42af5fde3a..b95ce17ed93 100644 --- a/clippy_lints/src/utils/sugg.rs +++ b/clippy_lints/src/utils/sugg.rs @@ -206,6 +206,17 @@ impl<'a> Sugg<'a> { make_unop("&mut *", self) } + /// Convenience method to transform suggestion into a return call + pub fn make_return(self) -> Sugg<'static> { + Sugg::NonParen(Cow::Owned(format!("return {}", self))) + } + + /// Convenience method to transform suggestion into a block + /// where the suggestion is a trailing expression + pub fn blockify(self) -> Sugg<'static> { + Sugg::NonParen(Cow::Owned(format!("{{ {} }}", self))) + } + /// Convenience method to create the `<lhs>..<rhs>` or `<lhs>...<rhs>` /// suggestion. #[allow(dead_code)] @@ -578,3 +589,21 @@ impl<'a, 'b, 'c, T: LintContext<'c>> DiagnosticBuilderExt<'c, T> for rustc_error self.span_suggestion_with_applicability(remove_span, msg, String::new(), applicability); } } + +#[cfg(test)] +mod test { + use super::Sugg; + use std::borrow::Cow; + + const SUGGESTION: Sugg<'static> = Sugg::NonParen(Cow::Borrowed("function_call()")); + + #[test] + fn make_return_transform_sugg_into_a_return_call() { + assert_eq!("return function_call()", SUGGESTION.make_return().to_string()); + } + + #[test] + fn blockify_transforms_sugg_into_a_block() { + assert_eq!("{ function_call() }", SUGGESTION.blockify().to_string()); + } +} |
