oitnb绕过了一些black的问题
项目描述
代码格式化器Black有许多优点,但设计上不够灵活。如果您不能接受它的现状,oitnb可能是您的替代品。
简而言之,在Black的功能之上,oitnb
默认使用单引号,但允许您为字符串选择双引号(三引号和空字符串使用双引号)。选项--double。
允许您运行meld以进行格式化后代码的可视比较,这样您可以轻松地在适当的位置插入一些# fmt: off。选项--meld。
从您可能已经在项目中使用的文件(例如__init__.py)中以您已知的格式(Python)读取您的配置。
在您的配置目录(XDG)中具有跨项目的基本默认值。例如,这就是您的行长度所在的地方,它与您的编辑器宽度、屏幕上三个终端的宽度或您的多文件差异工具的宽度仔细同步。
使显示图标可选。它们可能最初不会在您的终端中显示,或者不适合您的专业环境。
支持与在开始使用oitnb之前提交到项目的版本进行diff
正在进行的工作/计划中的事情
函数左括号后开始的引号多行字符串。选项 --multi-line-unwrap。如果你写了很多带有 YAML 的文件内部、缩进格式化的字符串,例如 YAML 库的开发者,那么这绝对是必须的。
控制多元素列表的展开,每行一个
在这里填写你的愿望(我们总是可以将其作为一个配置选项或命令行选项)
保持行尾注释的对齐
详细信息
代码库
oitnb 代码直接来源于 Black,并使用了许多文件。
它可以无问题地运行 Black 的大多数测试,但有一小部分错误,这些都应该与文件内容和文件命名中硬编码对 Black 的引用有关。
额外选项、默认值和配置
额外选项: --double、--meld、--multi-line-unwrap
oitnb 默认在字符串周围使用单引号,如果你想使用 Black 的引用方式,请使用 --double 选项。
--meld 与 --diff 的工作方式类似,但它会在原始文件和格式化版本上调用 meld。 meld 允许你直接编辑左侧(原始)文件,这样你就可以在那个点上决定在行周围插入一些 # fmt: off / # fmt: on 注释,或者完全放弃使用格式化工具。
指定 --multi-line-unwrap 将在格式化后的行上运行一个丑陋的后处理程序,撤销
x = yaml.load(""" a: 1 b: 2 """)
到
x = yaml.load( """ a: 1 b: 2 """ )
程序以一个空的配置字典开始,并尝试从用户配置目录中的 oitnb.pon 读取基本配置,使用 appdirs.user_config_dir。这遵循了 Linux 上的 XDG 标准(即 ~/.config/oitnb),如果没有设置环境变量以更改默认值。该文件应包含有效的 Python 字典定义(使用 {} 或 dict()),并从这个 dict 中获取 default 的值(使用安全评估)以更新配置字典
dict( default=dict(line_length=666, double=True), )
之后,将搜索树状目录结构,直到找到 .git、.hg 或具有模块级别定义 _package_data 的 __init__.py 文件。这应该是一个字典,并从该字典中获取键 oitnb 的值以更新配置
_package_data = dict( oitnb=dict(line_length=88), )
oitnb 的 __init__.py 中有更多信息,这些信息(不使用 import)由其他工具程序使用和程序化更新
_package_data = dict( full_package_name='oitnb', version_info=(0, 1, 1), __version__='0.1.1', author='Anthon van der Neut', author_email='a.van.der.neut@ruamel.eu', description="oitnb works around some of black's issues", entry_points='oitnb=oitnb:main', license='MIT', since=2018, status=alpha, package_data={"_oitnb_lib2to3": ["*.txt"]}, install_requires=['click>=6.5', 'attrs>=17.4.0', 'appdirs', 'toml>=0.9.4'], test_suite="_test.test_oitnb", tox=dict( env='36', ), oitnb=dict(line_length=88), ) version_info = _package_data['version_info'] __version__ = _package_data['__version__']
在此基础上,任何命令行选项都用于覆盖配置,然后程序初始化。
选项中的连字符(-)在内部被下划线(_)替换,你可以在 dict(op_tion=True) 中使用该形式作为键。使用连字符时,你需要使用 {“op-tion”: True}
目前没有计算机级的默认设置,如 /etc/xdg/oitnb(现在还有人在共享他们的开发机器吗?)。
查找与 oitnb 之前的修订版本的更改
如果你有一个具有修订历史的项目,并且将 oitnb 应用于你的源代码,那么在 oitnb 之前和之后版本之间的比较将会很混乱。
如果您应用的 oitnb 没有内部错误,并且您不需要频繁地应用 # fmt: no,那么您可以使用以下方法通过 meld 获取更有用的视觉差异。
oitnb 的安装包含一个最小化工具 omeld,将其添加到您的 mercurials .hgrc 文件作为外部差异工具。
[extensions] hgext.extdiff = [extdiff] cmd.omeld =
现在您可以执行 hg omeld -r-4 -r-1 或 hg omeld -r-4(假设修订版 -4 是在应用 oitnb 之前),然后 omeld 将在两个临时创建的源树上运行 oitnbt,在将它们传递给 meld 之前。这意味着例如,与修订版两侧的源代码更改有关的所有更改(例如引号、从 u''' 字符串中删除多余的 u 的等),重新包装等。将保持相同。因此,真实代码更改将显示在 meld 展示的差异中。
如果 omeld 工具接收到一个文件或目录作为参数,而这个文件或目录不在 /tmp 或 /var/tmp 下,它将不会在该文件/目录上运行 oitnb。如果您将源代码树保持在 /var/tmp 下,那么您很不幸:您的 python 会被格式化。
上述方法:检出两个(旧)修订版本树,使用 ``oitnb`` 格式化代码并运行差异 是通用的。 meld 和 mercurial 只是我在其中使用的工具,并且可以轻松提供一个工作设置。
对于 git,根据我的经验,要理解多个外部差异工具稍微困难一些,您可以这样做
alias gomeld='git difftool --extcmd=omeld -y'
并使用该别名。
git 似乎比 hg 有一些优化,如果当前检出的文件版本与请求的回滚之一相同,它将不会创建临时版本(即使您必须比较多个文件)。因此,版本 0.1.4 之前不应使用上述别名,因为这些可能会导致源树中的文件更新(这不会破坏任何东西,但不是您所期望的)。
您可能会遇到 Black 的问题
到处都是双引号
如果您使用单引号作为字符串,那么您并不孤单: “人们真的很喜欢双引号。我不知道为什么。。PEP8 关于字符串引号有以下内容
In Python, single-quoted strings and double-quoted strings are the same. This PEP does not make a recommendation for this. Pick a rule and stick to it.
在 Google 上搜索 坚持到底:继续或限制自己做一些或使用特定的事情。
这不仅是要限制自己的一致性,也是长期继续下去。
当第二行可以做到的时候就不展开
如果您有一串短字符串可以放在一行上,并且添加一个字符串使其无法再放在一行上,
你
不
想
这样
突然
所有
的
元素
都
在
新
行
上
。在这些情况下,只需将添加的溢出内容放在新行上就足够了。
有趣的人物
消息中的 Unicode 可能无法在您使用的字体中显示(在我使用 Gnome 终端中的 Inconsolata 时就无法显示)。你知道这些代码点应该显示什么吗?如果您不知道,您确定在另一台计算机上使用 Black 时,当支付您工作的人从旁边看着您时,您不会感到尴尬(或者如果他们是代码点 U+5350 或 U+0FD5,您可能会遇到麻烦)?
你可能暂时会觉得看到睡觉的脸(U+1F634)、短蛋糕(U+1F370)、碰撞符号(U+1F4A5)、破碎的心(U+1F494)、闪烁(U+2728)很有趣。但尤其是在使用小字体以避免过多滚动的情况下,细节会变得模糊且不有趣。
配置性小
Black的配置性是通过在另一个标记格式中插入线条实现的,这不会为现有的另一个配置文件频谱添加任何内容,只会使你的项目目录杂乱无章。
项目详情
下载文件
下载适合您平台的应用文件。如果您不确定该选择哪一个,请了解更多关于安装包的信息。
源分发
构建分发
oitnb-0.2.2.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | bca7ecf659805c03c58c58ca35e6a91f7b33510e9de319c97d1d009d519ac567 |
|
MD5 | 7f2145e73673aeadf118aa8e7fc3aa48 |
|
BLAKE2b-256 | 651754c351e73403add099634cab47afedc5ffae14d92c1cb998148770097c33 |
oitnb-0.2.2-py38-none-any.whl的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 727e6a27d42d615d81e53c1f436686fae5923b49b77296848c8751b3b4a13fdc |
|
MD5 | 1023a26ac73384ea36ea52aad05065dd |
|
BLAKE2b-256 | a160eded73f4c8dd33047d142251f9f7e62391fdccca6819231e04d6afe45aba |
oitnb-0.2.2-py37-none-any.whl的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | c747539f372f335a772cf259fee20e45acbfdaad8938ceb2077fd2d80f13025e |
|
MD5 | d75008071f0dacbc7e7867991fbf4830 |
|
BLAKE2b-256 | 415625251300b6d55c95ccfde2f5fb0339a2332f2199f36f2c0082ca184830d8 |
oitnb-0.2.2-py36-none-any.whl的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | c30d658e00b6a956123cf2ba1d04f72bf827d31ea5cc201ab472c608c0fd43a4 |
|
MD5 | d9efefd5f891905688e4f0c458fc2a8e |
|
BLAKE2b-256 | dc3386ca53538c80556e432e4d1340bc880662ccc37747348f7e946d7c6d1225 |