我对Rubberduck 的一个非常限制因素是,仅仅在安装了Rubberduck 的开发PC 上打开VBA 项目就会对其进行修改。即使我没有故意更改任何内容而只是查看它,某些内容也会发生变化,因为 VB 编辑器会询问我是否要将更改保存到它打开的每个项目中。
将此与使用纯文本文件作为源代码的“正常”编程语言进行比较。例如,如果我从某人那里收到一个 .py python 脚本,对其进行编辑以添加一个功能并将其发回,他们永远不会知道,如果我使用记事本、vscode、vim 或其他任何东西来编辑它,对他们来说也没有什么关系
如果我对 VBA 项目做了同样的事情,并且安装了 rubyduck,它会以某种方式更改文件,甚至是我不应该接触的部分代码,这正是我想要避免的。如果可能的话,我想让自己使用Rubberduck 变得不再重要。
我想要实现的是:
关键要求是:
我唯一想到的是将文本复制到另一个项目的各种形式(直接,或导出到文本文件,然后导入或类似),但这听起来有问题:
我确实看到了这个问题,但它涉及专门排除测试模块的代码。就我而言,我想知道是否有一种正确、干净的方法来完全避免 Rubberduck 的所有副作用,而不仅仅是不包含某个模块或代码段。
它必须是ProjectId.
早在 2015 年,我们就制作了一个集成了 git 的源代码控制面板,允许您直接从 VBE 获取、拉取、提交和推送。虽然理论上很棒,但实际上它变成了一场噩梦,最终被删除,这样我们就可以专注于我们想要为 Rubberduck 构建的实际功能......但到那时,它已经ProjectId无处不在,删除它需要我们进行巨大的改变。没有准备好……所以它留下来了,因为它被认为是相当无害的(确实如此)。
由于 VBA 项目的嵌入式性质,将编辑器内代码保持为“单一事实来源”意味着我们需要一种方法来唯一标识任何给定项目,以便知道带有 Module1 标准模块的 Project1 是您的代码旨在受到源代码控制:如果您打开了 2 个以上的工作簿,并且每个工作簿都有一个 Module1 标准模块,而没有[编写一些特定于主机的代码或]来自主机文档的某种 ID,则无法知道确定哪个 Module1 模块应该与存储库同步。
因此,每当 Rubberduck 第一次看到一个项目(即在初始解析期间)时,它都会生成一个 ID,然后将其写入属性VBProject.HelpFile,希望没有人使用该属性(它指的是早已被弃用的 Windows 帮助技术)。
如果该字段中已经有一个值,则 Rubberduck 将其作为唯一的项目 ID 并使用它运行,而无需修改宿主项目。
您可以生成一个 GUID(以确保唯一性)并将其放入 中VBProject.HelpFile,保存文档,然后 Rubberduck 将不理会它。
或者,您可以在保存和关闭之前清除该值,但随后知道 Rubberduck 下次遇到该项目时将生成并写入一个新 ID。
Rubberduck 3.0(目前正在开发)本质上是完全重写,不会这样做。