summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/flake8/checker.py8
-rw-r--r--src/flake8/main/options.py2
-rw-r--r--src/flake8/processor.py17
-rw-r--r--src/flake8/style_guide.py2
-rw-r--r--tests/unit/test_file_processor.py7
5 files changed, 21 insertions, 15 deletions
diff --git a/src/flake8/checker.py b/src/flake8/checker.py
index d5132ff..7c70ace 100644
--- a/src/flake8/checker.py
+++ b/src/flake8/checker.py
@@ -398,20 +398,20 @@ class FileChecker(object):
:type style_guide:
flake8.style_guide.StyleGuide
"""
- self.filename = filename
self.checks = checks
self.style_guide = style_guide
self.results = []
- self.processor = self._make_processor()
+ self.processor = self._make_processor(filename)
+ self.filename = self.processor.filename
self.statistics = {
'tokens': 0,
'logical lines': 0,
'physical lines': len(self.processor.lines),
}
- def _make_processor(self):
+ def _make_processor(self, filename):
try:
- return processor.FileProcessor(self.filename,
+ return processor.FileProcessor(filename,
self.style_guide.options)
except IOError:
# If we can not read the file due to an IOError (e.g., the file
diff --git a/src/flake8/main/options.py b/src/flake8/main/options.py
index c725c38..dbfdf9b 100644
--- a/src/flake8/main/options.py
+++ b/src/flake8/main/options.py
@@ -74,7 +74,7 @@ def register_default_options(option_manager):
)
add_option(
- '--stdin-display-name', default='stdin',
+ '--stdin-display-name',
help='The name used when reporting errors from code passed via stdin.'
' This is useful for editors piping the file contents to flake8.'
' (Default: %default)',
diff --git a/src/flake8/processor.py b/src/flake8/processor.py
index 76c5512..ae82b50 100644
--- a/src/flake8/processor.py
+++ b/src/flake8/processor.py
@@ -55,12 +55,13 @@ class FileProcessor(object):
:param str filename:
Name of the file to process
"""
+ self.options = options
self.filename = filename
self.lines = lines
if lines is None:
- self.lines = self.read_lines()
+ # allow for stdin filename substitution
+ self.filename, self.lines = self.read_lines(filename)
self.strip_utf_bom()
- self.options = options
# Defaults for public attributes
#: Number of preceding blank lines
@@ -268,13 +269,15 @@ class FileProcessor(object):
self.indent_char = line[0]
return line
- def read_lines(self):
+ def read_lines(self, filename):
# type: () -> List[str]
"""Read the lines for this file checker."""
- if self.filename is None or self.filename == '-':
- self.filename = 'stdin'
- return self.read_lines_from_stdin()
- return self.read_lines_from_filename()
+ if filename is None or filename == '-':
+ filename = self.options.stdin_display_name or 'stdin'
+ lines = self.read_lines_from_stdin()
+ else:
+ lines = self.read_lines_from_filename()
+ return (filename, lines)
def _readlines_py2(self):
# type: () -> List[str]
diff --git a/src/flake8/style_guide.py b/src/flake8/style_guide.py
index ed1b844..284444d 100644
--- a/src/flake8/style_guide.py
+++ b/src/flake8/style_guide.py
@@ -260,8 +260,6 @@ class StyleGuide(object):
"""
error = Error(code, filename, line_number, column_number, text,
physical_line)
- if error.filename is None or error.filename == '-':
- error = error._replace(filename=self.options.stdin_display_name)
error_is_selected = (self.should_report_error(error.code) is
Decision.Selected)
is_not_inline_ignored = self.is_inline_ignored(error) is False
diff --git a/tests/unit/test_file_processor.py b/tests/unit/test_file_processor.py
index dec1667..8bc0e2d 100644
--- a/tests/unit/test_file_processor.py
+++ b/tests/unit/test_file_processor.py
@@ -14,6 +14,7 @@ def options_from(**kwargs):
kwargs.setdefault('hang_closing', True)
kwargs.setdefault('max_line_length', 79)
kwargs.setdefault('verbose', False)
+ kwargs.setdefault('stdin_display_name', None)
return optparse.Values(kwargs)
@@ -63,13 +64,17 @@ def test_read_lines_from_stdin(stdin_get_value):
@mock.patch('flake8.utils.stdin_get_value')
-def test_read_lines_sets_filename_attribute(stdin_get_value):
+def test_stdin_filename_attribute(stdin_get_value):
"""Verify that we update the filename attribute."""
stdin_value = mock.Mock()
stdin_value.splitlines.return_value = []
stdin_get_value.return_value = stdin_value
file_processor = processor.FileProcessor('-', options_from())
assert file_processor.filename == 'stdin'
+ file_processor = processor.FileProcessor('-', options_from(
+ stdin_display_name="foo.py"
+ ))
+ assert file_processor.filename == 'foo.py'
def test_line_for():