Добавление языка инъекций Markdown JSX в IntelliJ - PullRequest
0 голосов
/ 23 октября 2018

Краткое резюме

Итак, я пытаюсь использовать 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, и если я предпочитаю использовать шаблон вместо места.

...