Когда вы сосредоточены на разработке, функция автозавершения в вашей IDE имеет решающее значение. Она значительно повышает производительность, сокращая необходимость набирать полные выражения, позволяя вам писать код быстрее и эффективнее. Автозавершение минимизирует количество ошибок и помогает оптимизировать процесс разработки, предсказывая и завершая код по мере ввода, что экономит время и снижает когнитивную нагрузку во время разработки.
Однако вы наверняка сталкивались с ситуациями, когда автозавершение в вашей IDE импортирует не тот пакет или предлагает слишком много несвязанных пакетов с похожими именами классов или функций. Это может замедлить работу и заставить вас задуматься, поскольку вы тратите время на перебор вариантов, чтобы выбрать правильный, что в конечном итоге прерывает процесс программирования.
В этой статье вы узнаете, как выборочно отключить предложения по автозавершению в Android Studio (IntelliJ IDE), что является главной темой Dove Letter на этой неделе. Dove Letter — это репозиторий по подписке, где вы можете учиться, обсуждать и делиться новыми знаниями об Android и Kotlin.
Ловушка автозавершения в нашей жизни
Если вы используете Jetpack Compose, то, возможно, сталкивались с ситуацией, когда все вроде бы хорошо, но что-то кажется не так.
Например, вы могли импортировать объект Modifier по инструкции или по привычке, но вдруг обнаружили, что он не работает. Если вы поймете и устраните проблему в течение нескольких минут, это будет удачным исходом. Однако если вы потратите более 10 минут на устранение неполадок, это станет разочаровывающим сценарием.
Так в чем же проблема? Скорее всего, вы импортировали не тот пакет из-за предложения автозаполнения, как показано на изображении ниже, и в итоге застряли. Это распространенная ловушка в разработке, когда автозаполнение может ошибочно предложить похожий, но неправильный пакет, что приводит к путанице и потере времени.
Еще одна распространенная ситуация, с которой вы наверняка сталкивались, особенно если работали с Kotlin Flow, — это когда IDE выдает вам несколько предложений пакетов, как показано на рисунке ниже. В чем проблема? Нужный вам класс Flow часто находится в последнем варианте, заставляя вас прокручивать неактуальные варианты. Это может замедлить ваш рабочий процесс и привести к ошибкам, если вы выберете неправильный пакет.
Исключение класса или пакета из дополнения
Существует простой способ запретить IDE предлагать в автодополнении пакеты, не имеющие отношения к делу. Это можно сделать прямо в IDE, выполнив всего несколько шагов. Если вы хотите перестать видеть предложения от определенного пакета, следуйте следующему простому методу: когда в редакторе появится предложение автозаполнения, нажмите Opt + Enter (или Alt + Enter в Windows). После этого IntelliJ IDE спросит, хотите ли вы исключить предложения из этого пакета, как показано на рисунке ниже.
Если вы выберете опцию «Исключить java.lang.reflect.Modifier из завершения», вы увидите всплывающее меню, подтверждающее исключение, как показано на рисунке ниже. Это не позволит IDE предлагать этот пакет в будущих подсказках автозаполнения, что поможет вам избежать неактуальных предложений и упростить процесс программирования.
Вы также можете определить область действия исключения следующим образом:
- IDE Scope: Этот параметр применяет исключение ко всей IDE. Независимо от того, над каким проектом вы работаете, IDE больше не будет предлагать исключенный пакет. Будьте осторожны с этой опцией, так как она может привести к проблемам в будущих проектах, где потребуются другие библиотеки. Если исключить нужный пакет, это может привести к новой катастрофе.
- Project Scope: Как правило, это лучший вариант для исключения определенных пакетов. Преимущество использования области действия проекта заключается в том, что настройки зависят от конкретного проекта и могут быть сохранены в резервной копии. Это гарантирует, что даже если вы обновите IDE до новой версии (например, с Android Studio Koala до Ladybug), ваши настройки исключения останутся нетронутыми для этого проекта, в отличие от IDE scope, которые могут быть потеряны при иммиграции.
Настройка codeInsightSettings.xml
Если вы выбрали опцию проекта для исключения определенных пакетов, вы можете заметить, что в папке .idea создается файл с именем codeInsightSettings.xml
. Если его нет, вы можете создать его. Этот файл содержит исключенные пакеты для вашего проекта.
Если вы откроете этот файл, то увидите записи, подобные приведенному ниже примеру, с подробным описанием пакетов, которые вы исключили из предложений по завершению. Это позволяет настройкам оставаться специфичными для проекта и переносимыми, обеспечивая применение одних и тех же исключений при каждом открытии проекта, независимо от обновлений IDE.
<?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="JavaProjectCodeInsightSettings"> <excluded-names> <name>java.lang.reflect.Modifier</name> </excluded-names> </component> </project>
Если вы используете Jetpack Compose, Kotlin Flow, Dagger или Hilt, вы можете упростить процесс разработки, скопировав файл codeInsightSettings.xml
, представленный ниже, и вставив его в каталог ./idea/codeInsightSettings.xml
вашего проекта. Это предотвратит появление ненужных или неактуальных предложений во время автозавершения, что поможет вам сосредоточиться и не отвлекаться.
<?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="JavaProjectCodeInsightSettings"> <excluded-names> <name>android.graphics.Canvas</name> <name>android.graphics.Color</name> <name>android.graphics.Paint</name> <name>android.graphics.drawable.Icon</name> <name>android.inputmethodservice.Keyboard.Row</name> <name>android.text.Layout.Alignment</name> <name>android.view.Surface</name> <name>android.widget.Button</name> <name>android.widget.GridLayout.Alignment</name> <name>androidx.core.content.pm.ShortcutInfoCompat.Surface</name> <name>java.lang.reflect.Modifier</name> <name>java.nio.file.WatchEvent.Modifier</name> <name>java.time.format.TextStyle</name> <name>javax.annotation.concurrent.Immutable</name> <name>org.threeten.bp.format.TextStyle</name> <name>org.w3c.dom.Text</name> <name>java.util.concurrent.Flow</name> <name>org.intellij.lang.annotations.Flow</name> <name>jakarta.inject.Inject</name> </excluded-names> </component> </project>
Заключение
Вы узнали, как предотвратить появление ненужных или неактуальных предложений автозаполнения в Android Studio (IDE IntelliJ), что может повысить эффективность разработки. Хотя ваш проект может прекрасно функционировать и без этих оптимизаций IDE, небольшие улучшения в рабочем процессе могут накапливаться со временем, что в конечном итоге приведет к значительному повышению производительности. Выработка привычек, позволяющих оптимизировать среду разработки, в конечном итоге может оказать значительное влияние на общую производительность.
Как всегда, счастливого программирования!