根据 PEP257 自动检查文档字符串样式的工具[关闭]

2023-12-23

类似的工具pep8 http://pypi.python.org/pypi/pep8可以检查源代码样式,但他们不会检查文档字符串是否根据pep257 http://www.python.org/dev/peps/pep-0257/, pep287 http://www.python.org/dev/peps/pep-0287/。有这样的工具吗?

Update

我决定自己实现一个这样的静态分析工具,参见:

https://github.com/GreenSteam/pep257 https://github.com/GreenSteam/pep257

目前,大多数pep257 http://www.python.org/dev/peps/pep-0257/被覆盖。 设计深受上述影响pep8 http://pypi.python.org/pypi/pep8 tool.


我不知道有任何用于 python 文档字符串的静态分析工具。事实上,我在开始使用 PyLint 后不久就开始构建一个,但很快就放弃了。

PyLint 有一个插件系统,如果您想投入工作以使 PEP 可执行,则可以使用文档字符串插件。

PyLint“插件”称为检查器,有两种形式:将源文件作为原始文本文档使用的插件和将源文件作为 AST 使用的插件。我从 AST 开始尝试。回想起来,这可能是一个错误。

这是我所拥有的:

class DocStringChecker(BaseChecker):
    """
    PyLint AST based checker to eval compliance with PEP 257-ish conventions.
    """
    __implements__ = IASTNGChecker

    name = 'doc_string_checker'
    priority = -1
    msgs = {'W9001': ('One line doc string on >1 lines',
                     ('Used when a short doc string is on multiple lines')),
            'W9002': ('Doc string does not end with "." period',
                     ('Used when a doc string does not end with a period')),
            'W9003': ('Not all args mentioned in doc string',
                     ('Used when not all arguments are in the doc string ')),
            'W9004': ('triple quotes',
                     ('Used when doc string does not use """')),
           }
    options = ()

    def visit_function(self, node):
        if node.doc: self._check_doc_string(node)

    def visit_module(self, node):
        if node.doc: self._check_doc_string(node)

    def visit_class(self, node):
        if node.doc: self._check_doc_string(node)

    def _check_doc_string(self, node):
        self.one_line_one_one_line(node)
        self.has_period(node)
        self.all_args_in_doc(node)

    def one_line_one_one_line(self,node):
        """One line docs (len < 80) are on one line"""
        doc = node.doc
        if len(doc) > 80: return True
        elif sum(doc.find(nl) for nl in ('\n', '\r', '\n\r')) == -3: return True
        else:
            self.add_message('W9001', node=node, line=node.tolineno)

    def has_period(self,node):
        """Doc ends in a period"""
        if not node.doc.strip().endswith('.'):
            self.add_message('W9002', node=node, line=node.tolineno)

    def all_args_in_doc(self,node):
        """All function arguments are mentioned in doc"""
        if not hasattr(node, 'argnames'): return True
        for arg in node.argnames:
            if arg != 'self' and arg in node.doc: continue
            else: break
        else: return True
        self.add_message('W9003', node=node, line=node.tolineno)

    def triple_quotes(self,node): #This would need a raw checker to work b/c the AST doesn't use """
        """Doc string uses tripple quotes"""
        doc = node.doc.strip()
        if doc.endswith('"""') and doc.startswith('"""'): return True
        else: self.add_message('W9004', node=node, line=node.tolineno)


def register(linter):
    """required method to auto register this checker"""
    linter.register_checker(DocStringChecker(linter))

我记得这个系统没有很好的文档(可能在过去的一年里发生了变化)。这至少为您提供了一些东西来开始破解/非常简单的代码来代替文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 PEP257 自动检查文档字符串样式的工具[关闭] 的相关文章

  • Django:模拟模型上的字段

    如何将模拟对象分配给该模型上的用户字段 无论如何都要绕过 SomeModel user 必须是 User 实例 检查吗 class SomeModel models Model user models ForeignKey User 我不会
  • Python setuptools:如何在 setup.py 中添加私有存储库 (gitlab)?

    我上传了 2 个包 它们位于我的 gitlab 存储库中 如果我想使用 pip 将它们安装在我的系统中 这很容易 因为 gitlab 可以帮助您 https docs gitlab com ee user packages pypi rep
  • Python 中的字节数组

    如何在 Python 中表示字节数组 如 Java 中的 byte 我需要用 gevent 通过网络发送它 byte key 0x13 0x00 0x00 0x00 0x08 0x00 在Python 3中 我们使用bytes对象 也称为s
  • Flask+Nginx+uWSGI:导入错误:没有名为站点的模块

    我安装为http www reinbach com uwsgi nginx flask virtualenv mac os x html http www reinbach com uwsgi nginx flask virtualenv
  • Kivy - 文本换行工作错误

    我正在尝试在 Kivy 1 8 0 应用程序中换行文本 当没有太多文字时 一切正常 但如果文本很长并且窗口不是很大 它只是剪切文本 这是示例代码 vbox BoxLayout orientation vertical size hint y
  • for 循环如何评估其参数

    我的问题很简单 Does a for循环评估它每次使用的参数 Such as for i in range 300 python 是否会为此循环的每次迭代创建一个包含 300 个项目的列表 如果是的话 这是避免这种情况的方法吗 lst ra
  • Python在postgresql表中查找带有单引号符号的字符串

    我需要从 psql 表中查找包含多个单引号的字符串 我当前的解决方案是将单引号替换为双单引号 如下所示 sql query f SELECT exists SELECT 1 FROM table name WHERE my column m
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 登录网站并使用 python 请求下载文件

    我有一个带有 HTML 表单的网站 登录后 它会将我带到 start php 站点 然后将我重定向到overview php 我想从该服务器下载文件 当我单击 ZIP 文件的下载链接时 链接后面的地址是 getimage php path
  • Python Pandas 根据另一列的总计从另一个数据帧中选择值

    我下面有一个 DataFrame 但我需要根据取消和订单列从每个代码中选择行 假设代码 xxx 的阶数为 6 1 5 1 阶数为 11 我需要一种算法 可以选择满足总共 11 行的行 阶数为 6 5 如果没有行匹配 则选择最接近的 id 并
  • 为什么我无法在 Mac OS X Terminal.app 上的 Python 解释器中显示 unicode 字符?

    如果我尝试粘贴 unicode 字符 例如中间的点 在我的 python 解释器中它什么也不做 我在 Mac OS X 上使用 Terminal app 当我只是在 bash 中时 我没有遇到任何问题 但在解释器中 python Pytho
  • PyTorch DataLoader 对并行运行的批次使用相同的随机种子

    有一个bug https tanelp github io posts a bug that plagues thousands of open source ml projects 在 PyTorch Numpy 中 当并行加载批次时Da
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • 如何使用 matplotlib 为圆柱体的每个单独面添加颜色

    我正在尝试为圆柱体的每个面着色 但是我不确定如何进行 我尝试了以下方法 for i in range 10 col append for i in range 10 for j in range 20 col i append plt cm
  • Python 通过从现有 csv 文件中过滤选定的行来写入新的 csv 文件

    只是一个问题 我试图将 csv 文件中的选定行写入新的 csv 文件 但出现错误 我试图读取的 test csv 文件是这样的 两列 2013 9 1 2013 10 2 2013 11 3 2013 12 4 2014 1 5 2014
  • Python:高精度time.sleep

    你能告诉我如何在 Win32 和 Linux 上的 Python 2 6 中获得高精度睡眠函数吗 您可以在中使用浮点数sleep http docs python org library time html time sleep 该参数可以
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • 如何处理错误然后立即脱离承诺链?

    所以我有一个 Express 应用程序 它使用中间件来解析 JSON POST 请求 然后填充req body目的 然后我有一个承诺链 它使用 Joi 根据模式验证数据 然后将其存储在数据库中 我想做的是检查这些进程之一后是否抛出错误 通过
  • 调试作为 Ajax 响应一部分的 JavaScript 代码

    所以在我的网站中 我使用jquery通过ajax来获取数据 作为 ajax 响应的一部分 一些 javascript 代码也会被执行 问题是如何在firebug或其他工具中调试这个javascript 这是我迄今为止的经验 放置调试器 不起
  • 设置overflow-x:hidden会添加垂直滚动条[重复]

    这个问题在这里已经有答案了 当我指定overflow x hidden在水平和垂直溢出的元素上 除了隐藏水平溢出的内容之外 该元素还会获得垂直滚动条 我尝试过添加overflow y visible甚至只是overflow visible
  • 如何修复警告:初始化程序周围缺少大括号?

    该警告是由vala 生成的c 代码产生的 警告 初始化程序周围缺少大括号 该代码可以工作 但警告很烦人 警告引用的vala代码是 struct Position uint x uint y private static Position p
  • 使用 jQuery FlexSlider 添加或删除幻灯片

    是否可以在运行时添加或删除幻灯片弹性滑块 http flex madebymufffin com 新版本的弹性滑块2 https github com woothemes FlexSlider已经支持这种方法了 slider addSlid
  • 如何让Service Worker离线工作?

    我无法让我的 Service Worker 离线工作 无论我使用什么教程 我在我的 index html 文件中注册了服务工作者 如下所示
  • 如何在可扩展列表视图上插入标题行

    我有一个带有一个可扩展列表视图的 Android 活动 然后我创建了 ExpandableListAdapter 因此我可以单击一个项目 然后可以看到该项目的子项目 还行吧 现在我想为每个项目的子列表插入标准标题 标题 所以我构建了这段代码
  • “返回的颜色将针对指定上下文的主题进行样式设置”是什么意思?

    我最近注意到一个方法 Context getResources getColor int 自 API 23 起已弃用 应该使用 ContextCompat getColor context R color your color 文档对此说道
  • 如何使用重命名重构作为快速修复的一部分?

    我在 DSL 中添加了一个快速修复选项 我想在其中对文档文本进行一些修改 包括重命名某些元素 我可以很好地更改该元素中的文本 但我还想重命名其所有引用 即重命名重构 我怎么做 我可以以某种方式从快速修复内部触发内置的重命名重构吗 或者 如何
  • Gtk-消息:无法加载模块“canberra-gtk-module”

    我的 pygtk 程序将此警告写入 stderr Gtk Message Failed to load module canberra gtk module 自由堪培拉 http 0pointer de lennart projects l
  • MKMapView 无法缩放地图

    我创建了一个非常基本的应用程序 仅显示 MKMapView 和 UserLocation 我有时在绘制这张底图时遇到问题 它只显示地图的一部分 每当我捏缩放地图时 它都无法重新绘制 而只显示空白的灰色图块 每当需要获取新的地图图块时 控制台
  • OpenCV 不报告准确的帧速率/计数

    我有一个 33 秒的视频 正在尝试使用 OpenCV 进行处理 我的目标是确定每个帧对应的时间实例 相对于视频的开始 我这样做是为了能够比较以不同帧速率录制的同一场景的视频帧 什么在起作用 FPS 正确报告为 59 75 这与什么是一致的f
  • Google Cloud Bigtable 客户端连接池

    我通过制作一个虚拟 Web 应用程序来处理向 Bigtable 写入数据和从 Bigtable 读取数据的请求 对 Google Cloud Bigtable 进行了负载测试 一开始 我只使用单个 Bigtable 连接作为单例 并在所有线
  • Eclipse Web 项目依赖项

    这个问题是关于 Eclipse 开发的 我正在尝试在 Eclipse 中创建一个 Web 应用程序 问题是我没有将依赖项 jar 获取到部署的存档中 我创建了一个新的动态 Web 项目并将其链接到另一个 Java 项目 Java 项目引用了
  • 在 Google App 脚本中共享日历

    我正在尝试从电子表格构建日历 然后与域内的适当人员共享它们 我将其作为附加到电子表格的脚本来执行 到目前为止 我可以读取正确的单元格并构建包含事件的日历 但我遇到的问题是弄清楚如何与正确的人共享特定的日历 我四处搜索并找到了相同的通用代码来
  • 尝试对“$(MSBuildVersion)”进行数字比较,结果为“”而不是数字,条件为“$(MSBuildVersion) >= 16.1.0”)”

    当我尝试重新加载已卸载的项目时 出现此错误 如下图所示 它说这条线来自我的Microsoft Managed Core targets 我尝试更新我的 NuGet 包 我尝试将环境变量路径值更改为 msbuild exe 所在的位置 我尝试
  • 内层div的边距影响外层div

    我有三个嵌套的 DIV 元素 如下所示 div div div This br is br a br multiline br testcase br This br is br a br multiline br testcase br
  • 减少可执行文件大小的过程

    我正在生成一个在 ARM 处理器上运行的十六进制文件 我希望将其保持在 32K 以下 它目前比这个大得多 我想知道是否有人可以提供一些关于缩小它的最佳方法的建议 这是我到目前为止所做的 因此 我对其运行 size 以确定十六进制文件有多大
  • 逗号附近的语法不正确

    这是我尝试从会话中获取多个值时的 ASPX 代码片段 我收到错误 逗号附近的语法不正确 在代码片段中标记了该行 SqlCommand cmd1 new SqlCommand select plugin id from profiles pl
  • 根据 PEP257 自动检查文档字符串样式的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 类似的工具pep8 http pypi python org pypi pep8可以检查源代码样式 但他