summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Stapleton Cordasco <graffatcolmingov@gmail.com>2018-11-22 07:36:39 -0600
committerGitHub <noreply@github.com>2018-11-22 07:36:39 -0600
commitd288c073eb3ff268bab619961253ec41f3b97201 (patch)
treec10b7d716fa2fb483a2173c8c0a8fe98dac1389c
parentb49f5e75be2e942f264f75acc6a7713c593c5615 (diff)
parente5a057982bfd68cd825eeea6bd8dce5bc0759e9f (diff)
downloadpep8-d288c073eb3ff268bab619961253ec41f3b97201.tar.gz
Merge pull request #818 from mgedmin/accurate-multiline-position
Make W605 point to the invalid sequence
-rwxr-xr-xpycodestyle.py9
-rw-r--r--testsuite/W60.py13
2 files changed, 17 insertions, 5 deletions
diff --git a/pycodestyle.py b/pycodestyle.py
index 8b608b0..f0ae6dc 100755
--- a/pycodestyle.py
+++ b/pycodestyle.py
@@ -1522,7 +1522,7 @@ def python_3000_invalid_escape_sequence(logical_line, tokens):
for token_type, text, start, end, line in tokens:
if token_type == tokenize.STRING:
- orig_start = start
+ start_line, start_col = start
quote = text[-3:] if text[-3:] in ('"""', "'''") else text[-1]
# Extract string modifiers (e.g. u or r)
quote_pos = text.index(quote)
@@ -1535,8 +1535,13 @@ def python_3000_invalid_escape_sequence(logical_line, tokens):
while pos >= 0:
pos += 1
if string[pos] not in valid:
+ line = start_line + string.count('\n', 0, pos)
+ if line == start_line:
+ col = start_col + len(prefix) + len(quote) + pos
+ else:
+ col = pos - string.rfind('\n', 0, pos) - 1
yield (
- orig_start,
+ (line, col - 1),
"W605 invalid escape sequence '\\%s'" %
string[pos],
)
diff --git a/testsuite/W60.py b/testsuite/W60.py
index 1b03099..4cbaad9 100644
--- a/testsuite/W60.py
+++ b/testsuite/W60.py
@@ -13,16 +13,23 @@ if x <> 0:
x = 0
#: W604
val = `1 + 2`
-#: W605:1:9
+#: W605:1:10
regex = '\.png$'
-#: W605:1:9
+#: W605:2:1
regex = '''
\.png$
'''
-#: W605:2:5
+#: W605:2:6
f(
'\_'
)
+#: W605:4:6
+"""
+multi-line
+literal
+with \_ somewhere
+in the middle
+"""
#: Okay
regex = r'\.png$'
regex = '\\.png$'