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 == "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 != "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 _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 _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 == "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 _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_list(self, string, parent, on_attribute): 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 == "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 == "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 _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)