我有一个Scala宏,它依赖一个任意的XML文件,这个文件由一个包含其位置的静态字符串指定。
def myMacro(path: String) = macro myMacroImpl
def myMacroImpl(c: Context)(path: c.Expr[String]): c.Expr[Any] = {
// load file specified by path and generate some code
...
}
这意味着,如果xml文件格式不正确,宏就无法展开。目前,我正在提供一个错误消息,其中包含xml文件中出错位置的文本表示。但是,这显然不是最好的解决方案。
是否可以为生成的代码提供来自不同(可能非Scala)文件的源位置,以便错误指向包含xml文件的scala文件而不是scala文件本身?我不知道如何在不修改现有内容的情况下创建位置。