Package: redbaron
Introduction============[![Build Status](https://travis-ci.org/PyCQA/redbaron.svg?branch=master)](https://travis-ci.org/PyCQA/redbaron) [![Latest Version](https://img.shields.io/pypi/v/redbaron.svg)](https://pypi.python.org/pypi/redbaron/) [![Supported Python versions](https://img.shields.io/pypi/pyversions/redbaron.svg)](https://pypi.python.org/pypi/redbaron/) [![Development Status](https://img.shields.io/pypi/status/redbaron.svg)](https://pypi.python.org/pypi/redbaron/) [![Wheel Status](https://img.shields.io/pypi/wheel/redbaron.svg)](https://pypi.python.org/pypi/redbaron/) [![Download format](https://img.shields.io/pypi/format/redbaron.svg)](https://pypi.python.org/pypi/redbaron/) [![License](https://img.shields.io/pypi/l/redbaron.svg)](https://pypi.python.org/pypi/redbaron/)[![Backers on Open Collective](https://opencollective.com/redbaron/backers/badge.svg)](#backers)[![Sponsors on Open Collective](https://opencollective.com/redbaron/sponsors/badge.svg)](#sponsors)RedBaron is a python library and tool powerful enough to be used into IPythonsolely that intent to make the process of **writing code that modify sourcecode** as easy and as simple as possible. That include writing customrefactoring, generic refactoring, tools, IDE or directly modifying you sourcecode into IPython with a higher and more powerful abstraction than theadvanced texts modification tools that you find in advanced text editors andIDE.RedBaron guaranteed you that **it will only modify your code where you ask himto**. To achieve this, it is based on [Baron](https://github.com/PyCQA/baron)a lossless [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree) forPython that guarantees the operation <code>ast_to_code(code_to_ast(source_code)) == source_code</code>.(Baron's AST is called an FST, a Full Syntax Tree).RedBaron API and feel is heavily inspired by BeautifulSoup. It tries to besimple and intuitive and that once you've get the basics principles, you aregood without reading the doc for 80% of your operations.**For now, RedBaron can be considered in alpha, the core is quite stable but itis not battle tested yet and is still a bit rough.** Feedback and contributionare very welcome.The public documented API on the other side is guaranteed to beretro-compatible and won't break until 2.0 (if breaking is needed at thatpoint).There might be the only exception that if you directly call specific nodesconstructors with FST that this API change, but this is not documented andsimply horribly unpracticable, so I'm expecting no one to do that.Support=======RedBaron is support python python 2 and up to python 3.7 grammar.Roadmap=======Current roadmap is as boring as needed:* bug fixes* new small features (walker pattern, maybe code generation) and performance improvement.Installation============pip install redbaron[pygments]Or if you don't want to have syntax highlight in your shell or don't need it:pip install redbaronRunning tests=============pip install pytestpy.test testsCommunity=========You can reach us on [irc.freenode.net#baron](https://webchat.freenode.net/?channels=%23baron) or [irc.freenode.net##python-code-quality](https://webchat.freenode.net/?channels=%23%23python-code-quality).Financial support=================Baron and RedBaron are a very advanced piece of engineering that requires a lotof time of concentration to work on. Until the end of 2018, the developmenthas been a full volunteer work mostly done by [Bram](https://github.com/psycojoker),but now, to reach the next level and bring those projects to the stability andquality you expect, we need your support.You can join our contributors and sponsors on our transparent[OpenCollective](https://opencollective.com/redbaron), every contribution willcount and will be mainly used to work on the projects stability and quality butalso on continuing, on the side, the R&D side of those projects.## BackersThank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/redbaron#backer)]<a href="https://opencollective.com/redbaron#backers" target="_blank"><img src="https://opencollective.com/redbaron/backers.svg?width=890"></a>## SponsorsSupport this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/redbaron#sponsor)]<a href="https://opencollective.com/redbaron/sponsor/0/website" target="_blank"><img src="https://opencollective.com/redbaron/sponsor/0/avatar.svg"></a><a href="https://opencollective.com/redbaron/sponsor/1/website" target="_blank"><img src="https://opencollective.com/redbaron/sponsor/1/avatar.svg"></a><a href="https://opencollective.com/redbaron/sponsor/2/website" target="_blank"><img src="https://opencollective.com/redbaron/sponsor/2/avatar.svg"></a><a href="https://opencollective.com/redbaron/sponsor/3/website" target="_blank"><img src="https://opencollective.com/redbaron/sponsor/3/avatar.svg"></a><a href="https://opencollective.com/redbaron/sponsor/4/website" target="_blank"><img src="https://opencollective.com/redbaron/sponsor/4/avatar.svg"></a><a href="https://opencollective.com/redbaron/sponsor/5/website" target="_blank"><img src="https://opencollective.com/redbaron/sponsor/5/avatar.svg"></a><a href="https://opencollective.com/redbaron/sponsor/6/website" target="_blank"><img src="https://opencollective.com/redbaron/sponsor/6/avatar.svg"></a><a href="https://opencollective.com/redbaron/sponsor/7/website" target="_blank"><img src="https://opencollective.com/redbaron/sponsor/7/avatar.svg"></a><a href="https://opencollective.com/redbaron/sponsor/8/website" target="_blank"><img src="https://opencollective.com/redbaron/sponsor/8/avatar.svg"></a><a href="https://opencollective.com/redbaron/sponsor/9/website" target="_blank"><img src="https://opencollective.com/redbaron/sponsor/9/avatar.svg"></a>## ContributorsThis project exists thanks to all the people who contribute.<a href="https://github.com/PyCQA/redbaron/contributors"><img src="https://opencollective.com/redbaron/contributors.svg?width=890&button=false" /></a>Code of Conduct===============As a member of [PyCQA](https://github.com/PyCQA), RedBaron follows its [Code of Conduct](http://meta.pycqa.org/en/latest/code-of-conduct.html).Links=====**RedBaron is fully documented, be sure to check the tutorial and documentation**.* [Tutorial](https://redbaron.readthedocs.io/en/latest/tuto.html)* [Documentation](https://redbaron.readthedocs.io/en/latest/)* [Baron](https://github.com/PyCQA/baron)* IRC chat: [irc.freenode.net#baron](https://webchat.freenode.net/?channels=%23baron)Changelog=========0.9.2 (2019-03-17)------------------- fix a situation in .help() where some code where colorized twice by Hanaasagi https://github.com/PyCQA/redbaron/pull/1820.9.1 (2019-02-01)------------------- fix .names() and variations that didn't handle the case where there was "()" on FromImport nodes0.9 (2019-02-01)----------------- full python 3.7 syntax support- BREAKING CHANGE: annotations are now member of {Def,List,Dict}Argument to flatten the data structure, TypedNameNode doesn't exist anymore- add support for return annotation by bram- add support for variable annotation https://github.com/PyCQA/redbaron/pull/177 by scottbelden and additional work by bram- add support for raise from by bram0.8 (2018-10-29)----------------- add support to typed function arguments https://github.com/PyCQA/redbaron/pull/168 Scott Belden and additional work by bram- add support to set async attributes to with/for nodes, was missing in previous release0.7 (2018-08-21)----------------- fix to_python() when strings are indented by stripping whitespace before evaluating by duncf https://github.com/PyCQA/redbaron/pull/140Python 3 support (based on work in Baron):- support ellipsis- support matrix operator- support f-strings- support numeric literals- support nonlocal statement- support keyword only markers- support yield from statement- support async/await statements0.6.3 (2017-01-02)------------------ fix help() after append- fix _synchronise() for base_nodes to avoid recursion in __repr__ function if code run not in the shell- add at method0.6.2 (2016-10-03)----------------- fix some old call to log() weren't lazy, that could cause a crash in some situations by an infinite recursive call and also reduce performances- fix in _iter_in_rendering_order method to avoid bug in edge cases (issue #107)0.6.1 (2016-03-28)----------------- fix setup.py, package weren't pushed on pypi since splitting of redbaron.pyinto multiple files.0.6 (2016-03-28)----------------This release is guaranteed to have a retro-compatible public documented APIfrom now on until maybe 2.0.There might be the only exception that if you directly call specific nodesconstructors with FST that this API change, but this is not documented andsimply horribly unpracticable, so I'm expecting no one to do that.From now on the focus will be on moving to a stable 1.0 meaning: bugs fixes andAPI additions for missing needed features and no more big modifications, thiswill be for other releases, the workload is already big enough.- BIG improvement on the proxy list merging algorithm, it is not perfect yet (comments aren't handled yet) but it's really a big move forward- possible retrocompatibility breaking change: from now on the node.find("name") to node.name shortcut ONLY works with possible nodes identifiers. For example node.i_dont_exist_as_an_identifier will raise AttributeError- new helper method .to_python that wrap ast.literal_eval on compatible nodes https://redbaron.readthedocs.io/en/latest/other.html#to-python- breaking: IntNode no longer return an int on .value but a .string instead, use .to_python to have an evaluated version- fix node.decrease_indentation (that was simply not working)- fix code_block_node.value was broken on node with no parent- add string representation for Path object- now redbaron Path() class can be compared directly to baron pathswithout using to_baron_path() helper.- fix by novocaine: 'function' was used as a function type detector instead of 'def'- add getitem() method with same api on NodeList and ProxyList- fix: inconsistencies when inserting lines around code blocks- inserting a blank lines inserts effectively a \n in a LineProxyList- new helper methods: .next_recursive and .previous_recursive https://redbaron.readthedocs.io/en/latest/other.html- fix: doc is tested in CI now, it shouldn't break anymore- more rendering test for python3, it shouldn't break anymore- pygments is now an optional dependency, "pip install redbaron" won't install it, "pip install redbaron[pygments"] will- new node.next_intuitive and node.previous_intuitive methods for situations where .next/previous doesn't behave the way the user expect it https://redbaron.readthedocs.io/en/latest/other.html#next-intuitive-previous-intuitive0.5.1 (2015-03-11)------------------- fix whitespace duplication when using .insert()- DecoratorProxyList of the last method of a function wasn't handling correctly the indentation of its last endl token0.5 (2015-01-31)----------------- fix index handling in get_absolute_bounding_box_of_attribute method ina LineProxyList- pretty rendering of RedBaron repr in ipython notebook using _repr_html_, see:https://cloud.githubusercontent.com/assets/41827/5731132/65ff4c92-9b80-11e4-977c-0faebbf63415.png- fix: RedBaron repr was crashing in bpython and in ipython notebook. The newbehavior should be way more stable and never crash.- new helpers .names, .modules, .full_path_modules for from_import node https://redbaron.readthedocs.io/en/latest/other.html#index-on-parent-raw- add a node.index_on_parent_raw and make node.index_on_parent works has itshould be intuitively according to the proxy list api https://redbaron.readthedocs.io/en/latest/other.html#index-on-parent-raw- new helper methods: .insert_before and .insert_after https://redbaron.readthedocs.io/en/latest/other.html#insert-before-insert-after- fix: some white space bugs in the merging algorithm of line proxy- fix: on_attribute and parent were correctly set on newly added elements tothe root node0.4 (2014-12-11)----------------- compatibility with baron upstream (removal of def_argument_node anduniformisation of def_arguments structure)- fix: long wasn't supported in redbaron (due to a bug in baron)0.3 (2014-11-12)----------------- proxy lists, major improvement in the management of list of things- .append_value is no more since it is useless now due to proxy lists- .index has been renamed to .index_on_parent to be more coherent0.2 (2014-09-23)----------------- for EVERY NODES in RedBaron, the automagic behavior when passing a string tomodify an attribute has been done, this is HUGE improvementhttps://redbaron.readthedocs.io/en/latest/modifying.html#full-documentations- it's now possible to use regex, globs, list/tuple and lambda (callable) in .find and.find_all, see https://redbaron.readthedocs.io/en/latest/querying.html#advanced-querying- new method on node: .replace() to replace in place a nodehttps://redbaron.readthedocs.io/en/latest/other.html#replace- .map .filter and .apply are now documented https://redbaron.readthedocs.io/en/latest/other.html#map-filter-apply- .edit() new helper method to launch a text editor on the selected node andreplace the node with the modified code https://redbaron.readthedocs.io/en/latest/other.html#edit- .root node attribute (property) that return the root node of the tree in which thenode is stored https://redbaron.readthedocs.io/en/latest/other.html#root- .index node attribute (property) that returns the index at which the node isstore if it's store in a nodelist, None otherwise https://redbaron.readthedocs.io/en/latest/other.html#index- setitem (a[x] = b) on nodelist now works as expected (accepting string, fstnode and redbaron node)- new method to handle indentation: .increase_indentation and .decrease_indentation https://redbaron.readthedocs.io/en/latest/other.html#increase-indentation-and-decrease-indentation- various small bugfix- we have one new contributor \o/ https://github.com/ze42- to_node has been move to a class method of Node: Node.from_fst- pretty print of nodes when using redbaron in a script0.1 (2014-06-13)----------------- First release