Mercurial > hg
changeset 20688:a61ed1c2d7a7
check-code: disallow use of dict(key=value) construction
{} literals are faster and more consistent across Python 2 and 3.
Whitelisted the one use of dict() that is using a generator expresion.
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Wed, 12 Mar 2014 13:31:27 -0400 |
parents | 7d4d04299927 |
children | 401f9b661a2d |
files | contrib/check-code.py hgext/largefiles/remotestore.py tests/test-check-code.t |
diffstat | 3 files changed, 8 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/contrib/check-code.py Wed Mar 12 13:29:29 2014 -0400 +++ b/contrib/check-code.py Wed Mar 12 13:31:27 2014 -0400 @@ -200,6 +200,8 @@ 'use "import foo.bar" on its own line instead.'), (r'(?<!def)\s+(cmp)\(', "cmp is not available in Python 3+"), (r'\breduce\s*\(.*', "reduce is not available in Python 3+"), + (r'dict\(.*=', 'dict() is different in Py2 and 3 and is slower than {}', + 'dict-from-generator'), (r'\.has_key\b', "dict.has_key is not available in Python 3+"), (r'\s<>\s', '<> operator is not available in Python 3+, use !='), (r'^\s*\t', "don't use tabs"),
--- a/hgext/largefiles/remotestore.py Wed Mar 12 13:29:29 2014 -0400 +++ b/hgext/largefiles/remotestore.py Wed Mar 12 13:31:27 2014 -0400 @@ -30,7 +30,8 @@ % (source, util.hidepassword(self.url))) def exists(self, hashes): - return dict((h, s == 0) for (h, s) in self._stat(hashes).iteritems()) + return dict((h, s == 0) for (h, s) in # dict-from-generator + self._stat(hashes).iteritems()) def sendfile(self, filename, hash): self.ui.debug('remotestore: sendfile(%s, %s)\n' % (filename, hash)) @@ -97,4 +98,3 @@ def batch(self): '''Support for remote batching.''' return remotebatch(self) -
--- a/tests/test-check-code.t Wed Mar 12 13:29:29 2014 -0400 +++ b/tests/test-check-code.t Wed Mar 12 13:31:27 2014 -0400 @@ -123,6 +123,7 @@ $ cat > python3-compat.py << EOF > foo <> bar > reduce(lambda a, b: a + b, [1, 2, 3, 4]) + > dict(key=value) > EOF $ "$check_code" python3-compat.py python3-compat.py:1: @@ -131,6 +132,9 @@ python3-compat.py:2: > reduce(lambda a, b: a + b, [1, 2, 3, 4]) reduce is not available in Python 3+ + python3-compat.py:3: + > dict(key=value) + dict() is different in Py2 and 3 and is slower than {} [1] $ cat > is-op.py <<EOF