GoLand 2020.1 — расширенная поддержка Go Modules, множество автодополнений и многое другое

Привет, Хабр!

Чуть больше недели назад мы выпустили новую версию нашей IDE для Go — GoLand 2020.1.


4ow8httkqlctvhwl7vxhcivvkly.png

Если кратко, в этот релизный цикл мы сфокусировались над расширением текущей поддержки Go Modules. Например, в файле go.mod теперь работают автодополнение кода, рефакторинги и навигация, и это далеко не все!

Другим направлением стала борьба с шаблонным кодом и рутиной. Мы добавили множество новых видов автодополнения. Причем часть из них работает автоматически, не требуя вызова комбинаций клавиш. Другая часть расширила текущий набор автодополнений Smart Code Completion и Basic Code Completion.

Не обошлось и без новых инспекций, улучшений для отладчика, поддержки изменений из Go 1.14 и множества других, прочитать о которых можно ниже.

Кстати, узнать о новой функциональности можно и в интерактивной форме — пройдя прямо в IDE урок Features of GoLand 2020.1.


Улучшенная поддержка Go Modules

Мы поддержали переменные окружения GOPROXY, GOPRIVATE, GOSUMDB, GONOPROXY и GONOSUMB из версии Go 1.13.

Устанавливайте значения для них в шаблоне проекта Go Modules. Нажмите иконку Browse в поле Environment, чтобы открыть новое окно Environment Variables.


9fxlyivduprp3dmhab7ic1z7uw4.gif

Мы добавили автодополнение для операторов go, module, require, replace, exclude, и локальных путей в replace директивах для файла go.mod.


xpqmfsyntl_zeepor5iiqvnbvqs.gif

Переименовывайте и перемещайте директории, указанные внутри операторов replace, с помощью Move и Rename рефакторингов.


pqbzuqgplrsy170973acddamnsy.gif

Чтобы узнать, где используется путь к конкретной директории в файле go.mod, вызовите Find Usages в Project View.


g0svaa3aftcvmi_qhnxuey-fkug.gif

Загружайте недостающие зависимости и удаляйте неиспользуемые на лету с помощью Alt-Enter.


x1eyljslytzpl5pzrvx_jbef9rs.gif

И, наконец, новая версия предупредит вас перед коммитом файла go.mod с локальными путями в replace-директиве.


wnh3otkpmcrallwubnx7p4lif2k.gif

Типы автодополнения кода, которые можно не запоминать

GoLand 2020.1 предложит if err != nil { ... } для завершения обработки ошибок. Просто напишите if внутри выражения.


5rro_xcmxaa-gcinxddwjnmmohk.gif

Определяйте структуры и типы интерфейсов, указав ключевое слово type или struct и interface.


9pefgfpnnmkrqij34y9vvul45u0.gif

Fill Fields добавляет пробелы после двоеточия, когда этого требуют правила форматирования. Это действие также автоматически поставит запятую в конце выражения с объявлением составных литералов.


j9beohgbtfigvr5ytgk3owcdd8u.gif

При создании словарей автодополнение кода переместит курсор за закрывающую скобку, после того как вы укажете тип ключа.


ewsxeoca64cme3ndabvl8qgtwxa.gif

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


lcz-vy3cob-zg4vv3fov5xrg7uu.gif

Smart Code Completion (⌃⇧Space или Ctrl+Shift+Space)

Умное автодополнение кода предлагает указатель для структур с инициализаторами полей.


o5vuh7gluefou2jvh0nrrehup-e.gif

Кроме того, теперь автодополнение в первую очередь предложит совместимые типы для утверждения типа и переключателя типа.


othrcpvd2-8zigjejt45al_tb8k.gif

Для утверждения типа автодополнение кода предложит тип присваиваемой переменной.


5jn8otniu4ryb2qn3sxwe5gudie.gif

Наконец, GoLand 2020.1 предложит варианты автодополнения для указателей в выражении.


damq5swqpwwysge-fldzcndlbyk.gif

Basic Code Completion (⌃Space or Ctrl+Space)

Basic Code Completion для комментариев значительно упрощает написание документации. Автодополнение предлагает имена для текущих объявлений пакета и имена параметров для функций и методов.


pzmlje6k2yvxzjfr2dcjasq6jwo.gif

Кроме того, Basic Code Completion теперь предлагает литералы и преобразования.


mp1q4pnsjez6sszihcqubbkumga.gif

Редактирование кода

При написании сигнатуры функции, возвращающей несколько значений, GoLand 2020.1 добавит скобки вокруг типов возвращаемого значения, если после первого типа вы поставите запятую.


rhlluqhnw10umf7ldyvxukejyrs.gif

Когда вы вставляете текст в строковый литерал, IDE экранирует текст.


vwyzwbbst6dtimwk6mwmymifd5k.gif

Чтобы узнать больше о функциях редактирования кода, которые работают автономно, то есть не требуя от пользователя никаких действий, прочтите статью GoLand Editing Features You Didn«t Know About (на английском).


Поддержка Go 1.14


Поддержка перекрывающих интерфейсов

В Go 1.14 добавилась поддержка встраивания перекрывающих интерфейсов, и мы сразу же их поддержали! Когда вы описываете различные аспекты типа, использующего перекрывающие интерфейсы, GoLand не будет предупреждать о дублировании методов.


Автоматический вендоринг

Вендоринг включается автоматически в версии Go 1.14, если корень модуля содержит директорию vendor. Для GoLand 2020.1 мы решили реализовать аналогичное поведение для версии 1.13 и более ранних. IDE будет автоматически разрешать импорт в директорию vendor, если она присутствует в модуле.


Обновления отладчика


Поддержка ярлыков профилировщика

Поддержка ярлыков профилировщика помогает быстрее ориентироваться между горутинами и анализировать дампы памяти. Подробнее об этом в статье How to Find Goroutines During Debugging (на английском).


65tnay0wkb2l5dckmflvdggnsmu.gif

Поддержка макросов

Используйте макросы в качестве параметров для запуска и отладки приложения. В диалоге Run/Debug Configurations нажмите + в полях Go Tool или Program arguments, чтобы открыть новый диалог Macros со списком доступных макросов.


r1qtlptslwir8zfclyilbl5lncq.gif

Кроме того, теперь вы можете сохранять файлы с конфигурациями в проекте. Выберите опцию Store в верхней части диалога Run/Debug Configurations.


Постфиксное автодополнение

Шаблон .else добавляет оператор if для проверки того, не является ли выражение ложным.


id4a6a8tjjhe_rfpypn82gsu-8u.gif

Быстрые исправления

Измените вызов без форматирования на вызов с форматированием с помощью Alt+Enter.


b9c2axiy7t7ermreq5-roaei-bg.gif

Быстрое исправление Create variable теперь предлагает подсказку ожидаемого типа, чтобы ускорить ввод правильного значения.


nxtfnt3rvgknh2xhtqn5pjwcoka.gif

Инспекции кода

Эта новая инспекция предупреждает о недопустимых вызовах методов с получателем-указателем на значениях, которые не являются указателями. Для обнаруженной проблемы предлагается быстрое исправление.


nx-7sgoykgvemv6dpbj0pyl6fyi.gif

Проверка Invalid conversions of uintptr to unsafe.Pointer предупредит о потенциально опасном преобразовании между uintptr и unsafe.Pointer для преобразования целых чисел в указатели.


pugakwxcde0lx6ympmulmfvdxes.png

Проверка Unmarshal is called with incorrect argument анализирует вызовы json.Unmarshal и похожих функций из encoding/json, encoding/xml и encoding/gob пакетов.


xxjufbe2fnlaz55_u1yqu-0q-se.png

Locks mistakenly passed by value помогает избежать случайного копирования значений типа sync.Locker.


w4vkvwmd2oyxqegxiprzwozertq.gif

Live templates

Шаблоны consts, vars, types и imports помогут вам быстро создавать группы объявлений. При использовании одного из этих шаблонов GoLand добавит скобки вокруг имени объявления. Шаблон fori вставляет код для классического for-loop.


cjsxfaplaiv4kon5adesejs88ea.gif

Рефакторинги

Рефакторинг Extract Method сохраняет исходный порядок родительской функции и параметры метода. Rename автоматически определяет переименование объявления. Теперь, когда вы переименовываете объявление вручную, IDE покажет иконку в поле редактора. Нажав на иконку, вы переименуете все использования разом.


ek8edx7fhx9pfkvrkwfc-t76mke.gif

Навигация

Navigate to implementations (⌥⌘B на MacOS и Ctrl+Alt+B на Windows/Linux) и Navigate to Declaration или Usages (⌘B на MacOS и ⌘B на Windows/Linux) теперь в первую очередь показывают результаты текущего проекта.

Кроме того, действие Find Usages (Alt+F7 в Windows/Linux или ⌥F7 в macOS) теперь всегда ищет использование методов интерфейса по умолчанию. Для поиска использований текущего метода используйте Alt+Shift+Ctrl+F7 на Windows/Linux или ⌥⇧⌘F7 на MacOS.


q2lwqakkh1ueamtu0dcwk-vdc5u.gif

Разное


  • JetBrains Mono — новый шрифт от JetBrains, созданный специально для программистов, — доступен по умолчанию. Подробнее о нем рассказывается здесь.
  • По умолчанию в IDE установлен плагин Grazie, обеспечивающий интеллектуальную проверку орфографии и грамматики текста.
  • Новый режим LightEdit Mode позволяет открыть файл в текстовом редакторе без создания и загрузки проекта. Чтобы попробовать эту функциональность, сначала нужно сделать запуск из командной строки Tools | Create Command-line Launcher, как описано здесь (если вы используете приложение Toolbox App, шаги будут немного отличаться). Более подробные инструкции о том, как открыть файл, сравнить/объединить файлы и даже выполнить проверку кода, см. в этом разделе веб-справки.
  • Мы добавили новый режим Дзен, который избавляет вас от возможных отвлекающих факторов и помогает сконцентрировать все внимание на коде. По своей сути, новый режим сочетает в себе режимы Distraction Free и Full Screen. Чтобы включить режим Дзен, перейдите по ссылке View | Appearance | Enter Zen Mode или выберите его из всплывающего меню Quick Switch Scheme (Ctrl+` | View mode | Enter Zen Mode).
  • External Documentation теперь ведет к https://pkg.go.dev вместо https://godoc.org.
  • Мы вернули цветовую схему Default с новым именем — Classic Light.

0eqj6irjbz-iipqpzsbh9z7r3_o.png

Спасибо, что дочитали до конца! Будем рады вашим отзывам и постараемся ответить на любые вопросы. Пишите нам здесь в комментариях, в Twitter или в баг-трекер. Также приглашаем вас в канал #goland-gophers в Slack англоязычного сообщества Go.

Команда JetBrains GoLand

The Drive to Develop

© Habrahabr.ru