向 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 无法导入它,并显示一条消息“没有导入新条目”。然后我查看了一个示例导出,发现我应该使用<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] 警告 - 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 发布