从您的文档中去除pragma语句。
项目描述
提高开发者体验:
编写更好的文档。
不要重复自己。
确保代码易于维护。
TL;DR
sphinx-no-pragma 是一个用于从文档中使用的源代码中去除pragma注释的Sphinx 扩展。
如果您需要了解这些内容以继续前进,请直接跳转到安装部分。否则,请继续阅读。
有人说,“文档是王”。其他人则认为——“不,演示才是”。还有一些人说,“测试是一切!”而另一些人会跳进来,“编写干净的代码!black,isort,mypy和ruff无处不在!”
然而,你希望做得更好,编写更好的包,因为有一个通用的问题需要解决,你知道如何解决,你希望与世界分享。你还希望确保或至少努力使你的项目对开发者友好,吸引贡献,这最终导致持续改进并使其寿命更长。
所以,结合最佳实践,你
在您的存储库中引入示例,以使其更容易开始。
使用示例编写出色的文档(最终可能需要重复自己,从实际代码示例中复制内容)。
为您的代码编写测试。然后您意识到测试示例也很好。最终,您在三个地方几乎有相同的代码:测试、示例和文档。
引入代码检查工具和MyPy。
然后您投入时间确保所有代码看起来正确,并修复无尽的MyPy问题。
然后您需要做一些小改动,不幸的是,其中之一需要更改示例代码。您需要更改示例、文档、测试和示例测试。然而,您也需要快速推动这个改变。就像以前很多次一样,您跳过了文档更新,留待“另一次”再处理。
那时您发现代码维护是地狱。您修复了一切,测试通过,您很高兴推动它,到那时MyPy开始抱怨您不知道如何解决的问题,到那时您对这些问题已经不关心了。您对此感到厌倦,并开始使用pragma注释来抑制错误,把修复留给另一天。您的维护工作涉及大量的复制粘贴(示例、测试、文档)。
这听起来熟悉吗?
如果我现在告诉你,实际上可以采取一些步骤来简化这个过程。具体来说,您可以直接使用示例代码在文档中,使用Sphinx的.. literalinclude::指令。这一部分已经在jsphinx项目中得到了很好的处理(主要是JavaScript)。然而,jsphinx没有解决的是文档中存在pragma注释的问题。本项目就关注这部分。您不需要在可读性、可解释性和易于维护之间做出选择或权衡。
由懒惰的开发者为懒惰的开发者编写,以提高编写低维护代码的开发体验。
特性
准确移除您在文档中包含的源代码中的pragma注释。
先决条件
Python 3.8+
安装
pip install sphinx-no-pragma
文档
文档可在Read the Docs上找到。
有关贡献指南,请查看贡献指南。
使用示例
为了继续前进,您首先需要了解一些关于Sphinx指令的知识。特别是.. literalinclude::和:download:。为此,首先阅读jsphinx文档。
但可能有一个小问题。当然,您可能很幸运,代码中一个pragma注释都没有(没有# noqa,没有# type: ignore等)。但更常见的是,您至少有几个这样的。您完美主义者性格不容易让您让他们成为您简洁、美丽的文档的一部分。您诅咒我之前的建议,开始用复制粘贴的示例替换DRY文档部分。
这就是这个包介入的地方。它只是一个简单的Sphinx扩展,它会从进入文档的代码中移除所有的pragma注释。
Sphinx配置
文件名:docs/conf.py
extensions = [
# ... other extensions
"sphinx_no_pragma",
# ... other extensions
]
代码示例
文件名:examples/example_1.py
from typing import Any, Optional
class ThirdPartyLibrary:
@staticmethod
def get_dynamic_object() -> Any:
# Returns an object whose type is not known at compile time
return "a string" # In reality, this could be any type
# Usage of the third-party library
obj = ThirdPartyLibrary.get_dynamic_object()
# Attempt to use the object as a string, even though its type is 'Any'
length = len(obj) # type: ignore
# Deliberately long line to violate PEP 8 line length rule, suppressed with noqa
print(f"The length of the object, a dynamically typed one, is just {length}") # noqa
鉴于这是您的代码结构
├── examples
│ └── example_1.py
├── docs
│ ├── conf.py
│ ├── index.rst
│ ├── Makefile
│ ├── _static
│ │ └── example_1.py
│ └── usage.rst
├── LICENSE
├── Makefile
├── pyproject.toml
├── README.rst
└── sphinx_no_pragma.py
可以使用html_extra_path = ["examples"]或从docs/_static创建到examples/example_1.py的符号链接。
然后按照以下方式将其包含到您的文档中
文件名:example.rst
.. container:: jsphinx-download
.. literalinclude:: _static/example_1.py
:language: python
:lines: 1-
*See the full example*
:download:`here <_static/example_1.py>`
现在,渲染后的代码将不包含 # type: ignore 或 # noqa 预处理指令注释。
查看演示。点击 在此查看完整示例 链接查看原始代码。
测试
使用 unittest 运行测试
python -m unittest sphinx_no_pragma.py
或 pytest
pytest
许可证
MIT 许可
支持
关于安全问题,请联系作者部分提供的电子邮箱。
对于总体问题,请访问 GitHub。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码发行版
构建发行版
sphinx_no_pragma-0.1.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7705899a36ccc8f94f2e7c9b78b4490fb246d8c29b603cfc4ede123a28f337a8 |
|
MD5 | ce229410082e97d68124fa451a9ea1e7 |
|
BLAKE2b-256 | 1b28b8d15278f7dbb5f01aa7f136a109cf92b377def2472e0ae8cb54713ef2da |
sphinx_no_pragma-0.1.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a1762d3f934c317b61fde8629c15f5b02d76290c6865a26012e7dd158818c1ba |
|
MD5 | a410408c33def63560f2c28d35eeae0d |
|
BLAKE2b-256 | ee9b9041dcc34cdd7ce3e7ef08c35012fb25ab9e6b0da4166810a4ba8153663f |