Пример #1
0
    def visit(self, node: Node):
        if node.get_lineno() > self.lineno:
            if node.parent is None:
                node.remove()
                return
            for i, x in enumerate(node.parent.children):
                if x == node:
                    for y in node.parent.children[i + 1 :]:
                        if node != y:
                            y.parent = None
                    node.parent.children = node.parent.children[: i + 1]
                    node.remove()
                    return

        self.seen.add(node.get_lineno())
        super().visit(node)
Пример #2
0
    def _describe_classdef(self, node: Node) -> None:
        prefix = node.prefix.rstrip(" ").lstrip("\n") + find_indentation(node)
        next_sibling = node.next_sibling
        if next_sibling is not None:
            self.upper_bound = min(next_sibling.get_lineno(), self.upper_bound)

        node = node.clone()
        node.prefix = prefix

        if self.lower_bounds and self.lower_bounds[-1] < node.get_lineno():
            self.describe_skipping()

        max_limit = node.get_lineno() + self.n
        v = CuttingNodeVisitor(max_limit)
        v.visit(node)
        self.lower_bounds.extend(sorted(list(v.seen)))
        print(node)
Пример #3
0
    def _describe(self, node: Node) -> None:
        n = self.n
        filename = self.filename
        seen = self.lower_bounds

        lineno = node.get_lineno()
        start_lineno = max(1, lineno - n)
        end_lineno = min(len(linecache.getlines(filename)) + 1, lineno + n + 1)
        skip_check_finished = False
        for lineno in range(start_lineno, end_lineno):
            if seen and lineno <= seen[-1]:
                continue
            if lineno >= self.upper_bound:
                continue
            seen.append(lineno)
            line = linecache.getline(filename, lineno)
            if not line.strip():
                continue
            if not skip_check_finished:
                if self.lower_bounds and self.lower_bounds[-1] < node.get_lineno():
                    self.describe_skipping()
                skip_check_finished = True
            print(line, end="")