Добавление языка Markdown JSX для внедрения в IntelliJ

Краткое содержание

Итак, я пытаюсь использовать MDX в своем проекте. Это просто MarkDown с некоторыми JSX (включая импорт ES6). Я хочу использовать IntelliJ для редактирования файлов и получения правильной подсветки синтаксиса для битов Markdown и JSX.

Я думаю, что я должен быть в состоянии настроить внедрение языка для этого, но я немного застрял, пытаясь двигаться вперед. Похоже, мне нужно будет сам написать XML, так как синтаксис языка, который я хочу, - это JSX, и единственными целевыми языками в пользовательском интерфейсе являются xml, js, sql и несколько других распространенных.

Что я пробовал

Глядя на источник инъекций Groovy и Java, я начал собирать воедино то, что мне нужно.

Я посмотрел на структуру PSI одного из моих примеров файлов 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 - 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 тэг, или если бы я предпочел использовать шаблон вместо места.

0 ответов

Согласно комментарию по этой проблеме, планируется выпуск дополнения, которое включит "базовую поддержку" MDX в продуктах JetBrains:

комментарий фото

Пока не ясно, что означает "базовая поддержка MDX", но это будет больше, чем просто подсветка синтаксиса и завершение слов. У него будет "помощь в кодировании", которая, как я предполагаю, будет контекстными действиями, автоматическим импортом и т. Д. Я попросил внести ясность в тему и обновлю этот ответ, если услышу что-нибудь еще.

Другие вопросы по тегам