【问题标题】:Flake8 not giving errors/warnings on missing docstring or code not following PEP8 naming conventionFlake8 没有给出关于缺少文档字符串或代码不遵循 PEP8 命名约定的错误/警告
【发布时间】:2020-02-25 21:37:01
【问题描述】:

我正在尝试为我的 python 代码运行 Flake8,但是我注意到它并没有在一个缺少文档字符串的简单类上给我任何 PyDocStyle 错误或关于我的类名 cars 的警告,根据它应该是 CarsPEP8 style guide

示例代码文件(cars.py)

class cars:
    def __init__(self, some_value):
        self.some_value = some_value

当我运行flake8 cars.py 时,我得到以下输出:

cars.py:3:37: W292 no newline at end of file

我正在尝试配置 Flake8 以运行一些常见的样式检查,但在 Flake8 documentation 中找不到任何关于如何启用 PyDocStyle 错误代码的帮助。

为了比较,我对 Pylint 运行了相同的文件,这是输出

************* Module code.cars                                                                                                
cars.py:3:0: C0304: Final newline missing (missing-final-newline)                                                             
cars.py:1:0: C0114: Missing module docstring (missing-module-docstring)                                                       
cars.py:1:0: C0103: Class name "cars" doesnt conform to PascalCase naming style (invalid-name)                               
cars.py:1:0: C0115: Missing class docstring (missing-class-docstring)                                                         
cars.py:1:0: R0903: Too few public methods (0/2) (too-few-public-methods)                                                                                                                                                                                   
------------------------------------                                                                                          
Your code has been rated at -6.67/10  

我在 Linux 上使用 python 3.7.6,flake8 3.7.9(mccabe:0.6.1,pycodestyle:2.5.0,pyflakes:2.1.1)CPython 3.7.6

【问题讨论】:

    标签: python lint flake8


    【解决方案1】:

    所以我发现默认情况下,Flake8 包装 pycodestyle: 2.5.0,文档中说:

    除其他外,这些功能目前不在 pycodestyle 库:

    • 命名约定:通过插件支持这种功能。 安装 flake8 和 pep8 命名扩展以使用此功能。
    • 文档字符串约定:它们不在本库的范围内;看 pydocstyle 项目。
    • 自动固定:参见 PEP8 固定器部分 在相关工具页面中。

    所以我安装了pep8-naming,以及flake8-docstrings,在运行flake8 --version 之后,我得到了下面的信息,它显示它现在正在使用已安装的插件:

    3.7.9 (flake8-docstrings: 1.5.0, pydocstyle: 5.0.2, mccabe: 0.6.1, naming: 0.8.2, pycodestyle: 2.5.0, pyflakes: 2.1.1) CPython 3.7.6 on Darwin
    

    我重新检查flake8 cars.py 并得到以下输出:

    cars.py:1:1: D100 Missing docstring in public module
    cars.py:2:1: D101 Missing docstring in public class
    cars.py:2:8: N801 class name 'cars' should use CapWords convention
    cars.py:3:1: D107 Missing docstring in __init__
    

    第一印象 - 在查看了 flake8 的 git 存储库和我必须安装的其他插件之后,我对 Flake8 有点怀疑。原因是在撰写本文时,Pylint 似乎与我需要的行为打包在一起,并且存在的时间更长,这得益于稳定性和更多的贡献者。与较新的flake8 相比,为了实现所需的行为,有必要安装可能在一两年内放弃或在flake8 升级时中断的第三方插件/库。如果您不小心提及 CI 管道中的特定版本/构建,则这两种情况都有问题,后者很麻烦。

    【讨论】:

    • 真的很好奇你所说的“它是为粉丝准备的”(我是当前的维护者)是什么意思——flake8 及其插件生态系统是 python 生态系统中最依赖的项目之一跨度>
    • Anthony - 非常高兴你能来这里发表评论,我很感激。我更新了我对粉丝的评论,因为它可能被解释为具有负面含义,我更愿意使用“发烧友”这个词。只是想指出,截至今天,flake8 生态系统较新,并且依赖插件来实现 Pylint 中的常见行为。我觉得这个插件生态系统只有在社区支持插件开发时才有效。
    • 当您说“较新”时——您意识到两者都已经存在了 10 年以上,对吧? pyflakes 和 pylint 都出现在 2004 年中后期左右。您在 flake8 中看到较少提交的原因是因为 flake8 本身不实施检查,但为插件生态系统奠定了坚实的基础。 historically flake8 的下载量比 pylint 多 25% 以上。我并不是说 pylint 不好/更糟,但您的评估似乎很短视:)
    • Anthony 无法反驳您提供的数字。我同意 - 在我得出结论之前,我将进一步探索 flake8
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2022-07-07
    • 2012-12-11
    相关资源
    最近更新 更多