被动Python语法检查器
项目描述
Frosted是pyflakes(最初由Phil Frost创建)的一个分支,旨在从外部公众获取更开放的贡献,一个更小、更易于维护的代码库,以及更好的Python检查器。它目前干净地支持Python 2.6 - 3.4,使用pies(https://github.com/timothycrosley/pies)来实现,而不需要丑陋的 hacks 和/或 py2to3。
安装Frosted
安装Frosted非常简单
pip install frosted --upgrade
或者如果你喜欢
easy_install frosted
使用Frosted
从命令行
frosted mypythonfile.py mypythonfile2.py
或者递归地
frosted -r .
这等价于
frosted **/*.py
或者从stdin读取
frosted -
在Python内部
import frosted frosted.api.check_path("pythonfile.py")
讨论改进和获取帮助
使用以下任何一种方法都会迅速解决您可能遇到的所有Frosted问题,或对您希望讨论的实现细节快速响应。- 邮件列表 - 讨论大型架构变更或可能影响Frosted以外的Python代码质量项目的最佳场所。- GitHub问题 - 报告错误、请求具体定义的功能以及请求一般帮助的最佳场所。- timothy.crosley@gmail.com - 欢迎您通过电子邮件向我提出任何您认为不会受益于社区广泛参与的问题或关注点。
是什么让Frosted比pyflakes更好?
以下改进已经集成到Frosted中
将主分支pyflakes上长期未处理(且被忽略)的几个改进和修复已经集成。
大量代码已被重构和简化,Frosted旨在比pyflakes更快、更轻量。
Frosted增加了配置要检查哪些文件和忽略哪些错误的能力。在我看来,这是一个必备功能。
Frosted实现了.editorconfig配置标准。这意味着你只需要一个配置文件即可为isort、Frosted以及任何可能使用你的项目的代码编辑器进行配置。
Frosted使用更合理、自解释和标准的终端界面。对于pyflakes,没有任何参数的默认操作是不做任何事情(等待stdin),而Frosted会显示错误和帮助信息。
Frosted已从Java风格的unittest切换到更Pythonic的pytest(我承认这非常主观)。
Frosted之所以更好,首要原因是因为你!或者更确切地说,是因为整个Python社区。我将快速响应任何提交给我的pull请求、建议或错误报告。
冰封。当然。
而且从现在开始只会变得更好!
配置Frosted
如果你发现默认的Frosted设置不适合你的项目,Frosted提供了几种调整行为的方法。
要为单个用户配置Frosted,创建一个~/.frosted.cfg文件
[settings] skip=file3.py,file4.py ignore_frosted_errors=E101,E205,E300 run_doctests=True
skip - 要跳过的文件或目录名的逗号分隔列表。名称必须与整个路径、文件名或其父目录之一完全匹配才能跳过。
ignore_frosted_errors - 要忽略的Frosted错误代码的逗号分隔列表。你可以在下一节中查看所有错误代码的定义。
此外,你只需在项目的根目录下放置一个.frosted.cfg文件,即可指定项目级别的配置。Frosted将向上查找多达25个目录,从它运行的位置开始,以找到特定于项目的配置。
你可以通过使用命令行参数或通过将kwargs传递给任何公开的api检查方法来覆盖这些设置。
除此之外,Frosted支持基于setup.cfg的配置。你只需在你的项目的setup.cfg文件中添加一个[frosted]部分,并设置任何所需的设置。
最后,Frosted支持使用以下标准语法定义的editorconfig文件: http://editorconfig.org/
这意味着你可以在*.py部分下的任何标准Frosted配置参数放在一个.editorconfig文件中,它们将被尊重。
Frosted错误代码
Frosted在代码中识别以下错误。你可以使用‘ignore_frosted_errors’设置来指定Frosted要忽略的任何错误。如果你指定系列错误代码(例如:E100),则该系列中的所有错误都将被忽略。
I100系列 - 一般信息 - I101:通用
E100系列 - 导入错误 - E101:UnusedImport - 注意,为了将其作为API暴露或在下方的exec语句中使用,导入某些内容但不使用它是常见做法。Frosted通过默认在init.py中忽略此错误来规避这种情况 - E102:ImportShadowedByLoopVar - E103:ImportStarUsed
E200系列 - 函数/方法定义和调用错误 - E201:MultipleValuesForArgument - E202:TooFewArguments - E203:TooManyArguments - E204:UnexpectedArgument - E205:NeedKwOnlyArgument - E206:DuplicateArgument - E207:LateFutureImport - E208:ReturnWithArgsInsideGenerator
E300系列 - 变量/定义使用错误 - E301:RedefinedWhileUnused - E302:RedefinedInListComp - E303:UndefinedName - E304:UndefinedExport - E305:UndefinedLocal - E306:Redefined - E307:UnusedVariable
E400系列 - 语法错误 - E401: DoctestSyntaxError - E402: PythonSyntaxError
W100系列 - 异常警告 - W101: 裸except - 注意一个常见的裸except可以使用并且应该被忽略的情况是在处理数据库事务回滚时。在这种情况下,警告可以安全地忽略。
W200系列 - 处理警告 - W201: 文件跳过
在决定是否包含错误进行报告时,Frosted使用99%方法作为衡量标准。如果同意99%的情况下(或更多)一个模式发生时是一个错误,Frosted将对此进行报告,如果不是,则不会将其添加到Frosted项目中。
Frosted代码API
Frosted通过简单的API暴露了从其他Python应用程序或插件中检查Python代码的功能。
frosted.api.check (codeString, filename, reporter=modReporter.Default, **setting_overrides) 检查由codeString提供的Python源代码中的未冻结碎片。
frosted.api.check_path (filename, reporter=modReporter.Default, **setting_overrides) 检查指定的路径,打印出任何检测到的警告。
frosted.check_recursive (paths, reporter=modReporter.Default, **setting_overrides) 递归检查paths中定义的所有源文件。
此外,您还可以以API方式使用命令行工具,通过将“-”作为文件名传递,然后将文件内容发送到stdin。
文本编辑器集成
与文本编辑器和工具的集成是项目的优先事项。因此,任何添加集成支持或链接到第三方项目的拉取请求都将被热情地接受。
当前已知支持的文本编辑器列表
vim - 通过syntastic添加了支持: https://github.com/scrooloose/syntastic
为Frosted做贡献
我们首选的贡献形式是拉取请求和问题报告。尽管如此,我们不会拒绝货币贡献。如果您希望使用flattr等工具进行此类贡献,请确保您flattr @bitglue,因为他是pyflakes的原始创建者,没有他的贡献,Frosted将无法实现。
为什么分叉pyflakes?
Pyflakes是一个伟大的项目,并介绍了一种快速检查Python编码错误的方法。我非常感谢原始创建者。然而,我认为在过去的一年里,它已经变得停滞不前,没有明确的愿景,也没有人愿意真正负责这个项目。虽然我知道这绝不是故意的,但关键故障仍然开放,尽管有完全和有效的拉取请求开放,维护者甚至没有给予任何认可。因为我真诚地相信开源项目需要不断改进(提前和频繁发布),我决定启动这个项目,并尽可能多地从Python社区获取反馈。我希望我们可以一起构建一个更棒的代码检查器!
注意:pyflakes的维护者已被添加为Frosted的贡献者。
为什么选择Frosted?
Frosted是对原始pyflakes创建者Phil Frost的致敬。
感谢并希望您喜欢新的Frosted pyflakes!
~Timothy Crosley
项目详情
下载文件
下载适用于您平台的项目。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源代码分发
构建发行版
frosted-1.4.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d1e5d2b43a064b33c289b9a986a7425fd9a36bed8f519ca430ac7a0915e32b51 |
|
MD5 | 4cd86bb0c7f073a725dc22d7557108ad |
|
BLAKE2b-256 | a6e177a42b44155accca186cb0fcef17405555ab856d809091c897a4b9bd91f7 |
frosted-1.4.1-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c6a30ad502ea373f6fe4cafbcd896ece66948406b04365d14a3eb764cc529b07 |
|
MD5 | e88ffb87abe17221ded860136d66f309 |
|
BLAKE2b-256 | d73c48c2b09255139d97b21d87b18eeee81ee8319ab3e01ab2bd0fa702ddece3 |