我正在做我的项目以创建一个工具,该工具可以找到特定软件的两个版本之间的结构规律(结构规律是源代码中必须遵守的规则)的变化,并检查最新版本是否违反结构规律旧版本的。
我正在使用一种称为EKEKO
(针对 Eclipse 工作区的 Clojure 库元编程)的查询语言。我创建了要使用的谓词,并且我可以找到两个版本之间的区别。
但是我的问题是找到一种方法来举例说明:toString
旧版本中调用的所有方法都应该有一个新名称,即print
. 所以在这种情况下,我需要检查新版本是否符合结构合同(关于名称约定)。
(defn differenceInContract1
[?projectName1 ?projectName2 f]
(def result1 (projectResults ?projectName1 f))
(def result2 (projectResults ?projectName2 f))
(def tuple1 (set (map (partial map str) result1)))
(def tuple2 (set (map (partial map str) result2)))
(clojure.set/difference tuple1 tuple2))
在前面的代码中,我可以得到项目的两个版本之间的不同。我需要做的是类似于下面的代码:
(defn changeContract
[?proj1 ?proj2 f1 f2]
(and (projectResults ?projec1 f1)
(projectResults ?projec2 f2)))
projectResults 在给定项目上应用 Ekeko 环境并找到指定谓词的结果,在这种情况下(f1 和 f2)。
但是另外,我需要小心比较操作,因为不同项目中的同一个类并不意味着它们是相等的。
有什么想法可以帮助我继续前进吗?提前致谢!