我正在做我的项目来创建一个工具,可以在特定软件的两个版本之间找到结构规则的变化(结构规则是源代码中必须遵守的规则),并检查是否违反了最新版本旧版本的结构规律。
我正在使用一种名为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)。
但是,我需要对比较操作保持谨慎,因为不同项目中的同一个类并不意味着它们是相同的。
有什么想法可以帮助我继续前进?提前谢谢!