From daf5c4d80d576b23d4b43feee356b736a216573d Mon Sep 17 00:00:00 2001 From: Ian Cordasco Date: Mon, 14 Mar 2016 20:23:03 -0500 Subject: [PATCH] Add ability to check if a file is ignored inline Check for ``# flake8: noqa`` lines inside a file. --- flake8/checker.py | 3 +++ flake8/processor.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/flake8/checker.py b/flake8/checker.py index 9fcaa3c..7422427 100644 --- a/flake8/checker.py +++ b/flake8/checker.py @@ -291,6 +291,9 @@ class FileChecker(object): def run_checks(self): """Run checks against the file.""" + if self.processor.should_ignore_file(): + return + try: self.process_tokens() except exceptions.InvalidSyntax as exc: diff --git a/flake8/processor.py b/flake8/processor.py index 52d7ab1..f2f5b00 100644 --- a/flake8/processor.py +++ b/flake8/processor.py @@ -1,6 +1,7 @@ """Module containing our file processor that tokenizes a file for checks.""" import contextlib import io +import re import sys import tokenize @@ -41,6 +42,8 @@ class FileProcessor(object): - verbose """ + NOQA_FILE = re.compile(r'\s*# flake8[:=]\s*noqa', re.I) + def __init__(self, filename, options): """Initialice our file processor. @@ -269,6 +272,19 @@ class FileProcessor(object): """Read the lines from standard in.""" return utils.stdin_get_value().splitlines(True) + def should_ignore_file(self): + # type: () -> bool + """Check if ``# flake8: noqa`` is in the file to be ignored. + + :returns: + True if a line matches :attr:`FileProcessor.NOQA_FILE`, + otherwise False + :rtype: + bool + """ + ignore_file = self.NOQA_FILE.search + return any(ignore_file(line) for line in self.lines) + def strip_utf_bom(self): # type: () -> NoneType """Strip the UTF bom from the lines of the file."""