在 Groovy-Eclipse 中导入 DSL 的自定义内容

发布于 2024-12-08 17:57:26 字数 1005 浏览 0 评论 0原文

我使用 Groovy 作为计算引擎 DSL,并且非常喜欢我们现在在 Eclipse 中通过 STS 和 Groovy-Eclipse 插件提供的支持(我使用的是 STS 2.8.0M2,最新的里程碑是 Groovy-Eclipse 2.5.2) 。

我遇到的一个问题是我不知道如何让 Groovy 编辑器“知道”我添加到脚本运行器中的自动导入,这意味着 Eclipse 给了我一大堆虚假错误。如果您使用 Groovy 类加载器,您可以“免费”添加额外的导入,这样您就不需要在脚本中进行导入。

我尝试过 Groovy-Eclipse 中的 DSLD 支持(可用于添加自动完成支持),但对我来说,这并不是我可以用它做的事情 - 我没有找到 DSLD 文档最简单的遵循。

Eclipse 中 Groovy 的推理设置看起来也不正确。

例如:

def result = new CalculationResult()

CalculationResult 类上出现错误,因为它未导入,但由于 Groovy 类加载器上的自定义导入,脚本将在我的环境中正确执行。我正在使用 Groovy 提供的标准导入自定义,例如:

import org.codehaus.groovy.control.customizers.ImportCustomizer
import org.codehaus.groovy.control.CompilerConfiguration

def importCustomizer = new ImportCustomizer()
importCustomizer.addImport 'CalculationResult', 'ch.hedgesphere.core.type.CalculationResult'

def configuration = new CompilerConfiguration()

configuration.addCompilationCustomizers(importCustomizer)
...

任何指针赞赏。

I'm using Groovy for a calculation engine DSL and really like the support we now have in Eclipse with STS and the Groovy-Eclipse plug-in (I'm on STS 2.8.0M2 with latest milestone of Groovy-Eclipse 2.5.2).

One issue I have is I don't know how to get the Groovy editor to 'know' the automatic imports I've added to my script runner, meaning Eclipse gives me a whole bunch of false errors. If you use the Groovy class loader, you can add additional import for 'free', so you avoid needing to do imports in your script.

I've had a play with the DSLD support in Groovy-Eclipse (which can be used to add auto-completion support) but it's not obvious to me that this is something I could do with it - I don't find the DSLD documentation the simplest to follow.

The inferencing settings for Groovy in Eclipse didn't look like the right thing either.

For example:

def result = new CalculationResult()

gives me an error on the CalculationResult class as it's not imported, but the script will execute correctly in my environment because of the customized imports on the Groovy class loader. I'm using the standard import customization provided by Groovy, for example:

import org.codehaus.groovy.control.customizers.ImportCustomizer
import org.codehaus.groovy.control.CompilerConfiguration

def importCustomizer = new ImportCustomizer()
importCustomizer.addImport 'CalculationResult', 'ch.hedgesphere.core.type.CalculationResult'

def configuration = new CompilerConfiguration()

configuration.addCompilationCustomizers(importCustomizer)
...

Any pointers appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

昔日梦未散 2024-12-15 17:57:26

这似乎在他们的 bugtracker 中出现在插件的 2.6 版本中。

但安德鲁·艾森伯格的评论并不是好兆头:

不幸的是,这不是 DSLD 可以做到的事情。自从一个
缺少导入可能意味着编译错误,我们需要一种方法
增加编译器对此的查找。可能有一种方法可以指定
这些信息位于 DSLD 内,但这意味着挂钩
DSLD 以一种非常不同的方式。更有可能的是,这必须是
通过 Eclipse 插件(如 gradle 工具)指定。

另一种可能性是我们可以确保某些类型的 AST
变换是在协调期间应用的,因此编辑器只需
“神奇地”知道这些额外的进口。我们必须调查
然而这样做的可行性。

不过,也许对这个问题进行投票不会出错?

This seems to be in their bugtracker as coming in the 2.6 release of the plugin.

But the comment from Andrew Eisenberg doesn't bode well:

Unfortunately, this is not something that DSLDs can do. Since a
missing import could mean compile errors, we would need a way to
augment the compiler lookup for this. There might be a way to specify
this information inside of a DSLD, but that would mean hooking into
DSLDs in a very different way. More likely, this will have to be
specified through an Eclipse plugin (like the gradle tooling).

Another possibility is that we can ensure that certain kinds of AST
Transforms are applied during a reconcile and so the editor would just
"magically" know about these extra imports. We will have to look into
the feasibility of this, however.

Still, maybe a vote on that issue wouldn't go amiss?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文