Краткое резюме
Итак, я пытаюсь использовать MDX в своем проекте.Это просто MarkDown с некоторыми JSX (включая импорт ES6). Я хочу использовать IntelliJ для редактирования файлов и получения правильной подсветки синтаксиса как для битов Markdown, так и для битов JSX.
Я думаю, что я должен быть в состояниинастроить для этого внедрение языка , но я немного застрял, пытаясь двигаться вперед.Похоже, мне нужно будет сам написать XML, поскольку синтаксис языка, который я хочу, - это JSX, и единственными целевыми языками в пользовательском интерфейсе являются xml, js, sql и несколько других распространенных.
Что я пробовал
Глядя на источник для Groovy-инъекций и Java-инъекций , я начал собирать воедино то, что мне нужно.
Я посмотрел на 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] WARN - s.compiler.PatternCompilerImpl - JSX в Markdown: 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
, и если я предпочитаю использовать шаблон вместо места.