def _string_to_node_list(self, string, parent, on_attribute): if on_attribute == "targets": fst = baron.parse("from a import %s" % string)[0]["targets"] return NodeList.from_fst(fst, parent=parent, on_attribute=on_attribute) if on_attribute == "value": fst = baron.parse("from %s import s" % string)[0]["value"] return NodeList.from_fst(fst, parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node_list(self, string, parent, on_attribute): if on_attribute == "value": if string: self.formatting = [{"type": "space", "value": " "}] fst = baron.parse(("print %s" if not self.destination else "print >>a, %s") % string)[0]["value"] return NodeList.from_fst(fst, parent=parent, on_attribute=on_attribute) else: self.formatting = [] if not string and not self.destination else [{"type": "space", "value": " "}] return NodeList() else: raise Exception("Unhandled case")
def test_comma_proxy_list_getslice(): red = RedBaron("[1, 2, 3, 4, 5, 6]") comma_proxy_list = red[0].value result = comma_proxy_list[1:2] expected_result = CommaProxyList(NodeList([comma_proxy_list[1]])) assert len(result) == len(expected_result) assert result[0] == expected_result[0]
def _string_to_node_list(self, string, parent, on_attribute): if on_attribute != "value": return super(IfelseblockNode, self)._string_to_node_list(string, parent=parent, on_attribute=on_attribute) string = string.rstrip() string += "\n" if self.next and self.on_attribute == "root": string += "\n\n" elif self.next: string += "\n" clean_string = re.sub("^ *\n", "", string) if "\n" in string else string indentation = len(re.search("^ *", clean_string).group()) if indentation: string = "\n".join(map(lambda x: x[indentation:], string.split("\n"))) result = NodeList.from_fst(baron.parse(string)[0]["value"], parent=parent, on_attribute=on_attribute) if self.indentation: result.increase_indentation(len(self.indentation)) if self.next: result[-1].value.node_list[-1].indent = self.indentation return result
def test_dot_proxy_list_getslice(): red = RedBaron("a.b.c.d") result = red[0].value[1:3] expected_result = DotProxyList(NodeList([red[0].value[1], red[0].value[2]])) assert len(result) == len(expected_result) assert result[0] == expected_result[0]
def _string_to_node_list(self, string, parent, on_attribute): if on_attribute == "generators": fst = baron.parse("{x %s}" % string)[0]["generators"] return NodeList.from_fst(fst, parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node_list(self, string, parent, on_attribute): if on_attribute != "excepts": return super(TryNode, self)._string_to_node_list(string, parent=parent, on_attribute=on_attribute) clean_string = re.sub("^ *\n", "", string) if "\n" in string else string indentation = len(re.search("^ *", clean_string).group()) if indentation: string = "\n".join(map(lambda x: x[indentation:], string.split("\n"))) string = string.rstrip() string += "\n" if self.next and self.on_attribute == "root": string += "\n\n" elif self.next: string += "\n" result = NodeList.from_fst(baron.parse("try:\n pass\n%sfinally:\n pass" % string)[0]["excepts"], parent=parent, on_attribute=on_attribute) if self.indentation: result.increase_indentation(len(self.indentation)) if self._get_last_member_to_clean().type != "except": # assume that this is an endl node, this might break result[-1].value.node_list[-1].indent = self.indentation elif self.next: result[-1].value.node_list[-1].indent = self.indentation return result
def _string_to_node_list(self, string, parent, on_attribute): if on_attribute == "arguments": self.first_formatting = [{"type": "space", "value": " "}] if string else [] fst = baron.parse("lambda %s: x" % string)[0]["arguments"] return NodeList.from_fst(fst, parent=parent, on_attribute=on_attribute) else: return super(DefNode, self)._string_to_node_list(string, parent, on_attribute)
def test_line_proxy_list_getslice(): red = RedBaron( "while a:\n pass\n caramba\n compote\n plop\n z\n") result = red[0].value[1:3] expected_result = LineProxyList( NodeList([red[0].value[1], red[0].value[2]])) assert len(result) == len(expected_result) assert result[0] == expected_result[0]
def _string_to_node_list(self, string, parent, on_attribute): fst = baron.parse("(%s)" % string)[0]["value"] # I assume that I've got an AssociativeParenthesisNode here instead of a tuple # because string is only one single element if not isinstance(fst, list): fst = baron.parse("(%s,)" % string)[0]["value"] return NodeList.from_fst(fst, parent=parent, on_attribute=on_attribute)
def _string_to_node_list(self, string, parent, on_attribute): if on_attribute == "arguments": fst = baron.parse("def a(%s): pass" % string)[0]["arguments"] return NodeList.from_fst(fst, parent=parent, on_attribute=on_attribute) elif on_attribute == "decorators": return self.parse_decorators(string, parent=parent, on_attribute=on_attribute) else: return super(DefNode, self)._string_to_node_list(string, parent, on_attribute)
def _string_to_node_list(self, string, parent, on_attribute): if on_attribute == "decorators": return self.parse_decorators(string, parent=parent, on_attribute=on_attribute) elif on_attribute == "inherit_from": if string: self.parenthesis = True else: self.parenthesis = False return NodeList.from_fst(baron.parse("class a(%s): pass" % string)[0]["inherit_from"], parent=parent, on_attribute=on_attribute) else: return super(ClassNode, self)._string_to_node_list(string, parent, on_attribute)
def _search_file(filename, pattern, options): """Search a given filename.""" local = locals() exec('def _search(root):\n return {}'.format(pattern), globals(), local) _search = local['_search'] cache_file = _cache_filename(filename) if not options['no_cache'] and os.path.exists(cache_file): with open(cache_file) as f: root = RedBaron(NodeList.from_fst(json.load(f))) for node in root: node.parent = root root.node_list.parent = root else: root = _load_and_save(filename, cache_file, no_cache=options['no_cache']) results = _search(root) output = [] seen = set() if results: output.append(filename) for result in results: # Get the correct number of parents for _ in range(options['parents']): result = result.parent if result.parent else result # Ensure that we don't print the same code twice if result in seen: continue else: seen.add(result) # format the output output.append( format_node(result, no_color=options['no_color'], no_linenos=options['no_linenos'])) output.append(u'--') output.append(u'') return (filename, u'\n'.join(output))
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "destination": if string and not self.value: self.formatting = [{"type": "space", "value": " "}] return Node.from_fst(baron.parse("print >>%s" % string)[0]["destination"], parent=parent, on_attribute=on_attribute) elif string and self.value: self.formatting = [{"type": "space", "value": " "}] result = Node.from_fst(baron.parse("print >>%s" % string)[0]["destination"], parent=parent, on_attribute=on_attribute) if len(self.value.node_list) and not self.value.node_list[0].type == "comma": self.value = NodeList([Node.from_fst({"type": "comma", "second_formatting": [{"type": "space", "value": " "}], "first_formatting": []}, parent=parent, on_attribute=on_attribute)]) + self.value return result elif self.value.node_list and self.value.node_list[0].type == "comma": self.formatting = [{"type": "space", "value": " "}] self.value = self.value.node_list[1:] else: self.formatting = [] else: raise Exception("Unhandled case")
def _string_to_node_list(self, string, parent, on_attribute): if on_attribute == "value": return NodeList.from_fst(baron.parse("(%s)" % string)[0]["value"]["value"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node_list(self, string, parent, on_attribute): if on_attribute == "contexts": return NodeList.from_fst(baron.parse("with %s: pass" % string)[0]["contexts"], parent=parent, on_attribute=on_attribute) else: return super(WithNode, self)._string_to_node_list(string, parent, on_attribute)
def _string_to_node_list(self, string, parent, on_attribute): if on_attribute == "ifs": return NodeList.from_fst(baron.parse("[x for x in x %s]" % string)[0]["generators"][0]["ifs"], parent=parent, on_attribute=on_attribute) else: return super(ClassNode, self)._string_to_node_list(string, parent, on_attribute)
def test_root_as_line_proxy_list_getslice(): red = RedBaron("\n\na\nb\nc\n") result = red[1:3] expected_result = LineProxyList(NodeList([red[1], red[2]])) assert len(result) == len(expected_result) assert result[0] == expected_result[0]
def _string_to_node_list(self, string, parent, on_attribute): fst = baron.parse("{%s}" % string)[0]["value"] return NodeList.from_fst(fst, parent=parent, on_attribute=on_attribute)