source: orange/orange/fixes/fix_orange_top_import.py @ 9348:f14c8405934e

Revision 9348:f14c8405934e, 1.9 KB checked in by markotoplak, 2 years ago (diff)

Fixed previous commit to copy the prefix, so that the comments do not get lost.

Line 
1from lib2to3 import fixer_base
2from lib2to3 import fixer_util
3from lib2to3.fixer_util import Name, attr_chain, syms, FromImport, token, Node, Leaf, BlankLine, Comma, touch_import, String
4
5from lib2to3.fixes import fix_imports
6
7"""
8Replaces explicit import to Orange submodules with "import Orange".
9"""
10
11def Import(name_leafs):
12
13    for leaf in name_leafs:
14        # Pull the leaves out of their old tree
15        leaf.remove()
16
17    def add_commas(leafs):
18        yield leafs[0]
19        for a in leafs[1:]:
20            yield Comma()
21            yield a
22
23    children = [Leaf(token.NAME, u'import'),
24                Node(syms.dotted_as_names, list(add_commas(name_leafs)))]
25    imp = Node(syms.import_name, children)
26    return imp
27
28class FixOrangeTopImport(fixer_base.BaseFix):
29
30    PATTERN = """import_name< 'import' imp=any >"""
31
32    run_order = 7
33
34    def transform(self, node, results):
35        imp = results['imp']
36
37        def t(imp):
38            new_contents = []
39       
40            def handle_one(n):
41                if n.type == token.NAME:
42                    if "Orange." not in n.value:
43                        new_contents.append(n)
44                    else:
45                        touch_import(None, "Orange", node)
46                else:
47                    new_contents.append(n)
48
49            if imp.type == syms.dotted_as_names:
50                for n in imp.children[::2]:
51                    handle_one(n)
52            else:
53                handle_one(imp)
54   
55            #copy prefix, so you do not lose comments
56            opref = node.prefix
57            if new_contents:
58                nn = Import(new_contents)
59                nn.prefix = opref
60            else:
61                nn = BlankLine()
62                if opref and opref[-1] in ["\n"]: #remove previous newline
63                    opref = opref[:-1]
64                nn.prefix = opref
65       
66            return nn
67
68        return t(imp)
Note: See TracBrowser for help on using the repository browser.