Мы используем язык Kotlin для плагина. Если вы умеете программировать на Java, то сразу сможете читать и писать код на Kotlin. Kotlin очень похож на Java, но имеет менее многословный синтаксис и лучшую безопасность. Он также имеет некоторые общие черты с Rust: вывод типов, неизменность по умолчанию, отсутствие нулевых указателей (кроме тех, что приходят из Java).
Если вы не уверены, как реализовать что-то в Kotlin, задайте вопрос в нашем [Gitter], отправьте PR на Java или используйте действие Convert Java to Kotlin в IDE.
Для разработки требуется Java 17. Например, вы можете установить openJDK или Amazon Corretto. Вы также можете установить Java прямо из вашей IntelliJ IDEA.
git clone https://github.com/intellij-rust/intellij-rust.git
cd intellij-rust
Запустите конфигурацию запуска RunIDEA
или RunCLion
, чтобы собрать и запустить IDE разработки (IntelliJ IDEA или CLion соответственно) с плагином.
Мы используем gradle с плагином gradle-intellij, чтобы создать плагин. В корне репозитория есть скрипт-обёртка (gradlew
), который автоматически загружает соответствующую версию gradle при наличии установленного JDK.
Общие задачи Gradle:
./gradlew :plugin:buildPlugin
— полностью собрать плагин и создать архив в plugin/build/distributions
, который можно установить в вашу IDE через действие Install plugin from disk...
, доступное в меню Settings > Plugins
.
./gradlew :plugin:runIde
— запустить IDE разработки с установленным плагином. Может запускать IntelliJ IDEA или CLion. Конкретная IDE зависит от свойства baseIDE
в файле gradle.properties
.
./gradlew :test
— более пяти тысяч тестов. Мы любим тесты!
Обратите внимание на :
перед именем задачи. Репозиторий содержит несколько модулей, которые принадлежат двум независимым плагинам для Rust и TOML, организованным как подпроекты gradle. Запуск ./gradlew :task
выполняет задачу только для корневого модуля (основной модуль плагина Rust), ./gradlew :intellij-toml:task
будет выполнять задачу для модуля TOML, а ./gradlew task
выполнит её для всех модулей.
Вы можете получить последнюю версию IntelliJ IDEA Community Edition здесь, она бесплатна.
Импортируйте проект плагина, как вы это делаете с любым другим проектом на основе gradle. Например, нажмите Ctrl + Shift + A
, выберите Import project
и выберите файл build.gradle.kts
из корневого каталога плагина.
Существуют конфигурации запуска Test
, RunIDEA
, RunCLion
и Generate Parser
для наиболее распространённых задач. Однако сначала попробуйте выполнить ./gradlew :test
, чтобы загрузить все необходимые зависимости и запустить все задачи генерации кода. К сожалению, во время импорта IDEA может удалить .idea/runConfigurations
, просто верните изменения в каталог, если это произойдёт.
Возможно, вам захочется установить следующие плагины:
Чтобы найти проблему для работы, ищите проблемы с меткой help wanted
на Github или, ещё лучше, попробуйте решить проблему, с которой столкнулись сами при использовании плагина.
При выборе проблемы вы можете перемещаться по меткам E-
. Они описывают опыт, необходимый для решения проблемы (E-easy
, E-medium
, E-hard
или E-unknown
). Метка [E-mentor
] означает, что кто-то знает, как решить проблему, и, скорее всего, они предоставили некоторые инструкции о том, как это сделать, ссылки на соответствующий код и так далее. Если вы ищете хорошую первую проблему, проблема с меткой E-mentor
— лучший выбор. IntelliLang (https://github.com/JetBrains/intellij-community/tree/master/plugins/IntelliLang) плагин
:copyright
— интеграция с плагином copyright.:duplicates
— поддержка инспекции «Дублирующийся фрагмент кода».:coverage
— интеграция с плагином coverage.:grazie
— интеграция с плагином grazie.:js
— взаимодействие с языком JavaScript.:ml-completion
— интеграция с плагином «Завершение кода на основе машинного обучения» (Machine Learning Code Completion).Если вы хотите реализовать интеграцию с другим плагином или IDE, вам следует создать новый модуль Gradle для этого.
Вы можете создавать плагин для разных основных версий платформы. Обычно мы поддерживаем последнюю выпущенную версию платформы и EAP следующей версии. Однако каждый артефакт плагина совместим только с одной основной версией. Свойство platformVersion
в файле gradle.properties
используется для указания основной версии, с которой будет совместим артефакт плагина. Поддерживаемые значения совпадают с номерами веток платформы (https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html#intellij-platform-based-products-of-recent-ide-versions).
Иногда в новой версии платформы происходят несовместимые изменения. Чтобы избежать создания нескольких параллельных ветвей VCS для каждой версии, у нас есть отдельные папки для каждой версии для хранения платформозависимого кода.
Например, текущая версия платформы — 181, следующая версия — 182, а org.rust.ide.navigation.goto.RsImplsSearch
должен иметь отдельные реализации для каждой версии. Тогда структура исходного кода проекта будет выглядеть следующим образом:
+-- src
| +-- 181/kotlin
| +-- org/rust/ide/navigation/goto
| +-- RsImplsSearch.kt
| +-- 182/kotlin
| +-- org/rust/ide/navigation/goto
| +-- RsImplsSearch.kt
| +-- main/kotlin
| +-- другой независимый от платформы код
Конечно, в компиляции будет использоваться только один пакет платформозависимого кода.
Гораздо проще понять изменения кода, если они сопровождаются тестами. Большинство тестов управляются фикстурами. Они обычно:
Все тестовые классы помещаются в каталог src/test/kotlin
. Существует два способа предоставления фикстур для тестов. Первый способ — поместить файлы Rust в src/test/resources
.
В приведённом ниже примере RsFormatterTest.kt
— это тестовый класс, blocks.rs
— фикстура для начального состояния, а blocks_after.rs
— фикстура для конечного состояния. Рекомендуется размещать фикстуры в том же пакете, что и тесты.
+-- src/test/kotlin
| +-- org/rust/ide/formatter
| +-- RsFormatterTest.kt
|
+-- src/test/resources
+-- org/rust/ide/formatter
+-- fixtures
+-- blocks.rs
+-- blocks_after.rs
Другой способ предоставления фикстур — использование многострочных строковых литералов Kotlin в тройных кавычках. Вы можете получить подсветку синтаксиса Rust внутри них, если у вас есть аннотация @Language("Rust")
. Пример можно увидеть здесь (https://github.com/intellij-rust/intellij-rust/blob/b5e680cc80e90523610016e662a131985aa88e56/src/test/kotlin/org/rust/ide/intentions/MoveTypeConstraintToWhereClauseIntentionTest.kt).
Как правило, следует отдавать предпочтение фикстурам в виде строк в тройных кавычках вместо отдельных файлов Rust.
Файлы фикстур очень просты: это код на языке Rust! Выходные фикстуры, напротив, могут быть кодом на языке Rust, над которым вы выполнили действие, HTML (для сгенерированной документации) или любым другим выводом, который вы хотели бы проверить. Выходные фикстуры имеют то же имя файла, что и входные.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )