about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/file_lines.rs14
-rw-r--r--src/lib.rs40
2 files changed, 38 insertions, 16 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 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 {
+        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::LineOverflow(line_len, config.max_width),
+                                kind: ErrorKind::BadIssue(issue),
                             });
             }
+        }
+
+        if c == '\n' {
+            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;