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>('''|\"\"\"|(?<!')'(?!')|(?<!")"(?!")))