summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosmin Poieana <cmin@ropython.org>2014-12-05 22:21:43 +0200
committerCosmin Poieana <cmin@ropython.org>2014-12-05 22:21:43 +0200
commit4044ae94dd67276fda6350c1bd2a109556721a37 (patch)
tree7b0408855d979b86db81f5e43e00beef6cfe4219
parent6811bafce2fc79d1d52b612321a20a0e3a1e24b8 (diff)
downloadpylint-4044ae94dd67276fda6350c1bd2a109556721a37.tar.gz
Fix 2.x open mode check; Add more tests
-rw-r--r--checkers/stdlib.py11
-rw-r--r--test/functional/bad_open_mode.py18
-rw-r--r--test/functional/bad_open_mode.txt5
-rw-r--r--test/functional/bad_open_mode_py3.py9
-rw-r--r--test/functional/bad_open_mode_py3.txt2
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."