跳转到主要内容

oitnb绕过了一些black的问题

项目描述

https://sourceforge.net/p/oitnb/code/ci/default/tree/_doc/_static/license.svg?format=raw https://sourceforge.net/p/oitnb/code/ci/default/tree/_doc/_static/pypi.svg?format=raw https://sourceforge.net/p/oitnb/code/ci/default/tree/_doc/_static/oitnb.svg?format=raw

代码格式化器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 的工作方式类似,但它会在原始文件和格式化版本上调用 meldmeld 允许你直接编辑左侧(原始)文件,这样你就可以在那个点上决定在行周围插入一些 # 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-1hg omeld -r-4(假设修订版 -4 是在应用 oitnb 之前),然后 omeld 将在两个临时创建的源树上运行 oitnbt,在将它们传递给 meld 之前。这意味着例如,与修订版两侧的源代码更改有关的所有更改(例如引号、从 u''' 字符串中删除多余的 u 的等),重新包装等。将保持相同。因此,真实代码更改将显示在 meld 展示的差异中。

如果 omeld 工具接收到一个文件或目录作为参数,而这个文件或目录不在 /tmp/var/tmp 下,它将不会在该文件/目录上运行 oitnb。如果您将源代码树保持在 /var/tmp 下,那么您很不幸:您的 python 会被格式化。

上述方法:检出两个(旧)修订版本树,使用 ``oitnb`` 格式化代码并运行差异 是通用的。 meldmercurial 只是我在其中使用的工具,并且可以轻松提供一个工作设置。

对于 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 (89.8 kB 查看散列值)

上传时间

构建分发

oitnb-0.2.2-py38-none-any.whl (82.8 kB 查看散列值)

上传时间 Python 3.8

oitnb-0.2.2-py37-none-any.whl (82.8 kB 查看散列值)

上传时间 Python 3.7

oitnb-0.2.2-py36-none-any.whl (82.8 kB 查看散列值)

上传时间 Python 3.6

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面