Привет, Хабр!
Сегодня расскажем о свежем релизе GoLand.
Что нового:
полная поддержка WSL;
запуск gofmt при сохранении по умолчанию;
рефакторинг Inline Function;
удаленная разработка (Beta);
поддержка gRPC в HTTP-клиенте;
улучшения отладчика;
и многое другое!
Узнать о новой функциональности в интерактивной форме можно прямо в IDE. Урок What's New in GoLand 2021.3 доступен на экране приветствия в разделе Learn GoLand.
Скачать GoLand 2021.3 можно на сайте JetBrains или через приложение Toolbox App.
Полная поддержка WSL
По вашим многочисленным запросам, для работы с проектами в WSL теперь можно использовать SDK, загруженный в директорию \\wsl$.
gofmt при сохранении файла
Раньше вы могли настроить автоматическое выполнение опции Reformat code при сохранении файла. Теперь мы сделали это поведением по умолчанию. Опция Reformat code позволяет запускать gofmt и встроенный форматтер GoLand.
Мы добавили уведомление об этом изменении — оно будет показано один раз в каждом проекте.
Рефакторинг Inline Function
Мы добавили долгожданный рефакторинг Inline для функций и методов!
Чтобы попробовать новый рефакторинг, поставьте курсор на функцию, метод или вызов и нажмите ⌥⌘N на macOS или Ctrl + Alt + N на Windows/Linux.
Улучшенное автодополнение для тегов в структурах
Мы улучшили автодополнение для разных стилей написания составных слов (camelCase, snake_case и т. д.) в тегах структур.
Теперь при вводе значения тега GoLand предлагает несколько опций. IDE запомнит ваш выбор и предложит тот же стиль первым для остальных тегов этой структуры.
Новые шаблоны постфиксного автодополнения
Шаблоны постфиксного автодополнения позволяют изменять код, который вы уже написали, без необходимости возвращаться назад.
У нас появились новые шаблоны для преобразования строк в числа. Введите число в двойных кавычках, поставьте точку, и GoLand предложит две опции для парсинга числа — parseInt и parseFloat.
Предпросмотр исходного кода для Show Usages
Мы улучшили окно Show Usages. Теперь для любого использования можно сделать предпросмотр исходного кода. Для этого нажмите на соответствующую иконку в верхней панели инструментов.
Улучшение run targets
Названия папок для исходных и исполняемых файлов
Теперь вы можете переименовывать папки на удаленной машине для хранения исходных и исполняемых файлов проекта. Для этого перейдите в раздел Run | Manage targets | Additional Settings.
Конфигурация run target по умолчанию для всего проекта
В новой версии вы можете настроить конфигурацию run target, которая будет использоваться по умолчанию для всего проекта.
Перейдите в раздел Run | Manage targets. Укажите в качестве Project default target существующую конфигурацию run target — и все новые конфигурации запуска будут создаваться на ее основе.
Поддержка прокси для подключений по SSH
В настройках SSH Configurations появилась новая секция HTTP/SOCKS Proxy, где вы можете настроить прокси. Для этого перейдите в раздел Preferences/Settings | Tools | SSH Configurations либо откройте проект и нажмите Run | Manage Targets | ...
Обновления отладчика
Улучшенное представление нулевых интерфейсов
У интерфейсов в Go есть две составляющие: тип и значение. Интерфейс может быть равен nil только тогда, когда обе составляющие равны nil.
Если у вас в программе есть интерфейс, значение которого равно нулевому указателю на int, то сам интерфейс не будет нулевым, потому что внутренний тип не равен nil (а равен *int). Это может сбить вас с толку.
Чтобы распознавать такие случаи, мы изменили способ отображения интерфейсов во вкладке Variables окна Debug. Например, если у вас есть интерфейс с внутренним типом *int и значением nil, он будет показан так:
{interface{} | *int} *int(nil)
Сокращенные названия пакетов
Теперь во вкладке Variables полные имена пакетов сокращаются — указывается только последняя часть.
Возможность спрятать/показать типы объектов
Если тип объекта занимает слишком много места во вкладке Variables, нажмите правой кнопкой мыши и в открывшемся контекстном меню отключите опцию Show Types. Включить опцию можно тем же способом.
Delve для Linux ARM64
GoLand 2021.3 включает версию Delve для ARM64. Отладка на Linux ARM работает «из коробки».
Шаблон для утверждений testify
Мы добавили новый шаблон для табличных тестов с утверждениями testify. Если вы уже использовали утверждения testify в своем пакете, то, когда вы нажмете ⌘N (Alt + Ins) и выберете опцию — например, Test for function, — GoLand сгенерирует код с утверждениями.
Новые быстрые исправления
Форматирование сообщений об ошибках
Мы добавили быстрое исправление для инспекции, предупреждающей, что сообщения об ошибках не должны начинаться с заглавной буквы и заканчиваться знаками пунктуации.
Нажмите ⌥ ↩ (Alt + Enter), и GoLand предложит исправить форматирование сообщения.
Export type
Если у вас есть экспортированная функция, которая возвращает неэкспортированный тип, GoLand предложит быстрое исправление для экспорта этого типа.
Инспекция context.TODO()
Мы добавили инспекцию, которая подсвечивает использования context.TODO(), чтобы вы не забыли указать верный контекст.
Комментарий TODO в шаблоне Implement Method
Мы добавили комментарий //TODO implement me в шаблоны, которые генерируются при использовании действия Implement Methods. GoLand подсвечивает и индексирует эти комментарии, а также показывает их в окне TODO — так вы не забудете добавить все недостающие реализации.
Удаленная разработка
Еще одно долгожданное изменение — GoLand 2021.3 поддерживает удаленную разработку (пока в режиме Beta).
Чтобы попробовать новую функциональность, нажмите на Remote Development на приветственном экране GoLand. Также вы можете использовать JetBrains Gateway — наше новое приложение, служащее точкой входа для ваших удаленных машин.
Инструкции по удаленной разработке в GoLand можно найти здесь.
Поддержка gRPC в HTTP-клиенте
Теперь для запросов gRPC в GoLand работает автодополнение. Начните запрос с ключевого слова GRPC, и HTTP-клиент будет работать с ним как с gRPC-запросом.
Вы можете сгенерировать gRPC-запрос в HTTP-клиенте: для этого откройте файл .proto и нажмите на иконку на полях редактора.
HTTP-клиент поддерживает унарные и серверные потоковые вызовы RPC.
О других улучшениях HTTP-клиента можно прочитать здесь.
Обновления системы контроля версий
Checkout and Rebase onto Current для удаленных веток
Действие Checkout and Rebase onto Current позволяет переключиться на другую ветку и перебазировать ее поверх текущей ветки. Теперь это действие также доступно для удаленных веток.
Новое действие Push All up to Here
Теперь вы можете отправить в удаленный репозиторий все коммиты вплоть до указанного. Для этого перейдите во вкладку Log окна Git, выберите коммит, на котором хотите остановиться, нажмите по нему правой кнопкой мыши и в контекстном меню выберите Push All up to Here.
Реорганизация настроек системы контроля версий
Настройки системы контроля версий теперь легче найти. Также мы по-новому структурировали их. Все настройки VCS можно найти в разделе Preferences/Settings | Version Control.
Улучшения пользовательского интерфейса
Evaluate expression во вкладке Variables
Функциональность Evaluate expression теперь доступна во вкладке Variables отладчика.
Разделение окна Run
Теперь можно разделять окно Run, перетаскивая вкладки в подсвеченную область. Чтобы объединить вкладки, нажмите правой кнопкой мыши в верхней части панели и выберите в контекстном меню опцию Unsplit.
Новое окно Bookmarks
У нас появилось окно Bookmarks. Отныне все файлы и папки, которые вы помечаете как важные с помощью клавиши F3 (F11), будут показаны в этом окне.
Визуализация сравнения снэпшотов в профилировщике
Вы можете визуализировать сравнение двух снэпшотов на флейм-графе. Для этого дважды нажмите ⇧ (Shift) и напечатайте «Open Profiler Snapshots» в поисковой строке. Выберите в списке нужный снэпшот, снова дважды нажмите ⇧ (Shift) и напечатайте «Open Profiler Snapshots», чтобы открыть второй снэпшот.
Затем перейдите во вкладку любого из снэпшотов и нажмите Compare With Baseline. В открывшемся меню выберите снэпшот, с которым хотите сравнить текущий. Откроется вкладка Diff, в которой вы увидите результаты сравнения.
Поддержка ConPTY
Терминал GoLand поддерживает новый прикладной программный интерфейс ConPTY для Windows. PTY на Windows теперь включен по умолчанию. Благодаря ConPTY в терминале поддерживаются 24-разрядные цвета.
Опережающий ввод в терминале
Мы добавили в наш встроенный терминал функцию опережающего ввода. Теперь, когда вы работаете на удаленной машине, терминал пробует предсказывать, какие символы вы введете дальше, и отображает их в светло-сером цвете. Это помогает сгладить эффект сетевой задержки.
Веб-разработка
Поддержка URL в инструкциях import
Теперь, чтобы загрузить модуль, можно просто поставить курсор на URL в инструкции import и выполнить быстрое исправление.
Улучшенное автодополнение в HTML-файлах
Мы улучшили автодополнение в HTML-файлах. Вам больше не нужно печатать открывающую скобку (<), чтобы вызвать автодополнение, — достаточно просто начать вводить имя тега или аббревиатуру, и GoLand сразу же покажет подходящие варианты. Кроме того, мы улучшили автодополнение для мнемоников.
Новая инспекция для обновления зависимостей
Обновлять пакеты npm до новой версии теперь можно прямо из редактора. Для этого откройте файл package.json, поставьте курсор на строчку с пакетом, который вы хотите обновить, нажмите ⌥↩ (Alt + Enter) и выберите Update <имя_пакета> to the latest version.
Преобразование списка элементов
Для фронтенд-проектов теперь есть действие, позволяющее быстро разместить разделенные запятыми элементы на отдельных строках либо, наоборот, сгруппировать их на одной строке.
Работа с базами данных
Aggregate view для диапазона ячеек
Выберите диапазон ячеек, нажмите по нему правой кнопкой мыши и выберите Show Aggregate View — GoLand рассчитает и покажет значения агрегатных функций для выбранного диапазона.
Независимые вкладки в редакторе
Если вы разделите редактор на две вкладки и откроете в них одну и ту же таблицу, работать в этих вкладках можно будет абсолютно независимо — например, применять разные параметры фильтрации и сортировки.
Проверка логических выражений
У нас появилась инспекция для логических выражений в командах WHERE и HAVING. Если выражение не является логическим, GoLand подсвечивает его желтым и показывает предупреждение перед выполнением запроса.
Навигация по внешним ключам на основе нескольких значений
Теперь вы можете выбрать несколько значений в редакторе и по ним перейти к соответствующим данным.
Определение типов столбцов в CSV-файлах
GoLand теперь автоматически определяет типы данных в столбцах CSV-файлов и позволяет сортировать числовые данные.
MongoDB: автодополнение для filter {} и sort {}
При сортировке и фильтрации данных в коллекциях MongoDB теперь можно пользоваться автодополнением.
Настройка шрифта в редакторе данных
Вы можете настроить шрифт для редактора данных. Для этого перейдите в Preferences/Settings | Tools | Database | Data views | Use custom font.
Обновления режима специальных возможностей
Мы исправили некоторые недочеты режима специальных возможностей: убрали всплывающее окно со списком окон инструментов и всплывающее окно для быстрого просмотра документации, которые появлялись по наведению курсора. Благодаря этому пользоваться инструментом чтения с экрана стало удобнее.
Также мы улучшили поддержку режима специальных возможностей на macOS. Во-первых, мы исправили несколько неполадок, связанных с VoiceOver. Во-вторых, теперь вы можете создавать проекты при помощи инструмента чтения с экрана. Мы убрали некоторые подсказки со звуком, чтобы снизить количество отвлекающих факторов.
На этом всё. Будем рады узнать ваши впечатления от новой версии!
Команда GoLand
Комментарии (12)
Akuma
15.12.2021 19:45+2Отличная IDE, как раз решил поработать на Go.
Разве что название путает )) Golang Goland. Когда что-то гуглишь, Гугл норовит исправить.
Verdoga
15.12.2021 21:34+1Во-первых, спасибо большое за такой инструмент!) Не профи и не зарабатываю, но пишу для души)
Во-вторых, вы не планируете добавить yaml поддержку в полном объёме, на таком же уровне как и json? Чтобы он мог структуры делать из него, как и из json.
Поясните, пожалуйста, вот это о чём конкретно речь:
«… убрали всплывающее окно со списком окон инструментов…»?s0xzwasd
16.12.2021 10:36+2Идея о yaml to struct хорошая, но пока ближайших планов на это нету. Вы можете перейти на наш трекер и заполнить новый фича-реквест для добавления этой функциональности.
По поводу «… убрали всплывающее окно со списком окон инструментов…»: это были две задачи IDEA-278151 и IDEA-274143. Если кратко, то теперь когда Screen Reader доходит до, например, объявления функции, всплывающее окно с Quick Documentation не показывается и перемещаться по коду удобнее.
prognosis
16.12.2021 08:28+1А что из этого примерно будет доступно в IDEA, и в какой версии? Всегда смущал паритет по фичам в линейке.
s0xzwasd
16.12.2021 10:20+2Всё это уже доступно в 2021.3 версии IntelliJ IDEA в связке с Go плагином.
AterCattus
17.12.2021 18:40А вместо gofmt вот бы сразу `goimports -format-only -w $ FilePath $`, который и форматирует и импорты нормально расставляет.
P.S. Редактор комментов упоролся и не дает вставить FilePath нормально без пробелов. Их там быть не должно.
s0xzwasd
17.12.2021 18:54+1Можете пример комментария, который ломается, показать?
Вы можете настроить собственный форматтер через Preferences/Settings | Tools | Actions on Save, добавив и включив кастомный File Watcher без опции Auto-save edited files to trigger the watcher.
AterCattus
17.12.2021 19:06Я про редактор комментариев на Хабре, не в Goland, если что.
Да, сейчас и использую кастомный File Watcher.
Но тут в новости как раз про gofmt по умолчанию. А goimports c -format-only делает автоформат еще полезнее. Вот я и прокомментировал.
artspb
17.12.2021 19:30+1Не все хотят сортировать импорты с помощью goimports, поэтому увы. Может быть потом добавим возможность выбирать. Не очень понятно только, нужно ли это, потому что File Watchers есть.
AterCattus
17.12.2021 19:33+1Вероятно, часть и не в курсе, что импорты можно сортировать (если нет на это линтеров/ревью). А так бы IDE по умолчанию показывала, как можно сделать красиво и читаемо. Но с возможностью выключить в настройках, как сейчас с gofmt.
Эх, мечты, мечты )
f0rk
Спасибо, ребята. Вы делаете очень крутые инструменты!
asspirin12 Автор
Спасибо, нам приятно!