From 7c6479358bb562094de8a932c941254b5e31f210 Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Sat, 6 May 2017 15:14:44 -0400 Subject: [PATCH] Respect file_lines within format_lines() function --- src/file_lines.rs | 14 ++++++++++++++ src/lib.rs | 42 +++++++++++++++++++++++++----------------- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/src/file_lines.rs b/src/file_lines.rs index a20c8c4d3b3..3db75e1ce7e 100644 --- a/src/file_lines.rs +++ b/src/file_lines.rs @@ -144,6 +144,20 @@ impl FileLines { Err(_) => false, } } + + pub fn contains_line(&self, file_name: &str, line: usize) -> bool { + let map = match self.0 { + // `None` means "all lines in all files". + None => return true, + Some(ref map) => map, + }; + + match canonicalize_path_string(file_name) + .and_then(|canonical| map.get_vec(&canonical).ok_or(())) { + Ok(ranges) => ranges.iter().any(|r| r.lo <= line && r.hi >= line), + Err(_) => false, + } + } } /// FileLines files iterator. diff --git a/src/lib.rs b/src/lib.rs index a3f1a93ca48..ac736369f6f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -481,27 +481,35 @@ fn format_lines(text: &mut StringBuffer, name: &str, config: &Config, report: &m continue; } - // Add warnings for bad todos/ fixmes - if let Some(issue) = issue_seeker.inspect(c) { - errors.push(FormattingError { - line: cur_line, - kind: ErrorKind::BadIssue(issue), - }); + let format_line = config.file_lines.contains_line(name, cur_line as usize); + + if format_line { + // Add warnings for bad todos/ fixmes + if let Some(issue) = issue_seeker.inspect(c) { + errors.push(FormattingError { + line: cur_line, + kind: ErrorKind::BadIssue(issue), + }); + } } if c == '\n' { - // Check for (and record) trailing whitespace. - if let Some(lw) = last_wspace { - trims.push((cur_line, lw, b)); - line_len -= 1; - } - // Check for any line width errors we couldn't correct. - if config.error_on_line_overflow && line_len > config.max_width { - errors.push(FormattingError { - line: cur_line, - kind: ErrorKind::LineOverflow(line_len, config.max_width), - }); + if format_line { + // Check for (and record) trailing whitespace. + if let Some(lw) = last_wspace { + trims.push((cur_line, lw, b)); + line_len -= 1; + } + + // Check for any line width errors we couldn't correct. + if config.error_on_line_overflow && line_len > config.max_width { + errors.push(FormattingError { + line: cur_line, + kind: ErrorKind::LineOverflow(line_len, config.max_width), + }); + } } + line_len = 0; cur_line += 1; newline_count += 1;