跟踪/合并用户更改的基于模板的代码生成
本文关键字:于模板 代码生成 合并 用户 跟踪 | 更新日期: 2023-09-27 18:10:11
是否已经存在一个模板/代码生成器来跟踪用户对其输出的更改?我甚至不确定这是否有意义,但我认为这样的东西可能是一种有趣的变化跟踪,比SCM更紧密地集成到代码中…
Data.xml
<Classes>
<Class>Class1</Class>
</Classes>
模板<# for(var c in XDocument.Load("Data.xml").Element("Classes").Elements("Class")) { #>
class <#=c.Value#> {
public <#=c.Value#>() {
// <InsertPoint>
// </InsertPoint>
}
}
<# } #>
输出class Class1 {
public Class1() {
// <InsertPoint>
// </InsertPoint>
}
}
用户改变
class Class1 {
public Class1() {
// <InsertPoint>
System.Console.WriteLine("I am Class1");
// </InsertPoint>
}
}
->模板变成如下:
<# for(var c in XDocument.Load("Data.xml").Element("Classes").Elements("Class")) { #>
class <#=c.Value#> {
public <#=c.Value#>() {
// <UserInsert id="1">
System.Console.WriteLine("I am Class1");
// </UserInsert>
// <InsertPoint>
// </InsertPoint>
}
}
<# } #>
data.xml中的内容通常被称为模型。在XML中完成,我们可以称之为"树模型"。换句话说,您正在根据预定义的模型应用(执行)模板。
在这种情况下跟踪用户的变化也可以称为"往返"工程:一个双向的变化。
ABSE项目(免责声明:我是项目负责人)定义了一种非常接近您要求的模型驱动代码生成方法:它使用可执行模板并通过树模型(但不是XML)生成代码。但是,您可以直接在模型中添加自己的代码,而不是检测代码中的更改,这样就可以跳过"往返"步骤。
有用于区分xml文档的工具。如果可以将代码转换成以xml表示的ast,则可以在文档上应用这些工具,然后将其转换回代码。