python的完整语法树,使编写重构代码成为一项现实任务

baron的Python项目详细描述


简介:Baron是一个完整的Python语法树(FST)库。与
ast<;https://en.wikipedia.org/wiki/abstract-syntax-tree>;``在创建过程中删除一些语法信息(如空的
行、注释、格式)相反,fst保留了所有内容并保证
操作fst-to-code(code-to-fst(source-code))==source-code。

roadmap
=======


当前的路线图根据需要是乏味的:

-`full python 3.7
兼容性<;https://baron.readthedocs.io/en/latest/grammar.html>;` `
-错误修复
-新的小功能(walker模式,可能是代码生成)和性能改进。


安装IP安装规范代码::python

把baron看作"python源代码的字节码",把redbaron看作是它上面的某种可用层。


section<;为什么这一点很重要>;` ` ` ` `.





相关文档
===


有关男爵的文档可在"阅读
docs<;http://baron.readthedocs.io/en/最新/>;` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `<




如果您想为实现新的语法元素实现新语法元素的话,这一点为什么这一点很重要>;<较新的python版本,
以下是文档具体步骤如下:
我们的工作!

财务支持
直到2018年底,这项发展一直是一项全方位的志愿者工作,主要由
`bram<;https://github.com/psycojoker>;```完成,但现在,为了达到下一个
级别并使这些项目达到您所期望的稳定性和质量,
我们需要您的支持。

uncollective<;https://opencollective.com/redbaron>;``每个
贡献都是有价值的,主要用于项目的稳定性和质量,同时也用于继续进行这些项目的研发。


我们的支持者
----

<;object type="image/svg+xml"
data="https://op"encollective.com/redbaron/tiers/i-like-this,-继续!SVG?avatarheight=36&;width=600">;

成为我们的第一个赞助商!<;object type="image/svg+xml"
data="https://opencollective.com/redbaron/tiers/long-term-sponsor.svg?avatarheight=36&;width=600">;


==
==


fst的用法乍一看可能不明显,所以让我们考虑一系列问题来说明它。假设您要编写一个程序,该程序将:

-重命名源文件中的变量…不与非变量的内容冲突(例如:字符串中的内容)
-内联函数/方法
-从一系列代码行中提取函数/方法
-将类拆分为多个类
-将文件拆分为多个模块
-将整个代码基从一个orm转换为另一个efactoring操作未由ide/rope实现
-实现smalltalk for python(整个
可以编辑方法的代码,而不仅仅是显示代码)


特殊情况和格式一直困扰着你。您可能最终会玩到
`ast.py<;http://docs.python.org/2/library/ast.html>;``,直到您意识到
它删除了太多信息,不适合那些
情况。你可能会因为太复杂而放弃这项任务,而且真的不值得这么做。您缺少了一个好的抽象,
将为您处理所有的代码结构和格式,因此
您可以集中精力完成您的任务。

fst试图成为这个抽象。有了它,您现在可以在树上工作了,树用其格式表示代码。此外,由于它是代码的精确表示,修改它并将其转换回字符串只会在修改了树的地方返回修改过的代码。

编写修改代码的代码现在是一个现实主义的任务,值得付出代价(我不是说一个简单的任务,而是一个现实的任务:它仍然是一个复杂的任务)。

other
----


生成和代码分析,而这两个
操作已经非常可行(例如,使用
`ast.py<;http://docs.python.org/2/library/ast.html>;``和模板
引擎)。


m的json(我所说的json是指python
可以转储到json中的列表和命令)最大限度地实现了
互操作性。

baron fst与python ast非常相似,有些修改是为了让人更直观,因为python ast是为cpython
解释器设计的。

由于直接使用json有点生涩,我将在其上构建一个看起来像beautifulsoup/jquery的


输入原始源代码。因此,它可以被认为是相当稳定的,但它还远远没有经过战斗测试。


而且将来可能只接受修改一次或两次,并明确指出如何迁移。它还没有在python3上测试过,但在大多数情况下都应该有效(显然,除了yield
from这样的新语法)。男爵**在python 2和python 3下运行**。


测试
=


在男爵目录下运行``py.test tests/``或``nosetests`。


community
==


channels=%23baron>;`

`irc.freenode.net python代码质量<;https://webchat.freenode.net/?《巨蟒守则》的质量和gt;` ` `.


《行为守则》作为"pycqa"成员,作为"pycqa"成员,作为"pycqa"成员,巴隆遵循其《行为守则》的《行为守则》和lt;http://meta.pycqa.org/en/最新/最新/最新/行为守则。html>;` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `===

`old发布
项目的博客文章。<;http://worldcomption.be/blog/2013/the-baron-project-part-1-what-and-why.html>;`
没有那么先进。




changelog
==


0.9(2019-02-01)
----


完整的Python3.7语法支持版本。

-中断更改:注释现在是{def,list,dict}参数的成员,用于展平数据结构
-添加对…在from import by bram中
-添加对返回注释的支持(由bram提供)
-添加对exec函数的支持(由bram提供)
-添加对变量注释的支持(由scottbelden提供,https://github.com/pycqa/baron/pull/145,由bram提供)
-添加对元组分配中*var表达式的支持(由bram提供)通过bram
-添加对来自https://github.com/pycqa/baron/pull/120的raise的支持,由odcinek添加对bram的额外工作
-添加对bram在类定义继承中使用arglist的支持
-通过https://github.com/pycqa/baron/pull/126/commits/91e839a228293698cc755a7f28afeca2669cb修复错误66E Kyleatmakrs

0.8(2018-10-29)
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————on/pull/92 by ibizaman
-处理损坏的缓存文件情况https://github.com/pycqa/baron/pull/76 by ryu2
-修复缩进标记https://github.com/pycqa/bar by ahuge
-修复不正确的标记化情况"d*e-1"。修复了85 https://github.com/pycqa/baron/pull/107 by boxed
-修复kyleatmakrs对组内的endl处理(从https://github.com/pycqa/baron/pull/126中提取)


python 3:
-python 3解析从https://github.com/pycqa/baron/pull/126中提取//github.com/pycqa/baron/pull/121 by odcinek
-支持矩阵运算符https://github.com/pycqa/baron/pull/117 by odcinek
-支持f字符串https://github.com/pycqa/baron/pull/110 by odcinek
-支持数字文本https://github.com/pycqa/baron/pull/111 by odcinek
-支持非本地语句https://github.com/pycqa/baron/pull/112 by odcinek
-仅支持关键字标记https://github.com/pycqa/baron/pull/108 by boxed
-支持来自语句https://github.com/pycqa/baron/pull/113 by odcinek的yield和bram的附加工作
-支持异步/等待状态ts https://github.com/pycqa/baron/pull/114由odcinek提供,附加工作由bram提供

<0.6.6(2017-06-12)
---------


-修复if和elif之间的默认注释/else断开
解析的情况,请参见https://github.com/pycqa/baron/issues/87
-大约35-40%通过duncf
https://github.com/pycqa/baron/pull/99

<0.6.5(2017-01-26)
----


-修复以前的回归修复被破坏


0.6.4(2017-01-14)
----


-修复回归,以防出现以下注释ow if/def/other的":"


0.6.3(2017-01-02)
----


-文件开头的组格式或前面带有注释的空格


0.6.2(2016-03-18)
----

-在生成解析器缓存文件时修复争用条件
-使所有用户都方便g错误继承自同一个baronerror类
-修复:在
节点呈现顺序


0.6.1(2015-01-31)
----


-修复:字符串在分组字符串令牌时有贪婪行为
它(对于字符串链),这最终会在
中创建不一致性,通常字符串分组的方式是
-修复:更好的数字解析处理,所有内容都还没有修复
-使所有(预期的)错误继承自同一个baronerror类
-修复:如果引用字符串未关闭

0.6(2014-12-11)
----


-fst结构修改:def_argument元组不再存在,所有参数现在都具有一致的结构:
*def_argument node name属性已重命名为target,如assign
*target attribute现在指向dict,而不是字符串
*old name->;string现在是target->;name_node
*def_argument_tuple现在是def_argument,target指向tuple
*此特定tuple将仅具有name、逗号和tuple成员(不再有名称的
def_argument)
-new node:long,before int和long合并,但这会导致问题

0.5(2014-11-10)
----

-将"funcdef"节点重命名为"def"节点更加直观。


0.4(2014-09-29)
----

-节点渲染顺序字典中的新渲染类型:字符串。这就消除了键可能指向dict或字符串的模糊性,从而强制第三方工具进行猜测。


0.3.1(2014-09-04)
----


-setup.py如果没有使用wheel,则无法工作,因为清单中没有包含更改日志文件
。在

0.3(2014-08-21)
---——

-路径成为一个简单的列表,并且更易于处理
-边界框允许您了解节点的最左和最右位置
请参见https://baron.readthedocs.io/en/latest/边界框
-redbaron被分类为支持python3
https://github.com/pycqa/baron/pull/51
-确保比键时是一个字符串,它的空值是一个空字符串,并且
不是none以避免破坏lib,lib使用内省来猜测
键的类型
-在fst中重命名键:"delimiteur"->;"delimiter"
-name_a s_name和dotted_as_name节点不再具有"as"键,因为它是无用的(可以从"目标"键)
-虚线名称节点不再存在,其存在是不合理的。在
import,from_import and decorator节点中,它已经从一个键到一个
dict(其中只有一个列表)被替换为一个简单的列表。
-dumps现在接受一个严格的布尔参数来检查转储时fst
的有效性,但是这并不是一个公共特性,而且将来可能会
更改api
/>-name_a s_name和dotted_as_name目标的空值现在是空字符串
,而不是无,因为这是字符串类型键
-boundingbox现在包括节点末尾的新行
-所有引发的异常都继承自公共基异常,以便于try/catch
构造
-position的左和右函数变为属性,因此
属性
-位置对象可以与其他位置对象或任何
iterables进行比较
-make_position和make_bounding_box函数将被删除,以利于
始终使用相应类的构造函数


0.2(2014-06-11)
----

-Baron现在提供了n https://baron.readthedocs.io
-feature:baron现在运行在python3中(但是*还没有实现完整的python3
语法),由pierre penninckx编写https://github.com/ibizaman
-feature:drop使用ast.py查找print_函数,这允许任何版本的python解析任何其他版本的python,pierre也可以解析任何其他版本的pythonx
-修复:注释最后被混淆为缩进级别的罕见错误
-2个新帮助程序:show_file和show戋node,请参见https://baron.readthedocs.io/en/latest/戋show file
和https://baron.readthedocs.io/en/latest/戋show node
-提供有关如何呈现fst节点的信息的新字典:
nodes rendering戋请参见https://baron.readthedocs.io/en/latest/呈现fst
-查找节点的新实用程序,请参见https://baron.readthedocs.io/en/latest/locate-a-node
-提供用于fst的模板的新泛型类请参见https://baron.readthedocs.io/en/latest/呈现fst

0.1.3(2014-04-13)
----

-set sugar syntaxic符号不是由转储程序处理的(显然没有人在pypi top上使用这个100)

0.1.2(2014-04-08)
----


-baron.dumps现在接受单个fst节点,它只处理
fst节点列表
-如果输入字符串中没有endl节点,则不在末尾添加endl节点他只是在制造更多的问题,而不是其他任何问题-修复https://github.com/pycqa/redbaron/issues/4
-修复baron无法解析"{1,}"(但"{1}"正在工作)的事实n正确



0.1(2014-03-22)
---------

-init

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在JSP中添加自定义隐式对象   java MasterMindResource泄漏?   不同的c#java结果加密   java为什么安卓 studio显示“constraintlayout中缺少约束”错误?   java Make Logback将日志打印到文件中   java如何在Google应用程序引擎中设置日期时间?   jeditorpane如何阻止java HTMLEditorKit自动关闭我的标记   返回到Activity onCreate()时,不会调用java函数   java为什么我在这个对象上得到一个NullPointerException?   在java中,如何使用包含数组的参数调用图形方法?   java如何在Play framework 2应用程序中存储Akka参与者列表?   ssh使用java将文件从一个solaris 9复制到另一个solaris 9   网络Java服务器正在等待客户端响应   java Spring mvc从formBackingObject()重定向到页面   java Spark:JavaRDD<Tuple2>到javapairdd<>   java如何动态调用基类中由字符串值指定的子类方法?