about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTakayuki Nakata <f.seasons017@gmail.com>2020-09-25 23:32:18 +0900
committerTakayuki Nakata <f.seasons017@gmail.com>2020-09-25 23:32:18 +0900
commit5b484b405748fc8d7476f9a8d68d2e7227767271 (patch)
tree3f6a0836ae4aed10623e4a21f8207d13f633c380
parent2892a2b0f578edd290b3be6f5e5c3280bc160f24 (diff)
downloadrust-5b484b405748fc8d7476f9a8d68d2e7227767271.tar.gz
rust-5b484b405748fc8d7476f9a8d68d2e7227767271.zip
Fix the detection of build scripts
-rw-r--r--clippy_lints/src/write.rs33
-rw-r--r--tests/ui/print_stdout_build_script.rs (renamed from tests/ui/build.rs)2
-rw-r--r--tests/ui/print_stdout_build_script.stderr (renamed from tests/ui/build.stderr)0
3 files changed, 17 insertions, 18 deletions
diff --git a/clippy_lints/src/write.rs b/clippy_lints/src/write.rs
index 780d474ee96..0e9c7098af8 100644
--- a/clippy_lints/src/write.rs
+++ b/clippy_lints/src/write.rs
@@ -2,7 +2,6 @@ use std::borrow::Cow;
 use std::ops::Range;
 
 use crate::utils::{snippet_with_applicability, span_lint, span_lint_and_sugg, span_lint_and_then};
-use if_chain::if_chain;
 use rustc_ast::ast::{Expr, ExprKind, Item, ItemKind, MacCall, StrLit, StrStyle};
 use rustc_ast::token;
 use rustc_ast::tokenstream::TokenStream;
@@ -12,7 +11,7 @@ use rustc_lint::{EarlyContext, EarlyLintPass};
 use rustc_parse::parser;
 use rustc_session::{declare_tool_lint, impl_lint_pass};
 use rustc_span::symbol::Symbol;
-use rustc_span::{BytePos, FileName, Span};
+use rustc_span::{BytePos, Span};
 
 declare_clippy_lint! {
     /// **What it does:** This lint warns when you use `println!("")` to
@@ -236,15 +235,19 @@ impl EarlyLintPass for Write {
     }
 
     fn check_mac(&mut self, cx: &EarlyContext<'_>, mac: &MacCall) {
+        fn is_build_scripts(cx: &EarlyContext<'_>) -> bool {
+            // We could leverage the fact that Cargo sets the crate name
+            // for build scripts to `build_script_build`.
+            cx.sess
+                .opts
+                .crate_name
+                .as_ref()
+                .map_or(false, |crate_name| crate_name == "build_script_build")
+        }
+
         if mac.path == sym!(println) {
-            let filename = cx.sess.source_map().span_to_filename(mac.span());
-            if_chain! {
-                if let FileName::Real(filename) = filename;
-                if let Some(filename) = filename.local_path().file_name();
-                if filename != "build.rs";
-                then {
-                    span_lint(cx, PRINT_STDOUT, mac.span(), "use of `println!`");
-                }
+            if !is_build_scripts(cx) {
+                span_lint(cx, PRINT_STDOUT, mac.span(), "use of `println!`");
             }
             if let (Some(fmt_str), _) = self.check_tts(cx, mac.args.inner_tokens(), false) {
                 if fmt_str.symbol == Symbol::intern("") {
@@ -260,14 +263,8 @@ impl EarlyLintPass for Write {
                 }
             }
         } else if mac.path == sym!(print) {
-            if_chain! {
-                let filename = cx.sess.source_map().span_to_filename(mac.span());
-                if let FileName::Real(filename) = filename;
-                if let Some(filename) = filename.local_path().file_name();
-                if filename != "build.rs";
-                then {
-                    span_lint(cx, PRINT_STDOUT, mac.span(), "use of `print!`");
-                }
+            if !is_build_scripts(cx) {
+                span_lint(cx, PRINT_STDOUT, mac.span(), "use of `print!`");
             }
             if let (Some(fmt_str), _) = self.check_tts(cx, mac.args.inner_tokens(), false) {
                 if check_newlines(&fmt_str) {
diff --git a/tests/ui/build.rs b/tests/ui/print_stdout_build_script.rs
index 2d43d452a4f..b84bf9124fc 100644
--- a/tests/ui/build.rs
+++ b/tests/ui/print_stdout_build_script.rs
@@ -1,3 +1,5 @@
+// compile-flags: --crate-name=build_script_build
+
 #![warn(clippy::print_stdout)]
 
 fn main() {
diff --git a/tests/ui/build.stderr b/tests/ui/print_stdout_build_script.stderr
index e69de29bb2d..e69de29bb2d 100644
--- a/tests/ui/build.stderr
+++ b/tests/ui/print_stdout_build_script.stderr