mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-23 05:03:21 +00:00
Add eprint! to print_with_newline lint
This commit is contained in:
parent
b04bfbd09b
commit
7063c36c91
3 changed files with 190 additions and 0 deletions
|
@ -283,6 +283,26 @@ impl EarlyLintPass for Write {
|
|||
span_lint(cx, PRINT_STDERR, mac.span(), "use of `eprintln!`");
|
||||
} else if mac.path == sym!(eprint) {
|
||||
span_lint(cx, PRINT_STDERR, mac.span(), "use of `eprint!`");
|
||||
if let (Some(fmt_str), _) = self.check_tts(cx, mac.args.inner_tokens(), false) {
|
||||
if check_newlines(&fmt_str) {
|
||||
span_lint_and_then(
|
||||
cx,
|
||||
PRINT_WITH_NEWLINE,
|
||||
mac.span(),
|
||||
"using `eprint!()` with a format string that ends in a single newline",
|
||||
|err| {
|
||||
err.multipart_suggestion(
|
||||
"use `eprintln!` instead",
|
||||
vec![
|
||||
(mac.path.span, String::from("eprintln")),
|
||||
(newline_span(&fmt_str), String::new()),
|
||||
],
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
} else if mac.path == sym!(print) {
|
||||
if !is_build_script(cx) {
|
||||
span_lint(cx, PRINT_STDOUT, mac.span(), "use of `print!`");
|
||||
|
|
49
tests/ui/eprint_with_newline.rs
Normal file
49
tests/ui/eprint_with_newline.rs
Normal file
|
@ -0,0 +1,49 @@
|
|||
#![allow(clippy::print_literal)]
|
||||
#![warn(clippy::print_with_newline)]
|
||||
|
||||
fn main() {
|
||||
eprint!("Hello\n");
|
||||
eprint!("Hello {}\n", "world");
|
||||
eprint!("Hello {} {}\n", "world", "#2");
|
||||
eprint!("{}\n", 1265);
|
||||
eprint!("\n");
|
||||
|
||||
// these are all fine
|
||||
eprint!("");
|
||||
eprint!("Hello");
|
||||
eprintln!("Hello");
|
||||
eprintln!("Hello\n");
|
||||
eprintln!("Hello {}\n", "world");
|
||||
eprint!("Issue\n{}", 1265);
|
||||
eprint!("{}", 1265);
|
||||
eprint!("\n{}", 1275);
|
||||
eprint!("\n\n");
|
||||
eprint!("like eof\n\n");
|
||||
eprint!("Hello {} {}\n\n", "world", "#2");
|
||||
eprintln!("\ndon't\nwarn\nfor\nmultiple\nnewlines\n"); // #3126
|
||||
eprintln!("\nbla\n\n"); // #3126
|
||||
|
||||
// Escaping
|
||||
eprint!("\\n"); // #3514
|
||||
eprint!("\\\n"); // should fail
|
||||
eprint!("\\\\n");
|
||||
|
||||
// Raw strings
|
||||
eprint!(r"\n"); // #3778
|
||||
|
||||
// Literal newlines should also fail
|
||||
eprint!(
|
||||
"
|
||||
"
|
||||
);
|
||||
eprint!(
|
||||
r"
|
||||
"
|
||||
);
|
||||
|
||||
// Don't warn on CRLF (#4208)
|
||||
eprint!("\r\n");
|
||||
eprint!("foo\r\n");
|
||||
eprint!("\\r\n"); //~ ERROR
|
||||
eprint!("foo\rbar\n") // ~ ERROR
|
||||
}
|
121
tests/ui/eprint_with_newline.stderr
Normal file
121
tests/ui/eprint_with_newline.stderr
Normal file
|
@ -0,0 +1,121 @@
|
|||
error: using `eprint!()` with a format string that ends in a single newline
|
||||
--> $DIR/eprint_with_newline.rs:5:5
|
||||
|
|
||||
LL | eprint!("Hello/n");
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `-D clippy::print-with-newline` implied by `-D warnings`
|
||||
help: use `eprintln!` instead
|
||||
|
|
||||
LL | eprintln!("Hello");
|
||||
| ^^^^^^^^ --
|
||||
|
||||
error: using `eprint!()` with a format string that ends in a single newline
|
||||
--> $DIR/eprint_with_newline.rs:6:5
|
||||
|
|
||||
LL | eprint!("Hello {}/n", "world");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: use `eprintln!` instead
|
||||
|
|
||||
LL | eprintln!("Hello {}", "world");
|
||||
| ^^^^^^^^ --
|
||||
|
||||
error: using `eprint!()` with a format string that ends in a single newline
|
||||
--> $DIR/eprint_with_newline.rs:7:5
|
||||
|
|
||||
LL | eprint!("Hello {} {}/n", "world", "#2");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: use `eprintln!` instead
|
||||
|
|
||||
LL | eprintln!("Hello {} {}", "world", "#2");
|
||||
| ^^^^^^^^ --
|
||||
|
||||
error: using `eprint!()` with a format string that ends in a single newline
|
||||
--> $DIR/eprint_with_newline.rs:8:5
|
||||
|
|
||||
LL | eprint!("{}/n", 1265);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: use `eprintln!` instead
|
||||
|
|
||||
LL | eprintln!("{}", 1265);
|
||||
| ^^^^^^^^ --
|
||||
|
||||
error: using `eprint!()` with a format string that ends in a single newline
|
||||
--> $DIR/eprint_with_newline.rs:9:5
|
||||
|
|
||||
LL | eprint!("/n");
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
help: use `eprintln!` instead
|
||||
|
|
||||
LL | eprintln!();
|
||||
| ^^^^^^^^ --
|
||||
|
||||
error: using `eprint!()` with a format string that ends in a single newline
|
||||
--> $DIR/eprint_with_newline.rs:28:5
|
||||
|
|
||||
LL | eprint!("//n"); // should fail
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: use `eprintln!` instead
|
||||
|
|
||||
LL | eprintln!("/"); // should fail
|
||||
| ^^^^^^^^ --
|
||||
|
||||
error: using `eprint!()` with a format string that ends in a single newline
|
||||
--> $DIR/eprint_with_newline.rs:35:5
|
||||
|
|
||||
LL | / eprint!(
|
||||
LL | | "
|
||||
LL | | "
|
||||
LL | | );
|
||||
| |_____^
|
||||
|
|
||||
help: use `eprintln!` instead
|
||||
|
|
||||
LL | eprintln!(
|
||||
LL | ""
|
||||
|
|
||||
|
||||
error: using `eprint!()` with a format string that ends in a single newline
|
||||
--> $DIR/eprint_with_newline.rs:39:5
|
||||
|
|
||||
LL | / eprint!(
|
||||
LL | | r"
|
||||
LL | | "
|
||||
LL | | );
|
||||
| |_____^
|
||||
|
|
||||
help: use `eprintln!` instead
|
||||
|
|
||||
LL | eprintln!(
|
||||
LL | r""
|
||||
|
|
||||
|
||||
error: using `eprint!()` with a format string that ends in a single newline
|
||||
--> $DIR/eprint_with_newline.rs:47:5
|
||||
|
|
||||
LL | eprint!("/r/n"); //~ ERROR
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: use `eprintln!` instead
|
||||
|
|
||||
LL | eprintln!("/r"); //~ ERROR
|
||||
| ^^^^^^^^ --
|
||||
|
||||
error: using `eprint!()` with a format string that ends in a single newline
|
||||
--> $DIR/eprint_with_newline.rs:48:5
|
||||
|
|
||||
LL | eprint!("foo/rbar/n") // ~ ERROR
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: use `eprintln!` instead
|
||||
|
|
||||
LL | eprintln!("foo/rbar") // ~ ERROR
|
||||
| ^^^^^^^^ --
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
Loading…
Reference in a new issue