使用 Pycco 生成代码文档

举报
Yuchuan 发表于 2021/12/25 20:20:30 2021/12/25
【摘要】 作为开发人员,我们喜欢编写代码,尽管当时对我们来说很有意义,但我们必须考虑我们的受众。有人必须阅读、使用和/或维护所述代码。三个月后,它可能是另一个开发人员、客户或我们未来的自己。 即使是像 Python 这样优美的语言有时也很难理解。因此,作为非常关心我们的程序员同事(或者更有可能是因为我们的老板希望我们这样做)的优秀编程公民,我们应该编写一些文档。

目录

作为开发人员,我们喜欢编写代码,尽管当时对我们来说很有意义,但我们必须考虑我们的受众。有人必须阅读、使用和/或维护所述代码。三个月后,它可能是另一个开发人员、客户或我们未来的自己。

即使是像 Python 这样优美的语言有时也很难理解。因此,作为非常关心我们的程序员同事(或者更有可能是因为我们的老板希望我们这样做)的优秀编程公民,我们应该编写一些文档

但是有规则:

  1. 编写文档不能烂(即我们不能使用 MS Word)。
  2. 编写文档必须尽可能轻松。
  3. 编写文档不能要求我们离开我们最喜欢的文本编辑器/IDE
  4. 编写文档不得要求我们对最终演示文稿进行任何格式化或完全关心。

这就是Pycco 的用武之地:

“Pycco”是 Docco 的 Python 端口:原始的快速而肮脏的、百行长的、文学编程风格的文档生成器。它生成 HTML,在代码旁边显示您的注释。注释通过 Markdown 和 SmartyPants 传递,而代码通过 Pygments 传递以进行语法高亮显示。

所以基本上这意味着 Pycco 可以为我们自动生成看起来不错的代码文档。Pycco 还遵守上述代码文档的四项规则。那么什么是不爱呢?让我们来看看如何使用它的一些示例。

对于本文,我从一个用Django编写的简单 TODO 应用程序开始,您可以从repo 中获取它。该应用程序允许用户将项目添加到列表中并在完成后删除它们。这个应用程序可能不会为我赢得 Webby,但它应该满足本文的目的。

请注意,repo 中的文件已经包含最终代码,已经记录在案。不过,您仍然可以创建单独的文档文件,所以请随意克隆 repo 并跟随我。

项目设置

克隆回购:

$ git clone git@github.com:mjhea0/django-todo.git

设置虚拟环境:

$ cd django-todo
$ virtualenv --no-site-packages venv
$ source venv/bin/activate

安装要求:

$ pip install -r requirements.txt

同步数据库:

$ cd todo
$ python manage.py syncdb

生成一些文档

入门很简单:

$ pip install pycco

然后要运行它,您可以使用如下命令:

$ pycco todos/*.py

请注意,您可以通过这种方式指定单个文件或文件目录。在我们的 TODO 存储库上执行上述命令会产生以下结果:

pycco = todo/todos/__init__.py -> docs/__init__.html
pycco = todo/todos/models.py -> docs/models.html
pycco = todo/todos/tests.py -> docs/tests.html
pycco = todo/todos/views.py -> docs/views.html

换句话说,它生成 html 文件(每个 python 文件一个)并将它们全部转储到“docs”目录中。对于较大的项目,您可能需要使用 -p 选项来保留原始文件路径。

例如:

pyccoo todo/todos/*.py -p

会产生:

pycco = todo/todos/__init__.py -> docs/todo/todos/__init__.html
pycco = todo/todos/models.py -> docs/todo/todos/models.html
pycco = todo/todos/tests.py -> docs/todo/todos/tests.html
pycco = todo/todos/views.py -> docs/todo/todos/views.html

请注意,它已将 todos 应用程序的文档存储在“docs/todo/todos”子文件夹下。通过这样做,浏览大型项目的文档会容易得多,因为文档结构将与代码结构相匹配。

生成的文档

pycco 的目的是生成一个两列文档,左侧带有注释,右侧与后续代码对齐。因此,在我们还没有注释的models.py类上调用 pycco将生成一个如下所示的页面:

使用 Pycco 的简单模型文档示例

您会注意到左侧的列(应该是注释的地方)是空白的,而右侧则显示了代码。我们可以通过添加docstring来更改models.py以通过将以下代码添加到models.py来获得更有趣的文档。

from django.db import models

# === Models for Todos app ===

class ListItem(models.Model):
    """
    The ListItem class defines the main storage point for todos.
    Each todo has two fields:
    text - stores the text of the todo
    is_visible - used to control if the todo is displayed on screen
    """

    text = models.CharField(max_length=300)
    is_visible = models.BooleanField()

使用上面的代码片段,pycco 找到了以下行:

# === Models for Todos app ===

然后在文档中生成一个标题。

文档字符串:

"""
The ListItem class defines the main storage point for todos.
Each todo has two fields:
text - stores the text of the todo
is_visible - used to control if the todo is displayed on screen
"""

Pycco 使用文档字符串来生成文档。再次运行 pycco 后的最终结果将是:

带有注释的 Pycco 模型文档

如您所见,左侧的文档与右侧的代码很好地对齐。这使得查看代码和了解正在发生的事情变得非常容易。

Pycco 还识别代码中以 a 开头的单行注释#以生成文档。

Make It Fancy

但 pycco 并不止于此。它还允许使用 Markdown 自定义注释格式。作为示例,让我们在views.py文件中添加一些注释。首先,让我们在views.py的顶部放置一个文档字符串:

"""
All the views for our todos application
Currently we support the following 3 views:

1. **Home** - The main view for Todos
2. **Delete** - called to delete a todo
3. **Add** - called to add a new todo

"""

from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext

from todos.models import ListItem

def home(request):
    items = ListItem.objects.filter(is_visible=True)
    return render_to_response('home.html', {'items': items}, context_instance = RequestContext(request))

# ... code omitted for brevity ...

这将生成如下报告:

带有 Markdown 格式的 Pycco 文档示例

我们还可以在文件之间甚至在同一文件内添加链接。可以使用[[filename.py]]或添加链接[[filename.py#section]],它们将呈现为带有文件名的链接。让我们更新views.py以在列表中每个项目的末尾添加一些链接:

"""
All the views for our todos application
Currently we support the following 3 views:

1. **Home** - The main view for Todos (jump to section in [[views.py#home]] )
2. **Delete** - called to delete a todo ( jump to section in [[views.py#delete]] )
3. **Add** - called to add a new todo (jump to section in [[views.py#add]])
"""

from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext

# defined in [[models.py]]
from todos.models import ListItem

# === home ===
def home(request):
    items = ListItem.objects.filter(is_visible=True)
    return render_to_response('home.html', {'items': items}, context_instance = RequestContext(request))

# === delete ===
def delete(request):

# ... code omitted for brevity ...

如您所知,建立链接有两个组成部分。首先,我们必须在我们的文档中定义一个部分。您可以看到我们已经使用代码定义了 home 部分# === home ===。创建部分后,我们可以使用代码链接到它[[views.py#home]]。我们还插入了一个指向模型文档文件的链接,代码如下:

# defined in [[models.py]]

最终结果是如下所示的文档:

带有链接的 Pycco 文档示例

请记住,因为 pycco 允许使用标记语法,您还可以使用完整的 html。所以发疯:)

为整个项目自动生成文档

如何使用 pycco 为整个项目生成文档可能并不明显,但如果您使用 bash 或 zsh 或任何支持全局的 sh,它实际上非常简单,您只需运行如下命令:

$ pycco todo/**/*.py -p

这将为.pytodo的任何/所有子目录中的所有文件生成文档。如果你在 Windows 上,你应该可以用 cygwin、git bash 或 power sh 来做到这一点。

非 Python 文件的文档

Pycco 还支持其他几种文件类型,这对于经常使用一种以上文件类型的 Web 项目很有帮助。在撰写本文时,受支持文件的完整列表是:

  • .coffee - CoffeeScript
  • .pl - Perl
  • .sql - SQL
  • .c - C
  • .cpp - C++
  • .js - JavaScript
  • .rb - Ruby
  • .py - Python
  • .scm - Scheme
  • .lua - Lua
  • .erl - Erlang
  • .tcl - Tcl
  • .hs - Haskell

这应该涵盖您的文档需求。所以只要记住写一些注释,让 pycco 轻松地为您生成漂亮的代码文档。

项目级文档如何?

通常项目除了代码文档之外还有其他要求——比如自述文件、安装文档、部署文档等。使用 pycco 生成该文档也很好,这样我们就可以始终坚持使用一个工具。好吧,此时,pycco 将仅处理具有上述列表中扩展名的文件。但是没有什么可以阻止您创建readme.pyinstallation.py文件并使用 pycco 生成文档。您所要做的就是将您的文档放在一个文档字符串中,然后 pycco 将生成它并为您提供完整的降价支持。所以想象一下,如果在你的项目目录的底部你有一个名为的文件夹project_docs,其中包含:

  • install_docs.py
  • project_readme.py
  • deployment.py

然后你可以运行以下命令:

$ pycco project_docs/*.py -p

这会在您的“docs/project_docs 目录”中添加适当的 html 文件。当然,这可能有点小技巧,但它确实允许您使用一种工具为您的项目生成所有文档。

Regeneration

Pycco 还有一个绝招:自动重新生成文档。换句话说,您可以让 pycco 监视您的源文件,并在每次保存源文件时自动重新生成必要的文档。如果您尝试在评论中添加一些自定义降价/html 并希望确保其正确呈现,这将非常有用。随着自动文档重新生成运行,您只需进行更改、保存文件并刷新浏览器,无需在其间重新运行 pycco 命令。为此,您需要安装看门狗:

$ pip install watchdog

Watchdog 是监听文件变化的模块。因此,一旦安装完成,只需执行如下命令:

$ pycco todo/**/*.py -p --watch

它将运行 pycco 并保持运行,直到您用Ctrl+C停止它为止。只要它正在运行,它就会重新生成有关源文件每次更改的文档。简单的文档如何?

Pycoo 是迄今为止我遇到的最简单、最直接的 Python 代码文档工具。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。