The code that manipulates paths to try and find files in the target dir
was not handling windows file seperators correctly. The code has been
updated to use the path module, and hopefully will play nicer across
operating systems.
use std::collections::HashMap;
use std::fs;
use std::io::{self, Read, BufRead, BufReader};
use std::collections::HashMap;
use std::fs;
use std::io::{self, Read, BufRead, BufReader};
use rustfmt::*;
use rustfmt::config::{Config, ReportTactic};
use rustfmt::*;
use rustfmt::config::{Config, ReportTactic};
// Map source file paths to their target paths.
fn get_target(file_name: &str, target: Option<&str>) -> String {
// Map source file paths to their target paths.
fn get_target(file_name: &str, target: Option<&str>) -> String {
- if file_name.starts_with("tests/source/") {
- let base = target.unwrap_or(file_name.trim_left_matches("tests/source/"));
+ let file_path = Path::new(file_name);
+ let source_path_prefix = Path::new("tests/source/");
+ if file_path.starts_with(source_path_prefix) {
+ let mut components = file_path.components();
+ // Can't skip(2) as the resulting iterator can't as_path()
+ components.next();
+ components.next();
+
+ let new_target = match components.as_path().to_str() {
+ Some(string) => string,
+ None => file_name,
+ };
+ let base = target.unwrap_or(new_target);
format!("tests/target/{}", base)
} else {
format!("tests/target/{}", base)
} else {