4

简短的摘要

所以,我试图在我的项目中使用MDX 。这只是 MarkDown 与一些 JSX(包括 ES6 导入)混合在一起。我想使用 IntelliJ 编辑文件并为 Markdown 位和 JSX 位获得正确的语法突出显示。

我想我应该能够为此配置语言注入,但我在尝试前进时有点停滞不前。看起来我需要自己编写 XML,因为我想要的语言语法是 JSX,而 UI 中唯一的目标语言是 xml、js、sql 和其他一些常见的语言。

我试过的

查看Groovy 注入Java 注入的源代码,我开始拼凑我需要的东西。

查看了我的一个示例 MDX 文件的 PSI 结构(我已经告诉 IntelliJ 将其视为 Markdown)。我可以看到我的 JSX 标记被注册为 HTML_TAG 元素。

<?xml version="1.0" encoding="UTF-8"?>
<component name="LanguageInjectionConfiguration">
    <injection language="JSX" injector-id="markdown">
        <display-name>JSX in Markdown</display-name>
        <place><![CDATA[psiElement().withElementType(org.intellij.plugins.markdown.lang.MarkdownTokenTypes.HTML_TAG)]]></place>
    </injection>
</component>

IntelliJ 未能导入该消息,并显示“没有导入新条目”。然后我查看了一个示例导出,发现我应该使用<LanguageInjectionConfiguration>标签,所以我尝试了:

<LanguageInjectionConfiguration>
    <injection language="JSX" injector-id="markdown" enabled="true">
        <display-name>JSX in Markdown</display-name>
        <place><![CDATA[psiElement().withElementType(org.intellij.plugins.markdown.lang.MarkdownTokenTypes.HTML_TAG)]]></place>
    </injection>
</LanguageInjectionConfiguration>

...但是,我收到了同样的错误。

查看 IntelliJ 日志,它显示此错误:

2018-10-23 12:17:28,680 [3894254] WARN - s.compiler.PatternCompilerImpl - Markdown 中的 JSX:psiElement().withElementType(org.intellij.plugins.markdown.lang.MarkdownTokenTypes.HTML_TAG)

java.lang.IllegalStateException: 33(.): 'org.' 方法名称开始无效,应为“(”

在 com.intellij.patterns.compiler.PatternCompilerImpl.throwError(PatternCompilerImpl.java:293)

...很长很长的堆栈跟踪...

在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

MarkdownTokenTypes.HTML_TAG绝对是方法签名之一IElementType所必需的。withElementType

结论

我担心我把这件事复杂化了。是否有编写自定义语言注入的好指南?我不清楚place标签的返回类型应该是什么,也不清楚我是否应该使用模式而不是位置。

4

1 回答 1

1

根据对此问题的评论,有一个计划中的插件即将推出,它将为 JetBrains 产品中的 MDX 启用“基本支持”:

评论图片

尚不清楚“基本 MDX 支持”是什么意思,但它不仅仅是语法高亮和单词完成。它将具有“编码帮助”,我认为这将是上下文操作、自动导入等。我要求在线程上澄清,如果我听到更多信息,我会更新这个答案。

于 2020-05-08T22:31:17.183 回答