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)
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)
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="")