向 IntelliJ 添加 Markdown JSX 语言注入

Posted

技术标签:

【中文标题】向 IntelliJ 添加 Markdown JSX 语言注入【英文标题】:Adding Markdown JSX Language Injection to IntelliJ 【发布时间】:2019-03-28 00:45:18 【问题描述】:

小结

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

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

我的尝试

查看Groovy injections 和Java injections 的来源,我开始拼凑我需要的东西。

我 looked at the PSI Structure 我的一个示例 MDX 文件(我已告诉 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 无法导入它,并显示一条消息“没有导入新条目”。然后我查看了一个示例导出,发现我应该使用&lt;LanguageInjectionConfiguration&gt; 标签,所以我尝试了:

<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] 警告 - s.compiler.PatternCompilerImpl - Markdown 中的 JSX:psiElement().withElementType(org.intellij.plugins.markdown.lang.MarkdownTokenTypes.HTML_TAG)

java.lang.IllegalStateException: 33(.): 'org.'方法名 start 无效,应为 '('

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

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

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

MarkdownTokenTypes.HTML_TAG 绝对是one of the withElementType method signatures 所需的IElementType

结论

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

【问题讨论】:

就上下文而言,我知道 IntelliJ 支持对于 MDX 项目和 JetBrains 来说都是一个悬而未决的问题。 github.com/mdx-js/mdx/issues/119 youtrack.jetbrains.com/oauth?state=%2Fissue%2FWEB-32599 这似乎是一个低调的贡献,但我不能完全掌握如何制作一个像样的语言注入器。 【参考方案1】:

根据this issue 上的评论,计划推出的插件将在 JetBrains 产品中启用对 MDX 的“基本支持”:

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

【讨论】:

以上是关于向 IntelliJ 添加 Markdown JSX 语言注入的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA 2022.2 Beta 2 发布

pycharm / intellij - jupyter markdown 不渲染

markdown IntelliJ IDEA热键

markdown Intellij终端

markdown 插件para intellij

css css for intellij markdown