Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

1from __future__ import unicode_literals, print_function
2
3from inspect import getsource
4import io
5import os
6from os.path import dirname as dirn
7import sys
8
9print('WARNING: Lazy loading extractors is an experimental feature that may not always work', file=sys.stderr)
10
11sys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))
12
13lazy_extractors_filename = sys.argv[1]
14if os.path.exists(lazy_extractors_filename):
…lines 15–109 unchanged (95 lines)

After

1from __future__ import unicode_literals, print_function
2
3from inspect import getsource
4import io
5import os
6from os.path import dirname as dirn
7import sys
8
9from youtube_dl.compat import compat_register_utf8
10
11compat_register_utf8()
12
13print('WARNING: Lazy loading extractors is an experimental feature that may not always work', file=sys.stderr)
14
15sys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))
16
17lazy_extractors_filename = sys.argv[1]
…lines 18–113 unchanged (96 lines)

Before

module
future_import_statement
from "from"
__future__ "__future__"
import "import"
dotted_name
identifier "unicode_literals"
, ","
dotted_name
identifier "print_function"
import_from_statement
from "from"
dotted_name
identifier "inspect"
import "import"
dotted_name
identifier "getsource"
import_statement
import "import"
dotted_name
identifier "io"
import_statement
import "import"
dotted_name
identifier "os"
import_from_statement
from "from"
dotted_name
identifier "os"
. "."
identifier "path"
import "import"
aliased_import
dotted_name
identifier "dirname"
as "as"
identifier "dirn"
import_statement
import "import"
dotted_name
identifier "sys"
expression_statement
call
identifier "print"
argument_list
( "("
string
string_start "'"
string_content "WARNING: Lazy loading extractors is an experimental feature "...
string_end "'"
, ","
keyword_argument
identifier "file"
= "="
attribute
identifier "sys"
. "."
identifier "stderr"
) ")"
expression_statement (+39 nodes collapsed)
expression_statement
assignment
identifier "lazy_extractors_filename"
= "="
subscript
attribute
identifier "sys"
. "."
identifier "argv"
[ "["
integer "1"
] "]"
if_statement (+26 nodes collapsed)
comment "# Py2: may be confused by leftover lazy_extractors.pyc"
try_statement (+27 nodes collapsed)
import_from_statement
from "from"
dotted_name
identifier "youtube_dl"
. "."
identifier "extractor"
import "import"
dotted_name
identifier "_ALL_CLASSES"
import_from_statement
from "from"
dotted_name
identifier "youtube_dl"
. "."
identifier "extractor"
. "."
identifier "common"
import "import"
dotted_name
identifier "InfoExtractor"
, ","
dotted_name
identifier "SearchInfoExtractor"
with_statement (+36 nodes collapsed)
expression_statement (+48 nodes collapsed)
expression_statement
assignment
identifier "ie_template"
= "="
string
string_start "'''"
string_content "\nclass {name}({bases}):\n _VALID_URL = {valid_url!r}\n _"...
string_end "'''"
expression_statement
assignment
identifier "make_valid_template"
= "="
string
string_start "'''"
string_content "\n @classmethod\n def _make_valid_url(cls):\n retu"...
string_end "'''"
function_definition (+47 nodes collapsed)
function_definition (+167 nodes collapsed)
comment "# find the correct sorting and add the required base classes"...
comment "# can be correctly created"
expression_statement
assignment
identifier "classes"
= "="
subscript
identifier "_ALL_CLASSES"
[ "["
slice
: ":"
unary_operator
- "-"
integer "1"
] "]"
expression_statement
assignment
identifier "ordered_cls"
= "="
list
[ "["
] "]"
while_statement (+159 nodes collapsed)
expression_statement
call
attribute
identifier "ordered_cls"
. "."
identifier "append"
argument_list
( "("
subscript
identifier "_ALL_CLASSES"
[ "["
unary_operator
- "-"
integer "1"
] "]"
) ")"
expression_statement
assignment
identifier "names"
= "="
list
[ "["
] "]"
for_statement (+55 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+24 nodes collapsed)
with_statement (+42 nodes collapsed)

After

module
future_import_statement
from "from"
__future__ "__future__"
import "import"
dotted_name
identifier "unicode_literals"
, ","
dotted_name
identifier "print_function"
import_from_statement
from "from"
dotted_name
identifier "inspect"
import "import"
dotted_name
identifier "getsource"
import_statement
import "import"
dotted_name
identifier "io"
import_statement
import "import"
dotted_name
identifier "os"
import_from_statement
from "from"
dotted_name
identifier "os"
. "."
identifier "path"
import "import"
aliased_import
dotted_name
identifier "dirname"
as "as"
identifier "dirn"
import_statement
import "import"
dotted_name
identifier "sys"
import_from_statement
from "from"
dotted_name
identifier "youtube_dl"
. "."
identifier "compat"
import "import"
dotted_name
identifier "compat_register_utf8"
expression_statement
call
identifier "compat_register_utf8"
argument_list
( "("
) ")"
expression_statement
call
identifier "print"
argument_list
( "("
string
string_start "'"
string_content "WARNING: Lazy loading extractors is an experimental feature "...
string_end "'"
, ","
keyword_argument
identifier "file"
= "="
attribute
identifier "sys"
. "."
identifier "stderr"
) ")"
expression_statement (+39 nodes collapsed)
expression_statement
assignment
identifier "lazy_extractors_filename"
= "="
subscript
attribute
identifier "sys"
. "."
identifier "argv"
[ "["
integer "1"
] "]"
if_statement (+26 nodes collapsed)
comment "# Py2: may be confused by leftover lazy_extractors.pyc"
try_statement (+27 nodes collapsed)
import_from_statement
from "from"
dotted_name
identifier "youtube_dl"
. "."
identifier "extractor"
import "import"
dotted_name
identifier "_ALL_CLASSES"
import_from_statement
from "from"
dotted_name
identifier "youtube_dl"
. "."
identifier "extractor"
. "."
identifier "common"
import "import"
dotted_name
identifier "InfoExtractor"
, ","
dotted_name
identifier "SearchInfoExtractor"
with_statement (+36 nodes collapsed)
expression_statement (+48 nodes collapsed)
expression_statement
assignment
identifier "ie_template"
= "="
string
string_start "'''"
string_content "\nclass {name}({bases}):\n _VALID_URL = {valid_url!r}\n _"...
string_end "'''"
expression_statement
assignment
identifier "make_valid_template"
= "="
string
string_start "'''"
string_content "\n @classmethod\n def _make_valid_url(cls):\n retu"...
string_end "'''"
function_definition (+47 nodes collapsed)
function_definition (+167 nodes collapsed)
comment "# find the correct sorting and add the required base classes"...
comment "# can be correctly created"
expression_statement
assignment
identifier "classes"
= "="
subscript
identifier "_ALL_CLASSES"
[ "["
slice
: ":"
unary_operator
- "-"
integer "1"
] "]"
expression_statement
assignment
identifier "ordered_cls"
= "="
list
[ "["
] "]"
while_statement (+159 nodes collapsed)
expression_statement
call
attribute
identifier "ordered_cls"
. "."
identifier "append"
argument_list
( "("
subscript
identifier "_ALL_CLASSES"
[ "["
unary_operator
- "-"
integer "1"
] "]"
) ")"
expression_statement
assignment
identifier "names"
= "="
list
[ "["
] "]"
for_statement (+55 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+24 nodes collapsed)
with_statement (+42 nodes collapsed)