diff -r bf86e3e87123 -r 3203dfe341f9 tests/test-check-code.t --- a/tests/test-check-code.t Wed Jan 06 11:01:55 2016 -0800 +++ b/tests/test-check-code.t Sun Jan 17 21:40:21 2016 -0600 @@ -1,234 +1,15 @@ - $ cat > correct.py < def toto(arg1, arg2): - > del arg2 - > return (5 + 6, 9) - > EOF - $ cat > wrong.py < def toto( arg1, arg2): - > del(arg2) - > return ( 5+6, 9) - > EOF - $ cat > quote.py < # let's use quote in comments - > (''' ( 4x5 ) - > but """\\''' and finally''', - > """let's fool checkpatch""", '1+2', - > '"""', 42+1, """and - > ( 4-1 ) """, "( 1+1 )\" and ") - > a, '\\\\\\\\', "\\\\\\" x-2", "c-1" - > EOF - $ cat > classstyle.py < class newstyle_class(object): - > pass - > - > class oldstyle_class: - > pass - > - > class empty(): - > pass - > - > no_class = 1: - > pass - > EOF +#require test-repo + $ check_code="$TESTDIR"/../contrib/check-code.py - $ "$check_code" ./wrong.py ./correct.py ./quote.py ./classstyle.py - ./wrong.py:1: - > def toto( arg1, arg2): - gratuitous whitespace in () or [] - ./wrong.py:2: - > del(arg2) - Python keyword is not a function - ./wrong.py:3: - > return ( 5+6, 9) - gratuitous whitespace in () or [] - missing whitespace in expression - ./quote.py:5: - > '"""', 42+1, """and - missing whitespace in expression - ./classstyle.py:4: - > class oldstyle_class: - old-style class, use class foo(object) - ./classstyle.py:7: - > class empty(): - class foo() creates old style object, use class foo(object) - [1] - $ 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: - > foo <> bar - <> operator is not available in Python 3+, use != - 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] + $ cd "$TESTDIR"/.. - $ cat > is-op.py < # is-operator comparing number or string literal - > x = None - > y = x is 'foo' - > y = x is "foo" - > y = x is 5346 - > y = x is -6 - > y = x is not 'foo' - > y = x is not "foo" - > y = x is not 5346 - > y = x is not -6 - > EOF - - $ "$check_code" ./is-op.py - ./is-op.py:3: - > y = x is 'foo' - object comparison with literal - ./is-op.py:4: - > y = x is "foo" - object comparison with literal - ./is-op.py:5: - > y = x is 5346 - object comparison with literal - ./is-op.py:6: - > y = x is -6 - object comparison with literal - ./is-op.py:7: - > y = x is not 'foo' - object comparison with literal - ./is-op.py:8: - > y = x is not "foo" - object comparison with literal - ./is-op.py:9: - > y = x is not 5346 - object comparison with literal - ./is-op.py:10: - > y = x is not -6 - object comparison with literal - [1] +New errors are not allowed. Warnings are strongly discouraged. +(The writing "no-che?k-code" is for not skipping this file when checking.) - $ cat > for-nolineno.py < except: - > EOF - $ "$check_code" for-nolineno.py --nolineno - for-nolineno.py:0: - > except: - naked except clause - [1] - - $ cat > warning.t < $ function warnonly { - > > } - > $ diff -N aaa - > $ function onwarn {} - > EOF - $ "$check_code" warning.t - $ "$check_code" --warn warning.t - warning.t:1: - > $ function warnonly { - warning: don't use 'function', use old style - warning.t:3: - > $ diff -N aaa - warning: don't use 'diff -N' - warning.t:4: - > $ function onwarn {} - warning: don't use 'function', use old style - [1] - $ cat > raise-format.py < raise SomeException, message - > # this next line is okay - > raise SomeException(arg1, arg2) - > EOF - $ "$check_code" not-existing.py raise-format.py - Skipping*not-existing.py* (glob) - raise-format.py:1: - > raise SomeException, message - don't use old-style two-argument raise, use Exception(message) - [1] - - $ cat > rst.py < """problematic rst text - > - > .. note:: - > wrong - > """ - > - > ''' - > - > .. note:: - > - > valid - > - > new text - > - > .. note:: - > - > also valid - > ''' - > - > """mixed - > - > .. note:: - > - > good - > - > .. note:: - > plus bad - > """ - > EOF - $ $check_code -w rst.py - rst.py:3: - > .. note:: - warning: add two newlines after '.. note::' - rst.py:26: - > .. note:: - warning: add two newlines after '.. note::' - [1] - - $ cat > ./map-inside-gettext.py < print _("map inside gettext %s" % v) - > - > print _("concatenating " " by " " space %s" % v) - > print _("concatenating " + " by " + " '+' %s" % v) - > - > print _("mapping operation in different line %s" - > % v) - > - > print _( - > "leading spaces inside of '(' %s" % v) - > EOF - $ "$check_code" ./map-inside-gettext.py - ./map-inside-gettext.py:1: - > print _("map inside gettext %s" % v) - don't use % inside _() - ./map-inside-gettext.py:3: - > print _("concatenating " " by " " space %s" % v) - don't use % inside _() - ./map-inside-gettext.py:4: - > print _("concatenating " + " by " + " '+' %s" % v) - don't use % inside _() - ./map-inside-gettext.py:6: - > print _("mapping operation in different line %s" - don't use % inside _() - ./map-inside-gettext.py:9: - > print _( - don't use % inside _() - [1] - -web templates - - $ mkdir -p mercurial/templates - $ cat > mercurial/templates/example.tmpl < {desc} - > {desc|escape} - > {desc|firstline} - > {desc|websub} - > EOF - - $ "$check_code" --warnings mercurial/templates/example.tmpl - mercurial/templates/example.tmpl:2: - > {desc|escape} - warning: follow desc keyword with either firstline or websub - [1] + $ hg locate | sed 's-\\-/-g' | + > xargs "$check_code" --warnings --per-file=0 || false + Skipping hgext/zeroconf/Zeroconf.py it has no-che?k-code (glob) + Skipping i18n/polib.py it has no-che?k-code (glob) + Skipping mercurial/httpclient/__init__.py it has no-che?k-code (glob) + Skipping mercurial/httpclient/_readers.py it has no-che?k-code (glob) + Skipping mercurial/httpclient/socketutil.py it has no-che?k-code (glob)