[PATCH 5 of 6] import-checker: handle line continuation characters

Simon Farnsworth simonfar at fb.com
Wed Apr 13 07:35:35 EDT 2016


On 12/04/2016 22:54, timeless wrote:
> # HG changeset patch
> # User timeless <timeless at mozdev.org>
> # Date 1460495587 0
> #      Tue Apr 12 21:13:07 2016 +0000
> # Node ID 5ff1ae440687032163d88924da1b5c55394fb581
> # Parent  4420d78ddf3ceb7cd4438627aacb6a68bd703a88
> import-checker: handle line continuation characters
>
> diff --git a/contrib/import-checker.py b/contrib/import-checker.py
> --- a/contrib/import-checker.py
> +++ b/contrib/import-checker.py
> @@ -586,12 +586,18 @@
>       ...   '  $ cat > foo.py <<EOF',
>       ...   '  > from __future__ import print_function',
>       ...   '  > EOF',
> +    ...   'comment',
> +    ...   '  >>> from __future__ import print_function\\\\',
> +    ...   '      , absolute_import',
> +    ...   '  ',
>       ... ]
>       >>> test("example.t", lines)
>       example[2] doctest.py 2
>       "from __future__ import print_function\\n' multiline\\nstring'\\n"
>       example[7] foo.py 7
>       'from __future__ import print_function\\n'
> +    example[11] doctest.py 11
> +    'from __future__ import print_function\\\\\\n, absolute_import\\n'
>       """
>       inlinepython = 0
>       shpython = 0
> @@ -599,6 +605,7 @@
>       prefix = 6
>       t = ''
>       n = 0
> +    linecont = 0

Here, you initialize linecont as a number...

>       for l in src:
>           n += 1
>           if not l.endswith(b'\n'):
> @@ -611,9 +618,11 @@
>                   inlinepython = n
>                   t = 'doctest.py'
>               script.append(l[prefix:])
> +            linecont = l.strip('\n').endswith('\\')

Then here, it becomes a boolean, and remains a boolean for the rest of 
the file. Could you initialize it to False?

>               continue
>           if l.startswith(b'  ... '): # python inlines
>               script.append(l[prefix:])
> +            linecont = l.strip('\n').endswith('\\')
>               continue
>           cat = re.search("\$ \s*cat\s*>\s*(\S+.py)\s*<<\s*EOF", l)
>           if cat:
> @@ -622,6 +631,7 @@
>                          (modname, inlinepython)), t, inlinepython
>                   script = []
>                   inlinepython = 0
> +                linecont = False
>               shpython = n
>               t = cat.group(1)
>               continue
> @@ -631,14 +641,20 @@
>                          (modname, shpython)), t, shpython
>                   script = []
>                   shpython = 0
> +                linecont = False
>               else:
>                   script.append(l[4:])
>               continue
> -        if inlinepython and l == b'  \n':
> +        if inlinepython and l.strip() == b'':
>               yield ''.join(script), ("%s[%d]" %
>                      (modname, inlinepython)), t, inlinepython
>               script = []
>               inlinepython = 0
> +            linecont = False
> +            continue
> +        if linecont:
> +            script.append(l[prefix:])
> +            linecont = l.strip('\n').endswith('\\')
>               continue
>
>   def sources(f, modname):
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://urldefense.proofpoint.com/v2/url?u=https-3A__www.mercurial-2Dscm.org_mailman_listinfo_mercurial-2Ddevel&d=CwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=mEgSWILcY4c4W3zjApBQLA&m=pD1GPBSv0KRo59PfkNbbT_2JSGZBk8meVEe0rZqRaAo&s=ylzybaSxJGmhFlX1c7nv2ouN0HPJym84hz6wIgeOgDI&e=
>

-- 
Simon Farnsworth


More information about the Mercurial-devel mailing list