Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

PEP 256 – 文档字符串处理系统框架

作者:
David Goodger <goodger at python.org>
讨论至:
Doc-SIG 邮件列表
状态:
已拒绝
类型:
标准跟踪
创建日期:
2001 年 6 月 1 日
发布历史:
2001 年 6 月 13 日

目录

拒绝通知

这项提议似乎已经后继乏力。

摘要

Python 自身就适合内联文档。凭借其内置的文档字符串语法,Python 中可以轻松实现有限形式的文学编程。然而,目前还没有令人满意的标准工具来提取和处理 Python 文档字符串。标准工具集的缺乏是 Python 基础设施中的一个显著空白;本 PEP 旨在填补这一空白。

围绕文档字符串处理的问题一直存在争议且难以解决。本 PEP 提出了一个通用的文档字符串处理系统 (DPS) 框架,该框架将组件(程序和概念)分离出来,从而可以通过共识(一种解决方案)或通过分歧(多种解决方案)来解决个别问题。它提倡标准接口,允许使用各种插件组件(输入上下文读取器、标记解析器和输出格式写入器)。

DPS 框架的概念独立于实现细节而呈现。

文档字符串 PEPs 路线图

文档字符串处理有许多方面。“文档字符串 PEPs”已将问题分解开来,以便单独处理每个问题,或尽可能接近单独处理。各个方面和相关的 PEPs 如下:

  • 文档字符串语法。PEP 287,“reStructuredText 文档字符串格式”,提出了 Python 文档字符串、PEPs 和其他用途的语法。
  • 文档字符串语义至少包含两个方面:
    • 约定:文档字符串的高级结构。在PEP 257,“文档字符串约定”中处理。
    • 方法论:文档字符串信息内容的规则。尚未解决。
  • 处理机制。本 PEP(PEP 256)概述了抽象文档字符串处理系统 (DPS) 的高级问题和规范。PEP 258,“Docutils 设计规范”,是正在开发的一个 DPS 的设计和实现概述。
  • 输出样式:开发人员希望从其源代码生成的文档美观,而对于这意味着什么,有许多不同的想法。PEP 258 提到了“样式转换”。文档字符串处理的这一方面尚未得到充分探索。

通过将问题分离出来,我们可以更容易地达成共识(更小的争论 ;-),并更乐意接受分歧。

基本原理

其他一些语言也有标准的内联文档系统。例如,Perl 有 POD (“Plain Old Documentation”),Java 有 Javadoc,但两者都与 Python 的方式不兼容。POD 语法非常明确,但在可读性方面追随 Perl。Javadoc 以 HTML 为中心;除了“@field”标签外,原始 HTML 用于标记。还有一些通用工具,例如 AutoduckWeb (Tangle & Weave),适用于多种语言。

为 Python 编写自动文档系统进行了许多尝试(非详尽列表):

  • Marc-Andre Lemburg 的 doc.py
  • Daniel Larsson 的 pythondoc & gendoc
  • Doug Hellmann 的 HappyDoc
  • Laurence Tratt 的 Crystal(网络上已不可用)
  • Ka-Ping Yee 的 pydoc (pydoc.py 现已成为 Python 标准库的一部分;见下文)
  • Tony Ibbs 的 docutils (Tony 已将此名称捐赠给 Docutils 项目)
  • Edward Loper 的 STminus 形式化及相关工作

这些系统,各自目标不同,取得了不同程度的成功。上述许多系统存在的问题是过度雄心与缺乏灵活性相结合。它们提供了一套自包含的组件:一个文档字符串提取系统、一个标记解析器、一个内部处理系统和一个或多个具有固定样式的输出格式编写器。不可避免地,每个系统的一个或多个方面都存在严重缺陷,并且它们不容易扩展或修改,从而无法被采纳为标准工具。

(至少对本文作者而言)“全有或全无”的方法无法成功已变得清晰,因为没有任何一个 monolithic 的自包含系统可能得到所有相关方的同意。为扩展而设计的模块化组件方法,其中组件可以多重实现,可能是成功的唯一机会。标准的组件间 API 将使 DPS 组件易于理解,而无需详细了解整个系统,从而降低贡献的门槛,并最终形成一个丰富多样的系统。

文档字符串处理系统的每个组件都应独立开发。“最佳品种”系统应被选中,可以从现有系统合并,和/或重新开发。该系统应包含在 Python 的标准库中。

PyDoc 及其他现有系统

PyDoc 从 2.1 版本开始成为 Python 标准库的一部分。它从 Python 交互式解释器内部、shell 命令行和 GUI 窗口中提取文档字符串并将其显示到 Web 浏览器 (HTML)。尽管 PyDoc 是一个非常有用的工具,但它存在一些缺陷,包括:

  • 在 GUI/HTML 的情况下,除了对标识符名称进行了一些启发式超链接外,没有对文档字符串进行格式化。它们呈现在 <p><small><tt> 标签内,以避免不必要的换行。不幸的是,结果并不美观。
  • PyDoc 从导入的模块对象中提取文档字符串和结构信息(类标识符、方法签名等)。导入不受信任的代码存在安全问题。此外,导入时会丢失源中的信息,例如注释、“附加文档字符串”(非文档字符串上下文中的字符串文字;参见PEP 258)以及定义的顺序。

当提供 HTML 页面时,本 PEP 中提议的功能可以添加到 PyDoc 或由 PyDoc 使用。提议的文档字符串处理系统的功能远超 PyDoc 当前形式所需。要么将开发一个独立的工具(PyDoc 可能使用也可能不使用),要么 PyDoc 可以扩展以包含此功能并成为文档字符串处理系统(或其中一个系统)。该决定超出了本 PEP 的范围。

同样,对于其他现有的文档字符串处理系统,其作者可能选择与此框架兼容,也可能不选择。但是,如果此框架被接受并采纳为 Python 标准,则兼容性将成为这些系统未来发展的重要考虑因素。

规范

文档字符串处理系统框架分解如下:

  1. 文档字符串约定。记录了诸如以下问题:
    • 应在何处记录什么。
    • 第一行是单行摘要。

    PEP 257 记录了其中一些问题。

  2. 文档字符串处理系统设计规范。记录了诸如以下问题:
    • 高级规范:DPS 的作用。
    • 可执行脚本的命令行接口。
    • 系统 Python API。
    • 文档字符串提取规则。
    • 封装输入上下文的读取器。
    • 解析器。
    • 文档树:中间内部数据结构。解析器和读取器的输出,以及写入器的输入都共享相同的数据结构。
    • 修改文档树的转换。
    • 输出格式的写入器。
    • 分发器,处理输出管理(一个文件、多个文件或内存中的对象)。

    这些问题适用于任何文档字符串处理系统的实现。PEP 258 记录了这些问题。

  3. 文档字符串处理系统实现。
  4. 输入标记规范:文档字符串语法。PEP 287 提出了标准语法。
  5. 输入解析器实现。
  6. 输入上下文读取器(“模式”:Python 源代码、PEP、独立文本文件、电子邮件等)和实现。
  7. 样式器:某些输入上下文读取器可能具有关联的样式器,允许各种输出文档样式。
  8. 输出格式(HTML、XML、TeX、DocBook、info 等)和写入器实现。

组件 1、2/3/5 和 4 是单独的配套 PEP 的主题。如果框架或语法/解析器有其他实现,则可能需要额外的 PEP。组件 6 和 7 的每个组件都将需要多个实现;PEP 机制可能对这些组件来说是多余的。

项目网站

已为这项工作在 http://docutils.sourceforge.net/ 建立了一个 SourceForge 项目。

致谢

本文借鉴了 Python Doc-SIG 档案中的思想。感谢所有过去和现在的成员。


来源:https://github.com/python/peps/blob/main/peps/pep-0256.rst

最后修改:2025-02-01 08:59:27 GMT