1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-intellij-rust

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
CONTRIBUTING.md 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 21:09 ffe6b81

Kotlin

Мы используем язык 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

Вы можете получить последнюю версию IntelliJ IDEA Community Edition здесь, она бесплатна.

Импортируйте проект плагина, как вы это делаете с любым другим проектом на основе gradle. Например, нажмите Ctrl + Shift + A, выберите Import project и выберите файл build.gradle.kts из корневого каталога плагина.

Существуют конфигурации запуска Test, RunIDEA, RunCLion и Generate Parser для наиболее распространённых задач. Однако сначала попробуйте выполнить ./gradlew :test, чтобы загрузить все необходимые зависимости и запустить все задачи генерации кода. К сожалению, во время импорта IDEA может удалить .idea/runConfigurations, просто верните изменения в каталог, если это произойдёт.

Возможно, вам захочется установить следующие плагины:

  • Grammar-Kit, чтобы получить подсветку для файлов с грамматикой BNFish.
  • PsiViewer, чтобы просматривать AST файлов Rust прямо в среде IDE.

Вклад

Чтобы найти проблему для работы, ищите проблемы с меткой 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
 |       +-- другой независимый от платформы код

Конечно, в компиляции будет использоваться только один пакет платформозависимого кода.

Тестирование

Гораздо проще понять изменения кода, если они сопровождаются тестами. Большинство тестов управляются фикстурами. Они обычно:

  1. Загружают файл Rust, который представляет начальное состояние.
  2. Выполняют тестируемый метод.
  3. Проверяют конечное состояние, которое также может быть представлено как фикстура.

Структура

Все тестовые классы помещаются в каталог 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-intellij-rust.git
git@api.gitlife.ru:oschina-mirror/mirrors-intellij-rust.git
oschina-mirror
mirrors-intellij-rust
mirrors-intellij-rust
master