diff options
author | Cosmin Poieana <cmin@ropython.org> | 2014-12-05 22:21:43 +0200 |
---|---|---|
committer | Cosmin Poieana <cmin@ropython.org> | 2014-12-05 22:21:43 +0200 |
commit | 4044ae94dd67276fda6350c1bd2a109556721a37 (patch) | |
tree | 7b0408855d979b86db81f5e43e00beef6cfe4219 | |
parent | 6811bafce2fc79d1d52b612321a20a0e3a1e24b8 (diff) | |
download | pylint-4044ae94dd67276fda6350c1bd2a109556721a37.tar.gz |
Fix 2.x open mode check; Add more tests
-rw-r--r-- | checkers/stdlib.py | 11 | ||||
-rw-r--r-- | test/functional/bad_open_mode.py | 18 | ||||
-rw-r--r-- | test/functional/bad_open_mode.txt | 5 | ||||
-rw-r--r-- | test/functional/bad_open_mode_py3.py | 9 | ||||
-rw-r--r-- | test/functional/bad_open_mode_py3.txt | 2 |
5 files changed, 43 insertions, 2 deletions
diff --git a/checkers/stdlib.py b/checkers/stdlib.py index aafb970..6d4c89c 100644 --- a/checkers/stdlib.py +++ b/checkers/stdlib.py @@ -57,6 +57,8 @@ def _check_mode_str(mode): if writing or appending or creating and six.PY3: return False reading = True + if not six.PY3: + binary = True if text and binary: return False total = reading + writing + appending + (creating if six.PY3 else 0) @@ -64,8 +66,12 @@ def _check_mode_str(mode): return False if not (reading or writing or appending or creating and six.PY3): return False - # 2.x constraints + # other 2.x constraints if not six.PY3: + if "U" in mode: + mode = mode.replace("U", "") + if "r" not in mode: + mode = "r" + mode return mode[0] in ("r", "w", "a", "U") return True @@ -77,7 +83,8 @@ class StdlibChecker(BaseChecker): msgs = { 'W1501': ('"%s" is not a valid mode for open.', 'bad-open-mode', - 'Python supports: r, w, a modes with b, +, and U options. ' + 'Python supports: r, w, a[, x] modes with b, +, ' + 'and U (only with r) options. ' 'See http://docs.python.org/2/library/functions.html#open'), 'W1502': ('Using datetime.time in a boolean context.', 'boolean-datetime', diff --git a/test/functional/bad_open_mode.py b/test/functional/bad_open_mode.py index 8659850..6b749de 100644 --- a/test/functional/bad_open_mode.py +++ b/test/functional/bad_open_mode.py @@ -17,3 +17,21 @@ open('foo.bar', 'r+b') open('foo.bar', 'r+') open('foo.bar', 'w+') open('foo.bar', 'xb') # [bad-open-mode] +open('foo.bar', 'rx') # [bad-open-mode] +open('foo.bar', 'Ur') +open('foo.bar', 'rU') +open('foo.bar', 'rUb') +open('foo.bar', 'rUb+') +open('foo.bar', 'rU+b') +open('foo.bar', 'r+Ub') +open('foo.bar', '+rUb') # [bad-open-mode] +open('foo.bar', 'ab+') +open('foo.bar', 'a+b') +open('foo.bar', 'aU') # [bad-open-mode] +open('foo.bar', 'U+b') +open('foo.bar', '+Ub') +open('foo.bar', 'b+U') +open('foo.bar', 'Urb+') +open('foo.bar', 'Ur+b') +open('foo.bar', 'Ubr') # [bad-open-mode] +open('foo.bar', 'Ut') # [bad-open-mode] diff --git a/test/functional/bad_open_mode.txt b/test/functional/bad_open_mode.txt index 775c979..b022286 100644 --- a/test/functional/bad_open_mode.txt +++ b/test/functional/bad_open_mode.txt @@ -7,3 +7,8 @@ bad-open-mode:13::"""Uwz"" is not a valid mode for open." bad-open-mode:14::"""br"" is not a valid mode for open." bad-open-mode:15::"""wU"" is not a valid mode for open." bad-open-mode:19::"""xb"" is not a valid mode for open." +bad-open-mode:20::"""rx"" is not a valid mode for open." +bad-open-mode:27::"""+rUb"" is not a valid mode for open." +bad-open-mode:30::"""aU"" is not a valid mode for open." +bad-open-mode:36::"""Ubr"" is not a valid mode for open." +bad-open-mode:37::"""Ut"" is not a valid mode for open." diff --git a/test/functional/bad_open_mode_py3.py b/test/functional/bad_open_mode_py3.py index 7229eca..0812f5a 100644 --- a/test/functional/bad_open_mode_py3.py +++ b/test/functional/bad_open_mode_py3.py @@ -12,3 +12,12 @@ open(NAME, "rwx") # [bad-open-mode] open(NAME, "rr") # [bad-open-mode]
open(NAME, "+") # [bad-open-mode]
open(NAME, "xw") # [bad-open-mode]
+open(NAME, "ab+")
+open(NAME, "a+b")
+open(NAME, "+ab")
+open(NAME, "+rUb")
+open(NAME, "x+b")
+open(NAME, "Ua") # [bad-open-mode]
+open(NAME, "Ur++") # [bad-open-mode]
+open(NAME, "Ut")
+open(NAME, "Ubr")
diff --git a/test/functional/bad_open_mode_py3.txt b/test/functional/bad_open_mode_py3.txt index ba3443c..0be0ea8 100644 --- a/test/functional/bad_open_mode_py3.txt +++ b/test/functional/bad_open_mode_py3.txt @@ -2,3 +2,5 @@ bad-open-mode:11::"""rwx"" is not a valid mode for open." bad-open-mode:12::"""rr"" is not a valid mode for open."
bad-open-mode:13::"""+"" is not a valid mode for open."
bad-open-mode:14::"""xw"" is not a valid mode for open."
+bad-open-mode:20::"""Ua"" is not a valid mode for open."
+bad-open-mode:21::"""Ur++"" is not a valid mode for open."
|