mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-17 01:29:52 +00:00
Merge branch 'bug/306' into 'master'
Modify stdin retriever to detect coding pragma Closes #306 See merge request !177
This commit is contained in:
commit
733a4f053b
1 changed files with 14 additions and 4 deletions
|
|
@ -7,6 +7,7 @@ import os
|
||||||
import platform
|
import platform
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
import tokenize
|
||||||
|
|
||||||
DIFF_HUNK_REGEXP = re.compile(r'^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$')
|
DIFF_HUNK_REGEXP = re.compile(r'^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$')
|
||||||
|
|
||||||
|
|
@ -65,17 +66,26 @@ def normalize_path(path, parent=os.curdir):
|
||||||
return path.rstrip(separator + alternate_separator)
|
return path.rstrip(separator + alternate_separator)
|
||||||
|
|
||||||
|
|
||||||
|
def _stdin_get_value_py3():
|
||||||
|
stdin_value = sys.stdin.buffer.read()
|
||||||
|
fd = io.BytesIO(stdin_value)
|
||||||
|
try:
|
||||||
|
(coding, lines) = tokenize.detect_encoding(fd.readline)
|
||||||
|
return io.StringIO(stdin_value.decode(coding))
|
||||||
|
except (LookupError, SyntaxError, UnicodeError):
|
||||||
|
return io.StringIO(stdin_value.decode('utf-8'))
|
||||||
|
|
||||||
|
|
||||||
def stdin_get_value():
|
def stdin_get_value():
|
||||||
# type: () -> str
|
# type: () -> str
|
||||||
"""Get and cache it so plugins can use it."""
|
"""Get and cache it so plugins can use it."""
|
||||||
cached_value = getattr(stdin_get_value, 'cached_stdin', None)
|
cached_value = getattr(stdin_get_value, 'cached_stdin', None)
|
||||||
if cached_value is None:
|
if cached_value is None:
|
||||||
stdin_value = sys.stdin.read()
|
|
||||||
if sys.version_info < (3, 0):
|
if sys.version_info < (3, 0):
|
||||||
cached_type = io.BytesIO
|
stdin_value = io.BytesIO(sys.stdin.read())
|
||||||
else:
|
else:
|
||||||
cached_type = io.StringIO
|
stdin_value = _stdin_get_value_py3()
|
||||||
stdin_get_value.cached_stdin = cached_type(stdin_value)
|
stdin_get_value.cached_stdin = stdin_value
|
||||||
cached_value = stdin_get_value.cached_stdin
|
cached_value = stdin_get_value.cached_stdin
|
||||||
return cached_value.getvalue()
|
return cached_value.getvalue()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue