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