Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • pycqa/pycodestyle
1 result
Show changes
Commits on Source (2)
  • Jon Dufresne's avatar
    Add W605 warning for invalid escape sequences in string literals · 13d2bd20
    Jon Dufresne authored
    Starting with Python 3.6, invalid escape sequences in string literals
    are now deprecated. In a future version of Python, invalid escape
    sequences will be a syntax error. While this deprecation produces a
    runtime warning, it only appears if warnings are enabled and the first
    time the Python source is compiled to byte code. By adding a check to
    pycodestyle, projects can take advantage of static analysis to catch and
    fix these future syntax errors.
    
    For more information on the deprecation, see the Python release notes,
    https://docs.python.org/3/whatsnew/3.6.html#deprecated-python-behavior
    
    > A backslash-character pair that is not a valid escape sequence now
    > generates a DeprecationWarning. Although this will eventually become a
    > SyntaxError, that will not be for several Python releases.
    
    Fixes #633
    13d2bd20
  • Ian Stapleton Cordasco's avatar
    Merge pull request #676 from jdufresne/invalid-escape · c7448b4f
    Ian Stapleton Cordasco authored
    Add W605 warning for invalid escape sequences in string literals
    c7448b4f
Changelog
=========
 
UNRELEASED
----------
New checks:
* Add W605 warning for invalid escape sequences in string literals
2.3.1 (2017-01-31)
------------------
 
Loading
Loading
Loading
Loading
@@ -413,6 +413,8 @@ This is the current list of error and warning codes:
+------------+----------------------------------------------------------------------+
| W604 | backticks are deprecated, use 'repr()' |
+------------+----------------------------------------------------------------------+
| W605 | invalid escape sequence '\x' |
+------------+----------------------------------------------------------------------+
 
 
**(*)** In the default configuration, the checks **E121**, **E123**, **E126**,
Loading
Loading
Loading
Loading
@@ -1388,6 +1388,57 @@ def python_3000_backticks(logical_line):
yield pos, "W604 backticks are deprecated, use 'repr()'"
 
 
@register_check
def python_3000_invalid_escape_sequence(logical_line, tokens):
r"""Invalid escape sequences are deprecated in Python 3.6.
Okay: regex = r'\.png$'
W605: regex = '\.png$'
"""
# https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals
valid = [
'\n',
'\\',
'\'',
'"',
'a',
'b',
'f',
'n',
'r',
't',
'v',
'0', '1', '2', '3', '4', '5', '6', '7',
'x',
# Escape sequences only recognized in string literals
'N',
'u',
'U',
]
for token_type, text, start, end, line in tokens:
if token_type == tokenize.STRING:
quote = text[-3:] if text[-3:] in ('"""', "'''") else text[-1]
# Extract string modifiers (e.g. u or r)
quote_pos = text.index(quote)
prefix = text[:quote_pos].lower()
start = quote_pos + len(quote)
string = text[start:-len(quote)]
if 'r' not in prefix:
pos = string.find('\\')
while pos >= 0:
pos += 1
if string[pos] not in valid:
yield (
pos,
"W605 invalid escape sequence '\\%s'" %
string[pos],
)
pos = string.find('\\', pos + 1)
##############################################################################
# Helper functions
##############################################################################
Loading
Loading
Loading
Loading
@@ -358,10 +358,10 @@ def qualify_by_address(self, cr, uid, ids, context=None,
""" This gets called by the web server """
 
 
_ipv4_re = re.compile('^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.'
'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.'
'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.'
'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$')
_ipv4_re = re.compile(r'^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.'
r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.'
r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.'
r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$')
 
 
fct("""
Loading
Loading
Loading
Loading
@@ -13,3 +13,19 @@ if x <> 0:
x = 0
#: W604
val = `1 + 2`
#: W605
regex = '\.png$'
#: W605
regex = '''
\.png$
'''
#: Okay
regex = r'\.png$'
regex = '\\.png$'
regex = r'''
\.png$
'''
regex = r'''
\\.png$
'''
s = '\\'