Mercurial > hg
view tests/test-check-code.t @ 20655:37f3be9d1541
doc: gendoc.py creates valid output for option descriptions with newlines
gendoc.py did not handle the hanging indentation for descriptions. Work around
this by joining all in one single line (same as in minirst since previous
patch).
This problem occurred when translations of option lines were very long. Do not
bother the translators with this detail.
On a long option description, the translator continued on a new line as usual.
gendoc.py created invalid rst syntax like this:
-o, --option
Description line 1
description line 2
The new output is:
-o, --option
Description line 1 description line 2
The lines could theoretically become very long, but line breaking is handled
when generating the final documentation.
author | Simon Heimberg <simohe@besonet.ch> |
---|---|
date | Thu, 20 Feb 2014 09:17:22 +0100 |
parents | 22154ec6fb8b |
children | a61ed1c2d7a7 |
line wrap: on
line source
$ cat > correct.py <<EOF > def toto(arg1, arg2): > del arg2 > return (5 + 6, 9) > EOF $ cat > wrong.py <<EOF > def toto( arg1, arg2): > del(arg2) > return ( 5+6, 9) > EOF $ cat > quote.py <<EOF > # 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 > non-py24.py <<EOF > # Using builtins that does not exist in Python 2.4 > if any(): > x = all() > y = format(x) > # next(generator) is new in 2.6 > z = next(x) > # but generator.next() is okay > x.next() > # and we can make our own next > def next(stuff): > pass > > # Do not complain about our own definition > def any(x): > pass > > # try/except/finally block does not exist in Python 2.4 > try: > pass > except StandardError, inst: > pass > finally: > pass > > # nested try/finally+try/except is allowed > try: > try: > pass > except StandardError, inst: > pass > finally: > pass > > # yield inside a try/finally block is not allowed in Python 2.4 > try: > pass > yield 1 > finally: > pass > try: > yield > pass > finally: > pass > > EOF $ cat > classstyle.py <<EOF > class newstyle_class(object): > pass > > class oldstyle_class: > pass > > class empty(): > pass > > no_class = 1: > pass > EOF $ check_code="$TESTDIR"/../contrib/check-code.py $ "$check_code" ./wrong.py ./correct.py ./quote.py ./non-py24.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 ./non-py24.py:2: > if any(): any/all/format not available in Python 2.4 ./non-py24.py:3: > x = all() any/all/format not available in Python 2.4 ./non-py24.py:4: > y = format(x) any/all/format not available in Python 2.4 ./non-py24.py:6: > z = next(x) no next(foo) in Python 2.4 and 2.5, use foo.next() instead ./non-py24.py:18: > try: no try/except/finally in Python 2.4 ./non-py24.py:35: > try: no yield inside try/finally in Python 2.4 ./non-py24.py:40: > try: no yield inside try/finally in Python 2.4 ./classstyle.py:4: > class oldstyle_class: old-style class, use class foo(object) ./classstyle.py:7: > class empty(): class foo() not available in Python 2.4, use class foo(object) [1] $ cat > python3-compat.py << EOF > foo <> bar > reduce(lambda a, b: a + b, [1, 2, 3, 4]) > 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+ [1] $ cat > is-op.py <<EOF > # 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] $ cat > for-nolineno.py <<EOF > except: > EOF $ "$check_code" for-nolineno.py --nolineno for-nolineno.py:0: > except: naked except clause [1] $ cat > warning.t <<EOF > $ 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 <<EOF > 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 <<EOF > """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]