检查输入的文本在 Xtext 中是否有效
Check if entered text is valid in Xtext
假设我们有这样的语法。
Model:
greeting+=Greeting*;
Greeting:
'Hello' name=ID '!';
我想检查名称中的文本是否为有效文本。
所有有效的词都保存在一个数组中。
该数组还应填充给定文件中的单词。
那么是否可以在运行时检查这个,也许也可以使用这个词作为建议。
谢谢
为此,您可以使用验证器。
可以找到有关它的简单视频教程 here
在您的情况下,验证器中的函数可能如下所示:
public static val INVALID_NAME = "greeting_InvalidName"
@Check
def nameIsValid(Greeting grt) {
val name = grt.getName() //or just grt.Name
val validNames = NewArrayList
//add all valid names to this list
if (!validNames.contains(name)) {
val errorMsg = "Name is not valid"
error(errorMsg, GreetingsPackage.eINSTANCE.Greeting_name, INVALID_NAME)
}
}
如果您的 DSL 未命名为 Greetings,您可能需要替换 "GreetingsPackage"。
传递给错误方法的静态字符串用于识别错误。当您想要实施 Quickfixes 时,这一点变得很重要,这是您要求的第二件事,因为它们提供了为程序员提供一些如何实际解决此特定问题的想法的可能性。
因为我自己没有任何实施快速修复的经验,所以我只能给你 this 作为参考。
假设我们有这样的语法。
Model:
greeting+=Greeting*;
Greeting:
'Hello' name=ID '!';
我想检查名称中的文本是否为有效文本。 所有有效的词都保存在一个数组中。 该数组还应填充给定文件中的单词。
那么是否可以在运行时检查这个,也许也可以使用这个词作为建议。
谢谢
为此,您可以使用验证器。
可以找到有关它的简单视频教程 here
在您的情况下,验证器中的函数可能如下所示:
public static val INVALID_NAME = "greeting_InvalidName"
@Check
def nameIsValid(Greeting grt) {
val name = grt.getName() //or just grt.Name
val validNames = NewArrayList
//add all valid names to this list
if (!validNames.contains(name)) {
val errorMsg = "Name is not valid"
error(errorMsg, GreetingsPackage.eINSTANCE.Greeting_name, INVALID_NAME)
}
}
如果您的 DSL 未命名为 Greetings,您可能需要替换 "GreetingsPackage"。
传递给错误方法的静态字符串用于识别错误。当您想要实施 Quickfixes 时,这一点变得很重要,这是您要求的第二件事,因为它们提供了为程序员提供一些如何实际解决此特定问题的想法的可能性。
因为我自己没有任何实施快速修复的经验,所以我只能给你 this 作为参考。