跳转到主要内容

flake8的Python字符串格式化样式(SFS)插件

项目描述

flake8-sfs - Python字符串格式化插件

Released on the Python Package Index (PyPI) Released on Conda pre-commit.ci status GitHub workflow status PyPI downloads Code style: black

介绍

这是一个MIT许可的flake8插件,用于强制执行Python字符串格式化首选项。您可以从Python包索引(PyPI)安装。

由于历史原因,Python编程语言累积了多种字符串格式化的方法。其中三种主要的是

  • 百分比运算符(违规代码SFS1##),例如在这个示例中

>>> name = "Peter"
>>> price = 1.2
>>> print("Hello %s, do you have $%0.2f?" % (name, price))
Hello Peter, do you have $1.20?
  • 格式化方法(违规代码SFS2##),自Python 2.6起可用,

>>> name = "Peter"
>>> price = 1.2
>>> print("Hello {}, do you have ${:0.2f}?".format(name, price))
Hello Peter, do you have $1.20?
  • f-字符串(违规代码SFS3##),自Python 3.6起可用,

>>> name = "Peter"
>>> price = 1.2
>>> print(f"Hello {name}, do you have ${price:0.2f}?")

我们有很多选择,但引用Python之禅,“应该有一个 - 最好是唯一明显的方式来做这件事”。这个flake8插件的存在是为了让您定义项目中允许哪种样式。

默认情况下,此插件会对所有三种样式提出异议 - 我们预计您将做出明确的选择并配置要忽略的代码。请参见下面的用例。

Flake8验证代码

flake8早期版本假设验证代码使用单个字符前缀,这在插件生态系统中导致冲突问题。从v3.0版本开始,flake8支持更长的前缀,因此此插件使用SFS作为其前缀(代表String Format Style,字符串格式风格)。

前缀SFS1 - 百分比运算符

代码

描述

SFS101

使用百分比运算符进行字符串字面量格式化。

SFS102

使用百分比运算符进行字节字面量格式化。

前缀SFS2 - 格式化方法

代码

描述

SFS201

使用.format方法进行字符串字面量格式化。

直接使用str.format(‘…’,…)

进行字符串格式化。

前缀SFS3 - f-strings

代码

描述

SFS301

使用f-string进行字符串字面量格式化。

您可以在flake8中使用部分代码如SFS1来忽略所有SFS1##百分比格式化代码。

用例

如果您接受f-strings为最佳,可以使用flynt这样的工具自动转换所有代码,然后使用此flake8插件通过配置忽略SFS301违规来强制执行样式。

您可能正在维护一个仍然支持Python 2的项目,其中混合了百分比和格式化方法字符串格式化。在这里,告诉flake8忽略SFS1SFS2前缀,并且只对Python 2中会出错(即强制执行前缀SFS3)的f-strings提出警告。

或者,您可能有一个庞大的遗留代码库,其中包含大量百分比格式化,但希望将任何格式化方法移至f-strings。在这里,您可以忽略SFS1SFS3前缀,并仅强制执行格式化方法检查(前缀SFS2)。

或者,您可能认为旧方法是最好的,并配置flake8忽略百分比格式化,但将格式化方法或f-strings视为错误(通过忽略前缀SFS1)。

安装和用法

需要Python 3.7或更高版本。

我们建议使用pip安装插件,它会处理依赖项。

$ pip install flake8-sfs

或者,如果您使用Anaconda打包系统,以下命令将安装插件及其依赖项

$ conda install -c conda-forge flake8-sfs

当使用flake8时,新验证器应自动包含在内,可能会报告以SFS开头(如上定义)的附加验证代码。例如

$ flake8 example.py

您可以使用以下方式仅请求显示SFS代码

$ flake8 --select SFS example.py

您应该在flake8配置文件的选择或忽略列表中至少添加一些SFS验证代码。

配置

我们假设您熟悉flake8配置

除非您的代码完全不执行字符串格式化(这很少见),否则您应该告诉flake8忽略此插件至少一个违规代码。例如

[flake8]
extend-ignore =
    # Ignore f-strings, we like them:
    SFS301,

请注意,flake8允许在多行上拆分逗号分隔的列表,并允许包含哈希注释行。

版本历史

版本

发布日期

变更

v1.0.0

2023-11-01

  • 将此版本称为1.0.0,因为已经稳定多年。

  • 更新文档和PyPI元数据。

v0.0.4

2022-11-01

  • 至少需要Python 3.7。

  • 用pyproject.toml替换setup.py(来自Sergey B Kirpichev的贡献)。

v0.0.3

2020-01-22

  • 更新文档和PyPI元数据。

v0.0.2

2020-01-12

  • 现在代码具有层次结构(因此可以忽略整个组)。

  • 增加了str.format("...", ...)检查。

v0.0.1

2020-01-11

  • 初始公开版本(后续代码已重新分配)。

开发者

此插件位于GitHub上:https://github.com/peterjc/flake8-sfs

开发者可以从git仓库安装插件,可选构建依赖项。

$ pip install -e .[develop]

一旦本地和在线测试通过,就进行一次新版本发布。

$ git tag vX.Y.Z
$ python -m build
$ git push origin master --tags
$ twine upload dist/flake8?sfs-X.Y.Z*

PyPI上传应触发自动拉取请求,更新flake8-sfs conda-forge配方

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

flake8-sfs-1.0.0.tar.gz (7.3 kB 查看哈希)

上传时间: 源代码

构建分发

flake8_sfs-1.0.0-py2.py3-none-any.whl (6.5 kB 查看哈希)

上传时间: Python 2 Python 3

由以下支持