Xtext 中的验证与代码生成
1. 验证与快速修复
在编程过程中,验证错误并提供快速修复方案是提高开发效率的重要环节。对于 Xtext 而言,快速修复可以基于源文本(文本修改)或模型(语义修改)来执行。
1.1 文本修改
文本修改时,可以指定一个接受单个 IModificationContext 类型参数的 lambda 表达式。由于 Xtend 的类型推断机制,只需指定参数名称即可。在代码中,通过传递的 IDocument 参数来访问要修改的文本。利用 Issue 对象中提供的错误/警告的偏移量和长度,使用 get(offset, length) 和 replace(offset, length, text) 方法对首字母进行大写处理。不过,这种实现快速修复的策略存在一个缺点,即需要处理编辑器的实际文本内容。
1.2 模型修改
另一种策略是基于程序在内存中以 EMF 模型形式存在这一事实。如果修改该模型,Xtext 编辑器会自动更新其内容。因此,可以指定一个接受两个参数的 lambda 表达式:包含错误的 EObject 和修改上下文。
例如,要将属性的首字母小写,可以使用以下代码:
@Fix(EntitiesValidator.INVALID_ATTRIBUTE_NAME)
def void uncapitalizeAttributeNameFirst
超级会员免费看
订阅专栏 解锁全文
8

被折叠的 条评论
为什么被折叠?



