在 VSCode 中为 Rascal 创建镜头时如何指向当前文件?

问题描述 投票:0回答:1

有没有办法在语言服务器运行时指向当前文件(按位置),这样,您可以:

  • 运行一些任意函数
    doSomething
  • 并在尝试在 VSCode 中创建镜头时在此类函数中使用该指针?
rascal
1个回答
0
投票

将参数传递给镜头处理程序的方法是首先使用新命令扩展

Command
语言,如下所示:

data Command = myCommand(loc aParameter);

接下来镜头检测器将所有镜头收集为一个文件,并绑定所有参数。这是一个使用 / 收集表达式位置的示例:

rel[loc,Command] myLenses(start[Program] input) = {<e@\loc, myCommand(e@\loc, title="do something with this exp")> | /Exp e := input};

最后命令处理程序在触发时执行命令:

value myHandler(myCommand(loc e) {
     // Do something with e
     return ("result": true);
}

然后您将镜头和处理程序函数注册为贡献。

小型解析树或抽象减法树可以直接作为命令的参数,因此您不必重新解析,但是如果您打开了许多大型编辑器,最好传递位置并再次解析,以避免内存泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.