我在这个领域不太了解。但我想如果我们可以使用quote
来获取AST,我们可以使用AST来衡量代码的相似性吗?因为如果我们想做Fine-Grained Reuse
,我认为我们可以使用分析器来判断代码的相似性,这很棒。
答案 0 :(得分:1)
比较AST元组并确定它们是否相似是相对简单的。我不确定这对代码重用有何帮助。
我已经创建了一个库,用于确定Elixir数据结构是否与类似的各种定义相似。
https://github.com/philosophers-stone/phenetic
我对类似的定义倾向于关注有限的集合术语中术语的基本类型。即具有原子列表值的地图。但我用简单的代码示例使用它。
test "congruent quote do output" do
data = quote do: Enum.map(1..3, fn(x) -> x*x end)
data_transform = quote do: Enum.map(1..3, fn(y) -> y*y end)
congruent = PhStPhenetic.congruent(data)
assert true == congruent.(data_transform)
end
这主要是为了确保它能够使用复杂的嵌套结构而不是代码重构的任何特定应用程序。