Skip to content

Commit 41ea14d

Browse files
authored
Merge pull request #2309 from rust-lang-nursery/rustc-monitor
Use rustc_driver::run
2 parents a2fdfc0 + 4f21b5b commit 41ea14d

File tree

168 files changed

+375
-44
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

168 files changed

+375
-44
lines changed

src/driver.rs

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ extern crate rustc_plugin;
1212
extern crate syntax;
1313

1414
use rustc_driver::{driver, Compilation, CompilerCalls, RustcDefaultCalls};
15-
use rustc::session::{config, CompileIncomplete, Session};
15+
use rustc::session::{config, Session};
1616
use rustc::session::config::{ErrorOutputType, Input};
1717
use std::path::PathBuf;
1818
use std::process::Command;
@@ -153,47 +153,44 @@ pub fn main() {
153153
})
154154
.expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust");
155155

156-
rustc_driver::in_rustc_thread(|| {
157-
// Setting RUSTC_WRAPPER causes Cargo to pass 'rustc' as the first argument.
158-
// We're invoking the compiler programmatically, so we ignore this/
159-
let mut orig_args: Vec<String> = env::args().collect();
160-
if orig_args.len() <= 1 {
161-
std::process::exit(1);
162-
}
163-
if orig_args[1] == "rustc" {
164-
// we still want to be able to invoke it normally though
165-
orig_args.remove(1);
166-
}
167-
// this conditional check for the --sysroot flag is there so users can call
168-
// `clippy_driver` directly
169-
// without having to pass --sysroot or anything
170-
let mut args: Vec<String> = if orig_args.iter().any(|s| s == "--sysroot") {
171-
orig_args.clone()
172-
} else {
173-
orig_args
174-
.clone()
175-
.into_iter()
176-
.chain(Some("--sysroot".to_owned()))
177-
.chain(Some(sys_root))
178-
.collect()
179-
};
180-
181-
// this check ensures that dependencies are built but not linted and the final
182-
// crate is
183-
// linted but not built
184-
let clippy_enabled = env::var("CLIPPY_TESTS")
185-
.ok()
186-
.map_or(false, |val| val == "true")
187-
|| orig_args.iter().any(|s| s == "--emit=metadata");
188-
189-
if clippy_enabled {
190-
args.extend_from_slice(&["--cfg".to_owned(), r#"feature="cargo-clippy""#.to_owned()]);
191-
}
156+
// Setting RUSTC_WRAPPER causes Cargo to pass 'rustc' as the first argument.
157+
// We're invoking the compiler programmatically, so we ignore this/
158+
let mut orig_args: Vec<String> = env::args().collect();
159+
if orig_args.len() <= 1 {
160+
std::process::exit(1);
161+
}
162+
if orig_args[1] == "rustc" {
163+
// we still want to be able to invoke it normally though
164+
orig_args.remove(1);
165+
}
166+
// this conditional check for the --sysroot flag is there so users can call
167+
// `clippy_driver` directly
168+
// without having to pass --sysroot or anything
169+
let mut args: Vec<String> = if orig_args.iter().any(|s| s == "--sysroot") {
170+
orig_args.clone()
171+
} else {
172+
orig_args
173+
.clone()
174+
.into_iter()
175+
.chain(Some("--sysroot".to_owned()))
176+
.chain(Some(sys_root))
177+
.collect()
178+
};
179+
180+
// this check ensures that dependencies are built but not linted and the final
181+
// crate is
182+
// linted but not built
183+
let clippy_enabled = env::var("CLIPPY_TESTS")
184+
.ok()
185+
.map_or(false, |val| val == "true")
186+
|| orig_args.iter().any(|s| s == "--emit=metadata");
187+
188+
if clippy_enabled {
189+
args.extend_from_slice(&["--cfg".to_owned(), r#"feature="cargo-clippy""#.to_owned()]);
190+
}
192191

193-
let mut ccc = ClippyCompilerCalls::new(clippy_enabled);
194-
let (result, _) = rustc_driver::run_compiler(&args, &mut ccc, None, None);
195-
if let Err(CompileIncomplete::Errored(_)) = result {
196-
std::process::exit(1);
197-
}
198-
}).expect("rustc_thread failed");
192+
let mut ccc = ClippyCompilerCalls::new(clippy_enabled);
193+
rustc_driver::run(move || {
194+
rustc_driver::run_compiler(&args, &mut ccc, None, None)
195+
});
199196
}

tests/compile-test.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ fn config(dir: &'static str, mode: &'static str) -> compiletest::Config {
4646
config.target_rustcflags = Some(format!("-L {0} -L {0}/deps -Dwarnings", host_libs().display()));
4747

4848
config.mode = cfg_mode;
49-
config.build_base = {
49+
config.build_base = if rustc_test_suite().is_some() {
50+
PathBuf::from("/tmp/clippy_test_build_base")
51+
} else {
5052
let mut path = std::env::current_dir().unwrap();
5153
path.push("target/debug/test_build_base");
5254
path

tests/ui/absurd-extreme-comparisons.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,5 @@ error: <-comparison of unit values detected. This will always be false
143143
|
144144
= note: `-D unit-cmp` implied by `-D warnings`
145145

146+
error: aborting due to 18 previous errors
147+

tests/ui/approx_const.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,5 @@ error: approximate value of `f{32, 64}::consts::SQRT_2` found. Consider using it
114114
55 | let my_sq2 = 1.4142;
115115
| ^^^^^^
116116

117+
error: aborting due to 19 previous errors
118+

tests/ui/arithmetic.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,5 @@ error: floating-point arithmetic detected
6969
29 | -f;
7070
| ^^
7171

72+
error: aborting due to 11 previous errors
73+

tests/ui/array_indexing.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,5 @@ error: range is out of bounds
116116
44 | &empty[..4];
117117
| ^^^^^^^^^^
118118

119+
error: aborting due to 19 previous errors
120+

tests/ui/assign_ops.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,5 @@ error: manual implementation of an assign operation
134134
40 | s = s + "bla";
135135
| ^^^^^^^^^^^^^ help: replace it with: `s += "bla"`
136136

137+
error: aborting due to 22 previous errors
138+

tests/ui/assign_ops2.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,5 @@ error: variable appears on both sides of an assignment operation
4848
15 | a &= a & 1;
4949
| ^^^^^^^^^^ help: replace it with: `a &= 1`
5050

51+
error: aborting due to 8 previous errors
52+

tests/ui/attrs.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,5 @@ error: the since field must contain a semver-compliant version
2020
30 | #[deprecated(since = "1")]
2121
| ^^^^^^^^^^^
2222

23+
error: aborting due to 3 previous errors
24+

tests/ui/bit_masks.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,3 +106,5 @@ error: ineffective bit mask: `x | 1` compared to `8`, is the same as x compared
106106
55 | x | 1 >= 8;
107107
| ^^^^^^^^^^
108108

109+
error: aborting due to 17 previous errors
110+

tests/ui/blacklisted_name.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,5 @@ error: use of a blacklisted/placeholder name `baz`
8484
35 | if let Some(ref mut baz) = Some(42) {}
8585
| ^^^
8686

87+
error: aborting due to 14 previous errors
88+

tests/ui/block_in_if_condition.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,5 @@ error: this boolean expression can be simplified
5050
|
5151
= note: `-D nonminimal-bool` implied by `-D warnings`
5252

53+
error: aborting due to 5 previous errors
54+

tests/ui/bool_comparison.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,5 @@ error: equality checks against false can be replaced by a negation
2424
10 | if false == x { "yes" } else { "no" };
2525
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
2626

27+
error: aborting due to 4 previous errors
28+

tests/ui/booleans.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,5 @@ error: this boolean expression can be simplified
175175
58 | let _ = !c ^ c || !a.is_some();
176176
| ^^^^^^^^^^^^^^^^^^^^^^ help: try: `!c ^ c || a.is_none()`
177177

178+
error: aborting due to 21 previous errors
179+

tests/ui/borrow_box.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,5 @@ error: you seem to be trying to use `&Box<T>`. Consider using just `&T`
2828
22 | fn test4(a: &Box<bool>);
2929
| ^^^^^^^^^^ help: try: `&bool`
3030

31+
error: aborting due to 4 previous errors
32+

tests/ui/box_vec.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ error: you seem to be trying to use `Box<Vec<T>>`. Consider using just `Vec<T>`
77
= note: `-D box-vec` implied by `-D warnings`
88
= help: `Vec<T>` is already on the heap, `Box<Vec<T>>` makes an extra allocation.
99

10+
error: aborting due to previous error
11+

tests/ui/builtin-type-shadow.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ error[E0308]: mismatched types
1717
= note: expected type `u32`
1818
found type `{integer}`
1919

20+
error: aborting due to 2 previous errors
21+

tests/ui/bytecount.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@ error: You appear to be counting bytes the naive way
2222
22 | let _ = x.iter().filter(|a| b + 1 == **a).count(); // naive byte count
2323
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider using the bytecount crate: `bytecount::count(x, b + 1)`
2424

25+
error: aborting due to 3 previous errors
26+

tests/ui/cast.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,3 +178,5 @@ error: casting to the same type is unnecessary (`bool` -> `bool`)
178178
39 | false as bool;
179179
| ^^^^^^^^^^^^^
180180

181+
error: aborting due to 28 previous errors
182+

tests/ui/cast_lossless_float.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,5 @@ error: casting u32 to f64 may become silently lossy if types change
6060
14 | 1u32 as f64;
6161
| ^^^^^^^^^^^ help: try: `f64::from(1u32)`
6262

63+
error: aborting due to 10 previous errors
64+

tests/ui/cast_lossless_integer.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,5 @@ error: casting u32 to u64 may become silently lossy if types change
108108
23 | 1u32 as u64;
109109
| ^^^^^^^^^^^ help: try: `u64::from(1u32)`
110110

111+
error: aborting due to 18 previous errors
112+

tests/ui/cast_size.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,5 @@ error: casting i32 to usize may lose the sign of the value
120120
22 | 1i32 as usize;
121121
| ^^^^^^^^^^^^^
122122

123+
error: aborting due to 19 previous errors
124+

tests/ui/char_lit_as_u8.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ error: casting character literal to u8. `char`s are 4 bytes wide in rust, so cas
88
= help: Consider using a byte literal instead:
99
b'a'
1010

11+
error: aborting due to previous error
12+

tests/ui/cmp_nan.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,5 @@ error: doomed comparison with NAN, use `std::{f32,f64}::is_nan()` instead
7272
21 | y >= std::f64::NAN;
7373
| ^^^^^^^^^^^^^^^^^^
7474

75+
error: aborting due to 12 previous errors
76+

tests/ui/cmp_null.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ error: Comparing with null is better expressed by the .is_null() method
1212
16 | if m == ptr::null_mut() {
1313
| ^^^^^^^^^^^^^^^^^^^^
1414

15+
error: aborting due to 2 previous errors
16+

tests/ui/cmp_owned.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,5 @@ error: this creates an owned instance just for comparison
3636
30 | self.to_owned() == *other
3737
| ^^^^^^^^^^^^^^^ try calling implementing the comparison without allocating
3838

39+
error: aborting due to 6 previous errors
40+

tests/ui/collapsible_if.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,3 +240,5 @@ help: try
240240
112 | }
241241
|
242242

243+
error: aborting due to 13 previous errors
244+

tests/ui/complex_types.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,5 @@ error: very complex type used. Consider factoring parts into `type` definitions
9090
40 | let _y: Vec<Vec<Box<(u32, u32, u32, u32)>>> = vec![];
9191
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9292

93+
error: aborting due to 15 previous errors
94+

tests/ui/conf_bad_arg.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ error[E0658]: compiler plugins are experimental and possibly buggy (see issue #2
66
|
77
= help: add #![feature(plugin)] to the crate attributes to enable
88

9+
error: aborting due to previous error
10+

tests/ui/conf_bad_toml.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ error[E0658]: compiler plugins are experimental and possibly buggy (see issue #2
66
|
77
= help: add #![feature(plugin)] to the crate attributes to enable
88

9+
error: aborting due to previous error
10+

tests/ui/conf_bad_type.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ error[E0658]: compiler plugins are experimental and possibly buggy (see issue #2
66
|
77
= help: add #![feature(plugin)] to the crate attributes to enable
88

9+
error: aborting due to previous error
10+

tests/ui/conf_french_blacklisted_name.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ error[E0658]: compiler plugins are experimental and possibly buggy (see issue #2
66
|
77
= help: add #![feature(plugin)] to the crate attributes to enable
88

9+
error: aborting due to previous error
10+

tests/ui/conf_path_non_string.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ error[E0658]: compiler plugins are experimental and possibly buggy (see issue #2
66
|
77
= help: add #![feature(plugin)] to the crate attributes to enable
88

9+
error: aborting due to previous error
10+

tests/ui/conf_unknown_key.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ error[E0658]: compiler plugins are experimental and possibly buggy (see issue #2
66
|
77
= help: add #![feature(plugin)] to the crate attributes to enable
88

9+
error: aborting due to previous error
10+

tests/ui/const_static_lifetime.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,5 @@ error: Constants have by default a `'static` lifetime
7878
24 | const VAR_ARRAY: &'static [u8; 1] = b"T"; // ERROR Consider removing 'static.
7979
| -^^^^^^^-------- help: consider removing `'static`: `&[u8; 1]`
8080

81+
error: aborting due to 13 previous errors
82+

tests/ui/copies.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,5 @@ error: This else block is redundant.
3333
}
3434

3535

36+
error: aborting due to 2 previous errors
37+

tests/ui/cstring.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ help: assign the `CString` to a variable to extend its lifetime
1212
7 | CString::new("foo").unwrap().as_ptr();
1313
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1414

15+
error: aborting due to previous error
16+

tests/ui/cyclomatic_complexity.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,3 +269,5 @@ error: the function has a cyclomatic complexity of 8
269269
|
270270
= help: you could split it up into multiple smaller functions
271271

272+
error: aborting due to 20 previous errors
273+

tests/ui/cyclomatic_complexity_attr_used.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,5 @@ error: the function has a cyclomatic complexity of 3
1313
= note: `-D cyclomatic-complexity` implied by `-D warnings`
1414
= help: you could split it up into multiple smaller functions
1515

16+
error: aborting due to previous error
17+

tests/ui/deprecated.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,5 @@ error: lint unstable_as_mut_slice has been removed: `Vec::as_mut_slice` has been
2424
10 | #[warn(unstable_as_mut_slice)]
2525
| ^^^^^^^^^^^^^^^^^^^^^
2626

27+
error: aborting due to 4 previous errors
28+

tests/ui/derive.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,3 +106,5 @@ note: consider deriving `Clone` or removing `Copy`
106106
87 | | }
107107
| |_^
108108

109+
error: aborting due to 7 previous errors
110+

tests/ui/diverging_sub_expression.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,5 @@ error: sub-expression diverges
3636
37 | _ => true || break,
3737
| ^^^^^
3838

39+
error: aborting due to 6 previous errors
40+

tests/ui/dlist.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,5 @@ error: I see you're using a LinkedList! Perhaps you meant some other data struct
4747
|
4848
= help: a VecDeque might work
4949

50+
error: aborting due to 6 previous errors
51+

tests/ui/doc.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,5 @@ error: you should put bare URLs between `<`/`>` or make a proper Markdown link
180180
168 | /// Not ok: http://www.unicode.org/reports/tr9/#Reordering_Resolved_Levels
181181
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
182182

183+
error: aborting due to 30 previous errors
184+

tests/ui/double_neg.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ error: `--x` could be misinterpreted as pre-decrement by C programmers, is usual
66
|
77
= note: `-D double-neg` implied by `-D warnings`
88

9+
error: aborting due to previous error
10+

tests/ui/double_parens.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,5 @@ error: Consider removing unnecessary double parentheses
3030
32 | (())
3131
| ^^^^
3232

33+
error: aborting due to 5 previous errors
34+

tests/ui/drop_forget_copy.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,5 @@ note: argument has type SomeStruct
7272
42 | forget(s4);
7373
| ^^
7474

75+
error: aborting due to 6 previous errors
76+

tests/ui/drop_forget_ref.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,3 +216,5 @@ note: argument has type &SomeStruct
216216
59 | std::mem::forget(&SomeStruct);
217217
| ^^^^^^^^^^^
218218

219+
error: aborting due to 18 previous errors
220+

tests/ui/duplicate_underscore_argument.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ error: `darth` already exists, having another argument having almost the same na
66
|
77
= note: `-D duplicate-underscore-argument` implied by `-D warnings`
88

9+
error: aborting due to previous error
10+

tests/ui/else_if_without_else.stderr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,5 @@ error: if expression with an `else if`, but without a final `else`
1818
49 | | }
1919
| |_____^ help: add an `else` block here
2020

21+
error: aborting due to 2 previous errors
22+

0 commit comments

Comments
 (0)