用于将外部文件中的元数据锚定到源代码的系统
spor的Python项目详细描述
孢子
用于将外部文件中的元数据锚定到源代码的系统。
spor允许您为源代码的元素定义元数据。这个 元数据与源代码保存在一个单独的文件中,这意味着 你不需要在源文件中添加额外的信息 编码成注释。在处理事实的同时做到这一点 源代码随着时间的推移而改变,spor使用了各种“锚定” 保持元数据与源代码同步的技术(或 知道他们何时变得难以控制的不同步)。
快速启动
在使用spor将元数据定位到文件之前,需要初始化 使用init命令的存储库:
$ spor init
这在精神上与git init非常相似。它在 当前目录名为.spor,这是spor将保存 它需要的信息。
现在您可以创建锚定。假设您有一个文件example.py,如 这个:
# example.pydeffunc(x):returnx*2
通过如下指定起始偏移量和锚定宽度,可以将元数据锚定到第4行(函数定义):
$ echo "{\"meta\": \"data\"}" | spor add example.py 32 12 10
You don’t have to pipe the metadata into the ^{tt5}$ command. If you don’t, spor will pop up an editor so that you can enter the metadata there.
结尾的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
等,而是poetry。所以如果你想为spor做贡献,
你需要做的第一件事是install poetry。
要安装软件包,请使用:
poetry install
测试
上面的安装命令将安装所有的测试依赖项 好。要运行所有测试,请运行^{tt8}$:
tox
要运行pytests
单元测试,请运行:
poetry run pytest tests/unittests
要运行radish
测试,请运行:
poetry run radish tests/e2e/features -b tests/e2e/radish