Mercurial > hg
comparison contrib/check-code.py @ 13026:53391819f195
check-code: catch Python 'is' comparing number or string literals
The Python 'is' operator compares object identity, so it should
definitely not be applied to string or number literals, which Python
implementations are free to represent with a temporary object.
This should catch the following kinds of bogus expressions (examples):
x is 'foo' x is not 'foo'
x is "bar" x is not "bar"
x is 42 x is not 42
x is -36 x is not -36
As originally proposed by Martin Geisler, amended with catching
negative numbers.
author | Adrian Buehlmann <adrian@cadifra.com> |
---|---|
date | Sun, 21 Nov 2010 11:52:27 +0100 |
parents | 8b167ee8242f |
children | 3da456d0c885 |
comparison
equal
deleted
inserted
replaced
13024:da69a1597285 | 13026:53391819f195 |
---|---|
147 (r'[^+=*!<>&| -](\s=|=\s)[^= ]', | 147 (r'[^+=*!<>&| -](\s=|=\s)[^= ]', |
148 "wrong whitespace around ="), | 148 "wrong whitespace around ="), |
149 (r'raise Exception', "don't raise generic exceptions"), | 149 (r'raise Exception', "don't raise generic exceptions"), |
150 (r'ui\.(status|progress|write|note|warn)\([\'\"]x', | 150 (r'ui\.(status|progress|write|note|warn)\([\'\"]x', |
151 "warning: unwrapped ui message"), | 151 "warning: unwrapped ui message"), |
152 (r' is\s+(not\s+)?["\'0-9-]', "object comparison with literal"), | |
152 ] | 153 ] |
153 | 154 |
154 pyfilters = [ | 155 pyfilters = [ |
155 (r"""(?msx)(?P<comment>\#.*?$)| | 156 (r"""(?msx)(?P<comment>\#.*?$)| |
156 ((?P<quote>('''|\"\"\"|(?<!')'(?!')|(?<!")"(?!"))) | 157 ((?P<quote>('''|\"\"\"|(?<!')'(?!')|(?<!")"(?!"))) |