用于将外部文件中的元数据锚定到源代码的系统
项目描述
体育
注意:这个 spor 的 Python 实现已被Rust 实现取代。这个版本可能会与 Rust 版本保持兼容,但现在不要指望它。
用于将外部文件中的元数据锚定到源代码的系统。
spor 允许您为源代码的元素定义元数据。元数据与您的源代码保存在一个单独的文件中,这意味着您不需要将额外的信息编码到注释中,从而使您的源文件变得混乱。为了在处理源代码随时间变化的事实的同时实现这一点,spor 使用各种“锚定”技术来保持元数据与源代码同步(或者让您知道它们何时变得难以管理地不同步)。
快速开始
在您可以使用 spor 将元数据锚定到文件之前,您需要使用init命令初始化存储库:
$ spor init
这在精神上与git init非常相似。它会在您的当前目录中创建一个名为.spor的新目录,这是 spor 保存所需信息的地方。
现在您可以创建锚点。假设您有一个文件example.py,如下所示:
# example.py
def func(x):
return x * 2
您可以通过指定起始偏移量和锚点宽度将元数据锚定到第 4 行(函数定义),如下所示:
$ echo "{\"meta\": \"data\"}" | spor add example.py 32 12 10
您不必将元数据通过管道传输到add命令中。如果你不这样做,spor 会弹出一个编辑器,这样你就可以在那里输入元数据。
最后的10指定了我们用于更新锚点的锚定代码周围的“上下文”的大小。
这会将字典{meta: data}与代码return x * 2相关联。您可以使用list命令查看此元数据:
$ spor list example.py
example.py:32 => {'meta': 'data'}
元数据可以是任何有效的 JSON。spor 根本不查看数据,因此完全由您决定那里的数据。
动机
我使用这个工具的主要动机来自我在突变测试工具Cosmic Ray上的工作。CR 用户需要能够指定其源代码的哪些部分不应该被改变,或者哪些应该只以特定的方式被改变。与其让他们将这些处理指令嵌入到源代码中,我认为让他们使用单独的元数据文件这样做会更干净、更整洁。
特征
spor 需要支持以下功能:
将元数据添加/编辑/删除到源文件中特定范围的文本
查询现有元数据
尽可能自动更新元数据,或在不更新时报告错误
为使用新的锚定数据“更新”元数据提供便利设施
设计需要对人类用户(即,因为他们可能需要不时手动处理元数据)和程序用户都敏感。我相信设计会随着我们的发展而发展,所以我会尽量保持简单明了。
理想情况下,spor 将适用于任何编程语言(实际上,任何文本文档),尽管它最初的目标是 Python 源代码。
发展
Spor 是新的和足够小的,我们可以做一些有趣的事情,比如尝试新工具。我们使用的是诗歌而不是setuptools等。所以如果你想为 spor 做贡献,你需要做的第一件事就是安装诗歌。
要安装软件包,请使用:
poetry install
测试
上面的安装命令也将安装所有测试依赖项。要运行所有测试,请运行tox:
tox
要仅运行pytests单元测试,请运行:
poetry run pytest tests/unittests
要运行萝卜测试,请运行:
poetry run radish tests/e2e/features -b tests/e2e/radish
笔记
“锚定”这个领域并不新鲜,有一些现有的工作需要我们关注:
别利科娃,玛丽亚。“源代码的元数据锚定:稳健的位置描述符定义、构建和解释”
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。