Skip to content
This repository was archived by the owner on Nov 24, 2023. It is now read-only.

Commit 7010307

Browse files
authored
Merge pull request #166 from philipc/fix-json
Change example to automatically determine filename
2 parents fa8a2f0 + f126ec8 commit 7010307

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

examples/fix-json.rs

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,44 @@ extern crate failure;
22
extern crate rustfix;
33

44
use failure::Error;
5-
use std::{env, fs, process, collections::HashSet};
5+
use std::io::{stdin, BufReader, Read};
6+
use std::{collections::HashMap, collections::HashSet, env, fs};
67

78
fn main() -> Result<(), Error> {
8-
let args: Vec<String> = env::args().collect();
9-
let (suggestions_file, source_file) = match args.as_slice() {
10-
[_, suggestions_file, source_file] => (suggestions_file, source_file),
11-
_ => {
12-
println!("USAGE: fix-json <suggestions-file> <source-file>");
13-
process::exit(1);
14-
}
9+
let suggestions_file = env::args().nth(1).expect("USAGE: fix-json <file or -->");
10+
let suggestions = if suggestions_file == "--" {
11+
let mut buffer = String::new();
12+
BufReader::new(stdin()).read_to_string(&mut buffer)?;
13+
buffer
14+
} else {
15+
fs::read_to_string(&suggestions_file)?
1516
};
16-
17-
let suggestions = fs::read_to_string(&suggestions_file)?;
1817
let suggestions = rustfix::get_suggestions_from_json(
1918
&suggestions,
2019
&HashSet::new(),
2120
rustfix::Filter::Everything,
2221
)?;
2322

24-
let source = fs::read_to_string(&source_file)?;
23+
let mut files = HashMap::new();
24+
for suggestion in suggestions {
25+
let file = suggestion.solutions[0].replacements[0]
26+
.snippet
27+
.file_name
28+
.clone();
29+
files.entry(file).or_insert_with(Vec::new).push(suggestion);
30+
}
2531

26-
let fixes = rustfix::apply_suggestions(&source, &suggestions)?;
27-
28-
println!("{}", fixes);
32+
for (source_file, suggestions) in &files {
33+
let source = fs::read_to_string(source_file)?;
34+
let mut fix = rustfix::CodeFix::new(&source);
35+
for suggestion in suggestions.iter().rev() {
36+
if let Err(e) = fix.apply(suggestion) {
37+
eprintln!("Failed to apply suggestion to {}: {}", source_file, e);
38+
}
39+
}
40+
let fixes = fix.finish()?;
41+
fs::write(source_file, fixes)?;
42+
}
2943

3044
Ok(())
3145
}

0 commit comments

Comments
 (0)