Работа с Python в VS Code 1.70 стала проще, точность определения конфликтов слияния Git — выше, а ещё появились доработки интеграции с интерактивными блокнотами Jupyter. К старту нашего флагманского курса по Data Science делимся подробностями.



Содержание

Июль 2022 (версия 1.70)


В обновлении 1.70.1 устраняются эти проблемы.


Добро пожаловать в июльский выпуск Visual Studio Code. В этой версии много обновлений. Надеемся, они вам понравятся. Вот ключевые из них:


Прочитать эти заметки о выпуске можно в разделе обновлений на сайте code.visualstudio.com.

Послушайте обсуждение новых функций в команде VS Code: запись есть на нашем YouTube-канале.

Баннер
Научим ориентироваться в большом потоке информации и думать о коде так, как о нём думают профессионалы:



Инсайдеры: загрузите ночную сборку инсайдеров и пробуйте последние обновления функций в момент их появления.

Рабочее место


Упрощённая настройка строки заголовков


Обладатели пользовательской строки заголовков (по умолчанию в Windows, macOS и вебе), возможно, заметили: мы добавили в неё интерактивного контента. Да, уже имеются настройки, которые позволяют скрыть каждый из этих элементов по отдельности. Но теперь, нажав правую кнопку мыши в строке заголовков, можно попасть в контекстное меню и переключиться между строкой меню (не отображается на рабочем столе macOS), командным центром и управлением макетами окон.

Контекстное меню строки заголовков

Пользователям Windows привычно контекстное меню системы. Его всё ещё можно вызвать, нажав правую кнопку мыши на значке VS Code в левом верхнем углу окна или сочетанием клавиш Alt+Space. В последнем случае для определения поведения используется положение мыши, поэтому пользовательское меню появится, если она будет поверх строки заголовков.

Контекстное меню системы

В Linux (из-за проблемы #156397), если нажать на свободное место в строке заголовков, контекстное меню не откроется. Нужно нажать правую кнопку мыши на одном из элементов строки заголовков, тогда он скроется.

Улучшено свёртывание строки меню


Чтобы освободить место для командного центра, мы попытались сжать строку меню до меню-гамбургера. Но, получив обратную связь от пользователей, вернулись к прежнему поведению строки меню при свёртывании, свернули бóльшую часть меню и только после этого перешли на меню-гамбургер.

Адаптивное свёртывание строки меню

Доступно изменение масштаба строки заголовков на macOS


Кроме того, улучшена работа с командным центром: когда в строке заголовков на macOS присутствуют интерактивные компоненты, можно менять масштаб её и остальной части пользовательского интерфейса — для большего удобства.

Изменение масштаба строки заголовков на macOS

Выбор областей свёртывания


Командой Ctrl+K Ctrl+,Create Manual Folding Ranges from Selection создаётся диапазон свёртывания, который и сворачивается. Этими диапазонами ручного свёртывания дополняются те, что вычисляются автоматически.

Командой Ctrl+K Ctrl+.Remove Manual Folding Ranges диапазоны ручного свёртывания можно снова «развернуть».

Диапазоны ручного свёртывания

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

Сохранение свёртываемых диапазонов


Теперь в VS Code свёртываемые диапазоны сохраняются, даже не будучи больше частью тех, что вычисляются не вручную. Типичный пример: пользователь выполняет закомментирование файла, начинает строковый литерал или допускает синтаксическую ошибку, что делает невозможным создание всех диапазонов. Такие свёртываемые диапазоны становятся «возвращаемыми». Они удаляются после возвращения на то же место вычисляемых не вручную диапазонов или с помощью команды Remove Manual Folding Ranges.

Возвращаемые диапазоны свёртывания

Скрытие элементов управления свёртыванием


Элементы управления свёртыванием в «желобке» (gutter) теперь можно скрыть через настройку "editor.showFoldingControls": "never". Диапазоны свёртывания по-прежнему можно развернуть и свернуть с помощью команд и сочетаний клавиш.

Улучшения редактора трёхстороннего слияния


Мы продолжили работу над новым редактором трёхстороннего слияния и включили его по умолчанию в этом выпуске. Открывается он нажатием на конфликтующий файл во вкладке Source Control.

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

Кроме того, чтобы повысить точность конфликтов слияния, мы начали изучать альтернативные алгоритмы выявления несовпадений. Если вы столкнулись с неоптимальным выделением или выравниванием изменений в редакторе несовпадений или редакторе слияния, эти случаи нам хотелось бы записать в нашем трекере ошибок GitHub!

Параметр командной строки merge


Теперь открыть редактор слияния можно с помощью параметров командной строки:

-m --merge <path1> <path2> <base> <result> Perform a three-way merge by providing paths for two modified versions of a file, the common origin of both modified versions, and the output file to save merge results.

И использовать VS Code в качестве инструмента слияния для Git, например чтобы настроить в .gitconfig это:

[merge]
  tool = code
[mergetool "code"]
  cmd = code --wait --merge $REMOTE $LOCAL $BASE $MERGED

Оформление поиска по файлам


В результатах поиска во вкладке Search справа теперь есть обозначения файлов и цвета́, по которым можно видеть проблемы файла и информацию о контроле версий. Похоже на обозначения файлов, которые уже показывались в «Проводнике».

Оформление поиска по файлам

Множественное выделение при поиске


Во вкладке Search теперь поддерживается множественное выделение. Любые действия (например, «отклонить» или «заменить») над одним результатом поиска будут выполняться и с другими результатами.

Множественное выделение во вкладке Search с действиями по исключению и принятию

Средство управления поиском в древовидных представлениях


В древовидных представлениях, таких как «Проводник», теперь поддерживается средство управления поиском. Оно вызывается нажатием Ctrl+F и может применяться для выделения соответствующих элементов или переключения кнопки Filter, чтобы скрыть все элементы, которые не соответствуют поисковому запросу.

Поиск и фильтрация с помощью средства управления поиском в древовидном представлении

Примечание: если вы привыкли открывать средство управления поиском в редакторе нажатием Ctrl+F, когда «Проводник» в фокусе, можете соответствующим образом настроить привязки клавиш:

{
  "key": "cmd+f", // "ctrl+f" on Windows/Linux
  "command": "-list.find",
  "when": "listFocus && listSupportsFind"
}

Создание произвольных файлов с помощью New File


Теперь, чтобы создать произвольный файл, вместо File > New File... (или ссылка New File... на странице Get Started, можно в поле быстрого ввода ввести имя файла, и он будет создан на диске.

Поле ввода с введённым в него test.js inputted into it and the entry New File(test.js) selected

Терминал


Интеграция с оболочкой включена по умолчанию


Автоматическое внедрение интеграции с оболочкой, которое убрали из предварительной версии в прошлом выпуске, теперь включено по умолчанию. Для поддерживаемых настроек оболочки (большинство конфигураций bash, zsh и pwsh) всё это должно работать без каких-либо изменений и с таким оформлением команд:

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

Тема: Sapphire

Примечание: в Windows для поддержки интеграции с оболочкой понадобится PowerShell 7 (pwsh). Устанавливается через https://aka.ms/PSWindows.

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

Автоматическое внедрение интеграции включается, когда параметр terminal.integrated.shellIntegration.enabled установлен в true. Чтобы отключить эту функцию, добавьте в файл settings.json следующее:

"terminal.integrated.shellIntegration.enabled": "false"

Будет отключено внедрение интеграции с оболочкой только в VS Code. Если в вашей настройке включена интеграция с оболочкой для другого терминала, предназначенного для работы с VS Code, в нём она будет приниматься. Если вам не нравится оформление команд и/или полосы прокрутки, можно отключить только их отображение, продолжая пользоваться преимуществами дополнительной функциональности интеграции с оболочкой.

Упрощена ручная установка интеграции с оболочкой


Раньше она проходила в несколько этапов и зависела от платформы и оболочки. Теперь для извлечения скрипта интеграции с оболочкой в ней используется CLI code; интеграция выполняется кросс-платформенно и при подключении к удалённому окну, то есть при синхронизации в dotfiles всё должно работать.

# Manual install on bash
[[ "$TERM_PROGRAM" == "vscode" ]] && . "$(code --locate-shell-integration-path bash)"

Как установить интеграцию для других оболочек, читайте в Terminal shell integration.

Дополнительные варианты настройки интеграции с оболочкой


Благодаря новому параметру terminal.integrated.shellIntegration.decorationsEnabled можно отображать оформление команд в gutter, overviewRuler либо ни там, ни там. Ради удобства доступа этот параметр можно изменить с помощью Configure Command Decorations в контекстном меню при нажатии на оформлении. Чтобы увидеть выпадающий список параметров, выберите Toggle visibility.

Эта новая опция Configure Command Decorations содержится в контекстном меню оформления команд

Можно также настроить значки из выпадающего списка: default, success или error.

Стандартные настройки цвета и значков вкладок


Значок и цвет вкладок терминала по умолчанию можно задать для каждой папки с помощью terminal.integrated.tabs.defaultIcon и terminal.integrated.tabs.defaultColor.

Расширенные привязки клавиш PowerShell


Благодаря интеграции с оболочкой имеются дополнительные привязки клавиш PowerShell, такие как Ctrl+Space. Раньше их не было из-за отсутствия кодировки VT. Теперь, когда есть интеграция с оболочкой в pwsh, должны работать следующие привязки клавиш:

  • Ctrl+Space — по умолчанию MenuComplete только на Windows.
  • Alt+Space — по умолчанию SetMark.
  • Shift+Enter — по умолчанию AddLine.
  • Shift+End — по умолчанию SelectLine.
  • Shift+Home — по умолчанию SelectBackwardsLine.

Это относится ко всем платформам, даже Linux и macOS, где эти привязки клавиш обычно невозможны. Значения по умолчанию всегда можно сбросить в профиле pwsh с помощью Set-PSReadLineKeyHandler. Если вы ожидали другие привязки клавиш, напишите нам.

Запуск последней команды как замена обратного поиска


Когда включена интеграция с оболочкой, наша цель — чтобы запуск последней команды был упрощённой кросс-оболочной заменой обратного поиска оболочки (Ctrl+R). Существует новый режим непрерывного поиска, при запуске команды это режим по умолчанию. Его поведение в большинстве оболочек подобно Ctrl+R, с возможностью возвращения к нечёткому поиску:

При запуске непрерывного поиска последней команды будет находиться точное соответствие поисковому запросу, переключение на нечёткий поиск для выполнения нечёткого поиска

Доступен новый ключ контекста inTerminalRunCommandPicker, чтобы настроить привязку клавиш подобно Ctrl+R для перехода к следующему соответствию. Например, следующие привязки клавиш —  это теперь фактически полная замена обратного поиска оболочки, а Ctrl+Alt+R — резервный вариант старого поведения:

{ "key": "ctrl+r",     "command": "workbench.action.terminal.runRecentCommand", "when": "terminalFocus" },
{ "key": "ctrl+alt+r", "command": "workbench.action.terminal.sendSequence", "args": { "text": "\u0012"/*^R*/ }, "when": "terminalFocus" },
{ "key": "ctrl+r",     "command": "workbench.action.quickOpenNavigateNextInViewPicker", "when": "inQuickOpen && inTerminalRunCommandPicker" },
{ "key": "ctrl+c",     "command": "workbench.action.closeQuickOpen", "when": "inQuickOpen && inTerminalRunCommandPicker" },

Многострочными командами теперь, где необходимо, отображается символ новой строки, а до и после вставляемого текста будут добавляться escape-последовательности. То есть с этими командами обращаются так, как если бы они вставлялись для поддержки оболочек. Как правило, это означает, что все они будут добавляться в ту же командную строку, а не выполняться по отдельности.

При запуске последней команды теперь показывается символ возврата ⏎ для визуализации новых строк, который имеет номер знака в Юникоде U+23CE

Другие улучшения интеграции с оболочкой


Вот ещё небольшие улучшения интеграции с оболочкой:

  • Благодаря командной навигации улучшилась визуальная обратная связь: на короткое время показывается «рамка в фокусе», а затем, помогая выделить положение в буфере, в желобке неизменно сохраняется шестиугольник.

    Шестиугольник цвета фокуса темы теперь отображается слева от команды, к которой осуществляется переход
  • Доступна новая команда workbench.action.terminal.copyLastCommand, чтобы привязкой клавиш копировать вывод последней команды (сочетание клавиш Ctrl/Cmd+Shift+Up, Ctrl/Cmd+C, Escape, Ctrl/Cmd+End).
  • Интеграция с оболочкой Bash:

    • Поддерживается больше форматов $PROMPT_COMMAND.
    • Уже применяется вспомогательное средство bash-preexec, а значит, интеграция с оболочкой должна быть ещё лучше.

Улучшения рендеринга


Ряд улучшений внесён в рендеринг терминала при включённом ускорении GPU:

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

    Для отображения полукруглых символов Powerline настройка шрифта теперь не нужна
  • В символах отрисовки рамок с закруглёнными углами (, , , ) кривая стала плавней.

    Эти символы с закругленными углами теперь отображаются как ¼ идеальной окружности
  • Улучшена обрезка глифов при изменении цвета фона, которая часто происходила при выводе в npm предупреждения.

    Широкие символы, такие как W, иногда исчезают из фона ячейки. Например, когда фон текста жёлтый, слева от символа W слова WARN  неожиданно появлялись жёлтые пиксели. На изображении справа показано, что теперь это исправлено
  • Похожая проблема была при сглаживании, когда некоторые глифы накладывались на другие символы, отчего ухудшался внешний вид элементов. Проще проиллюстрировать это на примере с фоном. Пиксель в символе k слова Fork мог выйти за пределы ячейки и в другом направлении. Этот пиксель больше не появится в глифе, ведь он почти того же цвета, что и фон.

    Пиксель мог наложиться на ячейку справа и не отображаться вовсе, если разница в цвете с фоном мала

Контроль версий


Улучшения управляющей кнопки


Мы продолжили работу с управляющей кнопкой в Source Control на основе обратной связи от пользователей:

  • Управляющая кнопка Sync Changes отображается, только когда локальная ветвь с высокой степенью достоверности находится либо впереди, либо позади ветви удалённого отслеживания.
  • Управляющая кнопка Commit включается только на основе списка изменённых ресурсов с учётом параметров интеллектуальной фиксации:

    • git.enableSmartCommit
    • git.suggestSmartCommit
    • git.smartCommitChanges

  • Значок управляющей кнопки Commit обновляется исходя из параметров защиты ветви:

    • git.branchProtection
    • git.branchProtectionPrompt


Улучшено разрешение конфликтов при перемещении изменений


На этом этапе мы устранили небольшие проблемы в потоке перемещения изменений при разрешении конфликтов слияния. Теперь пользователи смогут продолжить операцию перемещения изменений из одной ветви в другую с помощью кнопки Commit во вкладке Source Control после разрешения всех конфликтов слияния.

Проверка орфографии в поле ввода коммита


На этом этапе мы подтвердили, что доступны все необходимые API расширений для поддержки проверки орфографии в поле ввода коммитов. Мы связались с авторами двух популярных расширений для проверки орфографии и отправили им несколько пул-реквестов (запросов на включение изменений в репозиторий проекта), чтобы показать, как обновить их расширения для включения проверки орфографии текста описания коммита.

Отладка


Отладка на JavaScript


Когда вы создаёте конфигурацию запуска для отладки программы на JavaScript/TypeScript, можете установить "console": "integratedTerminal", чтобы запустить эту программу в терминале (а не создавать процесс напрямую). Несколько месяцев назад мы заметили, что "args" в конфигурации launch.json частично, но не полностью переместились в оболочку. Это означало, что при попытке передать аргумент в программу в оболочке случайно может быть вызвано особое поведение. Мы разобрались с этим, а затем поняли, что было бы неплохо устанавливать аргументы, в которых есть символы с особым значением для оболочки, и что часть пользователей применяют это поведение.

Мы обсудили, как правильно исправить, и решили, что это поведение нужно включить и что требуются изменения в Debug Adapter Protocol. Внеся это изменение, мы внедрили его в VS Code и js-debug. На очереди и другие адаптеры отладки.

Вот как использовать новое поведение в конфигурации запуска узла:

{
    "type": "node",
    "console": "integratedTerminal",
    ...

    // If you pass args as a single string, the characters will not be escaped for the terminal,
    // so the command in backticks will be evaluated, and output will be redirected to "outfile".
    // The user is responsible for knowing the type of shell that this will be run in,
    // and doing any escaping necessary.
    "args": "`echo hello` > outfile",

    // If you pass args as an array, the characters will be escaped for the terminal,
    // so that the program receives them verbatim.
    "args": ["`echo hello` > outfile"]
}

Выбор сеансов отладки


Теперь при отладке можно запускать в палитре команд Debug: Select Debug Session. Здесь отображается средство выбора с активными сеансами отладки, применяемое для поиска и фильтрации отдельных сеансов. При необходимости в описании каждого из них показывается родительский сеанс.

При выделении сеанса в средстве выбора фокус ввода перемещается на сеанс отладки во вкладке Call Stack. Действия при отладке, например Pause, Step, Restart, Stop, выполняются в сеансе отладки с фокусом ввода. При выделении сеанса также отображается консоль отладки сеанса.

Демоверсия средства выбора сеанса отладки

Задачи


Поддержка фильтров для команды Run Task


При действии Tasks: Run Task (workbench.action.tasks.runTask) поддерживается фильтрация по имени и типу задач для более лаконичного и настраиваемого способа их выбора и выполнения.

Например:

{
  "key": "ctrl+h",
  "command": "workbench.action.tasks.runTask",
  "args": {
    "task": "VS Code - Build",
    "type": "npm"
  }
}

Улучшен поток автоматических задач


Благодаря функционалу Trusted Workspace в VS Code поток автоматических задач упрощён. По умолчанию автоматические задачи выполняются, если папка доверенная. В противном случае по каждой папке получается запрос их выполнения. Это поведение настраивается с помощью параметра task.allowAutomaticTasks (по умолчанию auto): спрашивать перед запуском автоматической задачи всегда (on) или никогда (off).

Языки


Сохранение символов новой строки при форматировании JSON


Теперь можно сохранять исходное положение строки при её форматировании в документах JSON. Например, значения в одной строке массива после форматирования сохранятся в той же строке. Дополнительные разрывы строк (символы новой строки) в файлах JSON также сохраняются. Чтобы включить эту функцию, задайте в редакторе настроек параметр JSON > Format: Keep Lines.

Блокноты


Переход к последней ячейке с ошибкой


Теперь есть кнопка перехода к последней запущенной ячейке с ошибкой. Это же действие выполняется и при запуске Notebook: Go to Most Recently Failed Cell.

Кнопка полезна, когда запускается группа ячеек и нужно узнать, в какой ячейке была ошибка, из-за которой остановлено выполнение группы.

Демонстрация перехода к последней ячейке с ошибкой

Предварительный просмотр блокнота Markdown с вложением


Теперь в Jupyter Notebook можно отображать встроенные изображения формата base64.

Изображения, вставленные в Jupyter notebook, на которые ссылаются через ![image alt-text](attachment:image.png), теперь отображаются в блокнотах VS Code, как и было задумано.

Баннер
Прокачаем вас в Python и Jupyter или поможем освоить самые востребованные IT-профессии:



Следующий исходный код Markdown:

Исходный код ячейки Markdown блокнота со ссылкой на изображение

Будет отображаться как:

Предварительный просмотр ячейки Markdown блокнота с вложением

Общий доступ к ссылкам на блокнот


В команде Copy vscode.dev Link подменю Share теперь поддерживаются ссылки на блокнот.

VS Code для веба


Установка языка интерфейса


Теперь с помощью кнопки Set Display Language можно задать язык интерфейса браузера. Кнопка доступна в расширении языкового пакета во вкладке Extensions.

Кнопка Set Display Language в языковом пакете во вкладке Extensions

Убрать язык интерфейса можно с помощью кнопки Clear Display Language в расширении языкового пакета установленного в данный момент языка.

Кнопка Clear Display Language в текущем языковом пакете во вкладке Extensions

Улучшения расширений


Python


Начало работы


В «пошаговом разборе» в расширении для Python теперь осуществляется постепенный переход пользователей к установке, если необходимо, и выбору Python. Если Python не установлен, открывается Microsoft Store или значок пошагового руководства и пользователи могут автоматически запустить отображаемые инструкции. Любые подсказки, связанные с интерпретаторами, отображаются не при запуске, а только когда они нужны для выполнения действия пользователя. Кроме того, подсказки пользовательского интерфейса стали точнее в отношении ошибок и предлагаемых изменений.

Начало работы с Python. Пошаговое руководство

Информация об интерпретаторе в строке состояния


Добавлен новый параметр python.interpreter.infoVisibility, с помощью которого определяется, когда информация о выбранном интерпретаторе отображается в строке состояния. По умолчанию информация об интерпретаторе отображается, только когда связанные с Python файлы открыты (onPythonRelated). Параметру можно задать значение always, чтобы возвращаться к старому поведению, при котором выбранный интерпретатор отображается независимо от того, какой файл открыт. Статус предупреждения (warning) добавляется для указания на ситуации, когда выбранный интерпретатор недопустим:

Информация об интерпретаторе в строке состояния

Автоматические конфигурации отладки


В расширении для Python теперь поддерживается автоматическая конфигурация отладки: текущий проект анализируется и выдаётся конфигурация отладки, которой не требуется дополнительных изменений.

В расширении распознаются проекты на Django, Flask и FastApi, а также простые файлы Python.

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

Автоматическая конфигурация отладки на Flask

Расширение WWBD


Появилось новое экспериментальное расширение WWBD как песочница для идей рабочего процесса среды Python. Теперь есть команда Create Environment для настройки новой виртуальной среды (все детали и другой функционал расширения см. на странице WWBD). С другими рассматриваемыми идеями, в том числе поддержки conda, можно ознакомиться в разделе категорий идей репозитория проекта.

Jupyter


Копирование графических изображений в буфер обмена


Теперь в расширении Jupyter можно копировать в буфер обмена графические объекты из вывода ячеек. Убедитесь, что выбрана подходящая презентация, поскольку пока поддерживается только вывод в формате PNG:

Выберите изображение/png при копировании графического объекта в буфер обмена

Чтобы скопировать в буфер обмена, нажмите кнопку справа вверху:

Кнопка для копирования графических объектов

Веб-расширение


В веб-версию расширения Jupyter перенесён следующий функционал:

  • средство просмотра графиков;
  • средство просмотра фреймов данных.

Чтобы с ними поэкспериментировать, запустите Jupyter с локального компьютера:

jupyter notebook --no-browser --NotebookApp.allow_origin_pat=https://.*\.vscode-cdn\.net

А затем подключитесь из vscode.dev с помощью команды Jupyter: Specify Jupyter server for connections.

Чтобы получить дополнительную информацию и прокомментировать, см. это обсуждение.

Восстановление интерактивного окна


Сеансы интерактивного окна теперь можно восстановить при перезагрузке окна VS Code, включив параметр interactiveWindow.restore.

Восстановление интерактивного окна

Ограничения: исходные состояния ядра не являются постоянными при перезагрузке окна (см. подробнее в этом обсуждении). Если использовать удалённый сервер Jupyter, интерактивное окно подключается к предыдущим сеансам ядра при перезагрузках.

Загрузка переменных окружения из файлов .env


В загрузку переменных окружения из файлов .env внесён ряд исправлений, в том числе обнаружение в этих файлах изменений. В ядрах Python переменные окружения теперь загружаются из файла, определённого в параметре python.envFile.

Запросы на включение изменений и вопросы GitHub


Достигнут прогресс в расширении GitHub Pull Requests and Issues, которое позволяет работать с запросами на включение изменений и вопросами GitHub, создавать их и управлять ими. Вот основные улучшения этого выпуска:

  • Новая кнопка для отображения только изменений, внесённых в pull request с момента последнего просмотра.
  • Новое действие Commit & Create Pull Request во вкладке Source Control позволяет сделать гит коммит и сразу перейти ко вкладке Create PR.
  • Параметр githubPullRequests.pullRequestDescription можно использовать для настройки исходного текста описаний pull request.

Другие улучшения смотрите в логе изменений для версии расширения 0.48.0.

Удалённая разработка


Продолжается работа над расширениями для удалённой разработки, которые позволяют использовать в качестве полнофункциональной среды разработки контейнер, удалённый компьютер или подсистему Windows для Linux.

Узнайте о новом функционале расширения и об исправлении багов в заметках о выпуске, в разделе Remote Development.

Предварительный просмотр


Редактор с «липкой» прокруткой


Теперь можно отображать пользовательский интерфейс с областью, где находится пользователь во время прокрутки. В пользовательском интерфейсе с «липкой» прокруткой показывается, в каком классе / интерфейсе / пространстве имён / функции / методе / конструкторе находится верхняя часть редактора, помогая определить местоположение в документе. Включите «липкую» прокрутку с помощью параметра editor.experimental.stickyScroll.enabled.

«Липкая» прокрутка и показ области исходного кода файла TypeScript

Поддержка TypeScript 4.8


В это обновление включена поддержка предстоящего выпуска TypeScript 4.8. Чтобы узнать подробнее, над чем сейчас работают в команде TypeScript, смотрите план рабочего цикла разработки TypeScript 4.8.

Чтобы начать использовать ночные сборки TypeScript 4.8, установите расширение TypeScript Nightly.

Профили параметров


Последние пару месяцев мы работали над поддержкой Settings Profiles в VS Code — одним из самых популярных запросов сообщества. Эта функция доступна для предпросмотра в выпуске Insiders с помощью параметра workbench.experimental.settingsProfiles.enabled. Попробуйте её и дайте обратную связь, создав вопросы в репозитории VS Code или оставив комментарий в проблеме #116740.

На этом этапе мы также добавили поддержку Settings Profiles в VS Code для веба. Можете попробовать её с помощью insiders.vscode.dev и того же параметра workbench.experimental.settingsProfiles.enabled.

Демо профилей параметров с показом темы, положения панели действий, уровня масштаба, которые меняются при переключении профиля

Тема: светло-розовая

Переподключение к задаче


При перезагрузке окна к задачам наблюдения можно переподключиться, активировав task.experimental.reconnection. В итоге — быстрее возвращение к работе после изменения расширения или обновления версии VS Code.

Действия в коде


Мы работаем над улучшением Code Actions в VS Code. Code Actions включают Refactorings, действия с исходным кодом и быстрые исправления.

Новый, экспериментальный элемент управления Code Actions можно открыть из контекстного меню выбрав Refactor или Source Action из lightbulb или через Quick Fix. Попробуйте с помощью параметра editor.experimental.useCustomCodeActionMenu. Дайте обратную связь, создав вопросы в репозитории VS Code или оставив комментарий в проблеме #152913.

Из нового элемента управления Code Action также доступны предпросмотры рефакторинга для действий в коде. Чтобы ознакомиться с предпросмотром, наведите курсор на включённые элементы. Для выбора действий в коде, а также предпросмотра этого выбора поддерживаются пользовательские привязки клавиш.

Демо элемента управления Code Action с показом доступа к нему из контекстного меню, lightbulb и Quick Fix.

На этом этапе мы также добавили поддержку пользовательских привязок клавиш для действий в коде Code Actions, в том числе быстрое исправление Quick Fix (Ctrl+). Можете протестировать её, добавив в keybindings.json следующий фрагмент кода с желаемыми сочетаниями клавиш:

[
  {
    "key": "ctrl+k",
    "when": "CodeActionMenuVisible",
    "command": "focusPreviousCodeAction"
  },
  {
    "key": "ctrl+j",
    "when": "CodeActionMenuVisible",
    "command": "focusNextCodeAction"
  }
]

Сеансы редактирования в VS Code для веба и рабочего стола


Продолжается работа над Edit Sessions, в ходе которых вносятся незафиксированные изменения при работе с репозиторием в VS Code для веба или рабочего стола. Вот основные улучшения:

  • Теперь можно удалить из облака все сохранённые сеансы редактирования, отключив соответствующую функциональность.
  • Теперь поддерживается вход с проверкой подлинности Microsoft.
  • При проблемах с нахождением сеансов редактирования всех их можно просмотреть с помощью команды Edit Sessions: Show Edit Sessions.

Чтобы попробовать сеансы редактирования, установите в настройках workbench.experimental.editSessions.enabled и используйте команду Edit Sessions: Store Current Edit Session, войдя через GitHub или проверку подлинности Microsoft. Затем восстановите рабочее содержимое всех изменённых файлов в рабочей области. Для этого в репозитории на другом компьютере или экземпляре VS Code задействуйте команду Edit Sessions: Resume Latest Edit Session. Из сеансов редактирования можно в любой момент выйти с помощью команды Edit Sessions: Sign Out.

Мы продолжаем работать над сеансами редактирования, опробуйте их и дайте обратную связь, оставив комментарий в проблеме #141293.

Разработка расширения


Оператор 'not in' для конструкций 'when'


Оператор для конструкций when уже существует. Это in, который позволяет выполнять динамический поиск значения одного контекстного ключа в другом с помощью массива или значения типа-объекта. Мы добавили новый оператор not in, с которым проверяется противоположное условие. Подробнее см. в документации по контекстам конструкции when.

Точка расширения htmlLanguageParticipants


Благодаря новой точке расширения htmlLanguageParticipants HTML-подобных языках обнаруживается потребность наследовать весь функционал языкового сервера на HTML, например завершение кода, наведение курсора и структуру. Это полезно для расширений языков программирования, в которых не нужно реализовывать полноценный языковой сервер.

Примером может служить встроенное расширение handlebars, которое теперь добавляется к htmlLanguageParticipants в своём package.json:

"contributes": {
  "htmlLanguageParticipants": [
     {
       "languageId": "handlebars"
      }
    ]
}

В расширении Quarkus точка расширения уже применяется. С ней функционал HTML прирастает дополнительными возможностями для встроенного языка HTML-шаблонов Qute:

Qute: участник HTML

API перетаскивания в редактор


API перетаскивания текстового редактора позволяет расширениям работать с перемещением файлов или другого содержимого в текстовые редакторы. Эти события перемещения могут проистекать из VS Code, например при перетаскивании файла из обозревателя VS Code в текстовый редактор, или генерироваться перетаскиванием файла из операционной системы в VS Code.

Применение API перетаскивания в редактор для вставки изображения в Markdown путём перемещения его из обозревателя VS Code

Чтобы переместить файл в редактор, нужно удерживать нажатой клавишу kbsytyle(Shift) и, перетащив файл до нужного места, отпустить её. Дальше в расширении определяется, что делать с перемещёнными данными.

Посмотрите этот API в действии на простом примере расширения для перетаскивания в редактор.

Proposal API


На каждом этапе предлагаются новые API, и авторы расширений могут их опробовать. Как всегда, нам нужна обратная связь. Вот как можно опробовать Proposal API:

  1. Найдите предложение, которое хотите попробовать, и добавьте его имя в package.json#enabledApiProposals.
  2. Используйте последний vscode-dts запустите vscode-dts dev. В рабочую область загрузятся соответствующие файлы d.ts.
  3. Теперь предложение можно программировать.

Публиковать расширение, в котором применяется Proposal API, нельзя. В следующем выпуске могут быть критические изменения, а нам ни в коем случае не нужно ломать имеющиеся расширения.

Контекстные меню Webview


В новом предложении контекстного меню webview (для расширенных webviews) упрощена настройка контекстных меню, в которых отображается, когда пользователь нажимает правой кнопкой мыши внутри webview. В этой новой точке расширения используются обычные контекстные меню VS Code, поэтому пользовательские меню как раз заполняют остальную часть редактора. В Webviews также могут отображаться пользовательские контекстные меню для различных разделов webview.

Чтобы опробовать этот новый API, нужно включить предложение contribWebviewContext.

"enabledApiProposals": [
  "contribWebviewContext"
]

Чтобы добавить в webview новый пункт контекстного меню, добавьте новую запись в menus в новом разделе webview/context. В каждой точке расширения принимается command (отсюда и название) и конструкция when. Чтобы контекстные меню применялись только к webview расширения, конструкция when должна включать webview == 'YOUR_WEBVIEW_VIEW_TYPE':

"contributes": {
  "menus": {
    "webview/context": [
      {
        "command": "catCoding.yarn",
        "when": "webview == 'catCoding'"
      },
      {
        "command": "catCoding.insertLion",
        "when": "webview == 'catCoding' && webviewSection == 'editor'"
      }
    ]
  },
  "commands": [
    {
      "command": "catCoding.yarn",
      "title": "Yarn ????",
      "category": "Cat Coding"
    },
    {
      "command": "catCoding.insertLion",
      "title": "Insert ????",
      "category": "Cat Coding"
    },
    ...
  ]
}

Внутри webview можно также задать контексты для конкретных частей HTML, используя атрибут данных data-vscode-context (или в JavaScript с помощью dataset.vscodeContext). Значение data-vscode-context — это объект JSON, которым указывается на контексты, устанавливаемые при нажатии пользователем правой кнопкой мыши на элементе. Окончательный контекст определяется при переходе от корня документа к элементу, на котором нажата кнопка.

Рассмотрим, например, этот HTML:

<div class="main" data-vscode-context='{"webviewSection": "main", "mouseCount": 4}'>
  <h1>Cat Coding</h1>
  <textarea data-vscode-context='{"webviewSection": "editor", "preventDefaultContextMenuItems": true}'></textarea>
</div>

Если пользователь нажмёт правой кнопкой мыши на textarea, установятся следующие контексты:

  • webviewSection == 'editor' — им переопределяется webviewSection из родительского элемента.
  • mouseCount == 4 — наследуется от родительского элемента.
  • preventDefaultContextMenuItems == true — специальный контекст, в котором скрыты записи копирования и вставки, добавляемые обычно в контекстные меню webview в VS Code.

Нажав правой кнопкой мыши внутри <textarea>, пользователь увидит:

Настраиваемые контекстные меню, отображаемые в webview

Размер представления


Благодаря предложениям о размере представления расширениями указываются веса для представлений, с которыми они работают:

"contributes": {
    "views": {
        "github-pull-request": [
            {
                "id": "github:createPullRequest",
                "type": "webview",
                "name": "Create Pull Request",
                "size": 2
            },
            {
                "id": "github:compareChanges",
                "name": "Compare Changes",
                "size": 1
            }
        ]
    }
}

Размер аналогичен свойству CSS flex-grow. В примере выше представление размером "size": 2 вдвое больше представления "size": 1. Свойство size учитывается, только если с контейнером представления работает то же расширение.

Расширяемый HTML-отрисовщик блокнота


Благодаря встроенным в блокноты отрисовщикам теперь здесь есть экспериментальный API, который позволяет настраивать в расширениях отображение HTML-содержимого. В этом API пока что предоставляется единственный хук postRender, который вызывается после первого отображения HTML-содержимого.

Чтобы попробовать этот экспериментальный API, в расширении нужно расширить API vscode.builtin-renderer.

"contributes": {
  "notebookRenderer": [
    {
      "id": "vscode-samples.my-custom-html-extension",
      "displayName": "My custom html renderer extension",
      "entrypoint": {
        "extends": "vscode.builtin-renderer",
        "path": "./out/main.js"
      }
    }
  ]
}

После чего отображающий хук может регистрироваться отрисовщиком в vscode-builtin-renderer:

import type { RendererContext } from 'vscode-notebook-renderer';

export async function activate(ctx: RendererContext<void>) {
  const htmlRenderer = await ctx.getRenderer('vscode.builtin-renderer');
  if (!htmlRenderer) {
      throw new Error(`Could not load 'vscode.builtin-renderer'`);
  }

  htmlRenderer.experimental_registerHtmlRenderingHook({
    // Invoked after the HTML content for `outputItem` has been rendered to `element`
    postRender(outputItem: OutputItem, element: HTMLElement): HTMLElement | undefined {
      // You can either modify `element` or return a replacement element
    }
  });
}

Протестируйте этот новый API и выскажите своё мнение!

Debug Adapter Protocol


argsCanBeInterpretedByShell для RunInTerminalRequest


В RunInTerminalRequest поддерживается новое свойство argsCanBeInterpretedByShell, с помощью которого клиенту сообщается, следует ли оставлять в команде args специальные символы оболочки, которые не переместились. Это позволяет пользователям писать выполняемые в терминале конфигурации запуска и включать символы, которые должны интерпретироваться в оболочке.

Разработка


Прогресс в поддержке песочницы Electron


На этом этапе мы добились существенного прогресса, включив по умолчанию песочницу Electron. В августе планируем включить в Insiders и в итоге сделать её по умолчанию в стабильной версии VS Code.

Режим песочницы включается выставлением в настройках "window.experimental.useSandbox": true. Надеемся, никаких изменений вы не заметите. Но, если обнаружите проблемы, сообщите нам.

Языковой сервер Markdown


В этой итерации мы извлекли инструменты для написания Markdown в библиотеку и языковой сервер, в том числе для структуры документов, завершения путей и диагностики.

Встроенное расширение Markdown для VS Code уже подготовлено для использования этого нового языкового сервера, хотя мы надеемся: никакой разницы в поведении вы не заметите. Однако благодаря этой подготовленности должна повыситься производительность, ведь инструментарий Markdown переводится на собственный процесс. Кроме того, переход на языковой сервер способствовал повышению производительности экспериментальной диагностики ссылок Markdown.

Надеемся, что эти новые пакеты пригодятся и в других инструментах и редакторах, а те в ответ даже смогут поспособствовать их развитию. Вместе мы сможем создать лучший инструментарий Markdown для всех! Заинтересовались? Тогда ознакомьтесь с соответствующими проектами:


Зависимости пакетов Debian


Зависимости пакетов Debian теперь заданы не жёстко, а генерируются скриптом. Этим решается проблема, обнаруженная ещё в 2016 году, когда из-за отсутствия зависимостей программы на некоторых машинах аварийно завершались во время выполнения.

Документация и расширения


CLI контейнера разработки


Раздел интерфейса командной строки (CLI) контейнера разработки изменён до новейшей версии CLI. Это эталонная Open Source реализация спецификации контейнеров разработки для их создания и запуска.

Баннер с сайта спецификации контейнеров разработки

Azure Developer CLI (azd)


Azure Developer CLI и его дополнительное расширение на VS Code теперь доступны для просмотра. С Azure Developer CLI (azd) переход из локальной среды разработки к Azure ускоряется благодаря удобным для разработчиков командам, которые соответствуют ключевым этапам рабочего процесса: написанию кода, сборке, развёртыванию, мониторингу, повторению.

Расширение Azure Developer CLI

В Azure Developer CLI применяются расширяемые шаблоны, которые включают всё необходимое для готового к работе приложения на Azure, в том числе в файлах для кода — лучшие практики, код приложения и многократно используемую инфраструктуру. Более того, в них содержатся комплексные сценарии, которые оставили Hello World! далеко позади.

С Azure Developer CLI можно инициализировать, подготавливать и развёртывать приложение или, ещё лучше, использовать 'azd up', чтобы делать всё это сразу! Список поддерживаемых команд azd см. в Developer CLI reference.

Благодарности


И последнее, но, конечно, не менее важное: большое спасибо всем участвующим в работе над VS Code.

Отслеживание проблем


Участвующие в отслеживании проблем:


Запросы на изменения


Участвующие в работе над vscode:

  • @0evan (Evan Spensley): выделение тестовых меток в оформлении, PR #155433.
  • @amanasifkhalid (Aman Khalid): закрыта проблема #134566 (добавлены настройки для цвета/значка вкладок терминала по умолчанию, PR #147463).
  • @angelozerr (Angelo): работал над пользовательским языком для языкового сервера на html, PR #146731.
  • @babakks (Babak K. Shandiz)
    • ???? добавлено «Окружение сниппетом» для быстрого исправления меню, PR #152718.
    • ???? Исправлена проблема диагностики markdown с точкой в именах файлов, PR #153206.

  • @Balastrong (Leonardo Montini): правильное отображение предупреждающих сообщений, PR #154266.
  • @CGNonofr (Loïc Mangeonjean): предоставление триггера и документации в code action от monaco, PR #149937.
  • @eamodio (Eric Amodio): закрывает проблему #54285, работает над добавлением webview/context, PR #154524.
  • @eltociear (Ikko Ashimine): F исправлена опечатка в languageDetectionWorkerServiceImpl.ts, PR #155923.
  • @fadeevab (Alexander Fadeev): добавление тестов Makefile для улучшенной грамматики: запятая, комментарий, шебанг, PR #154625.
  • @FantasqueX (FantasqueX): замена устаревшего canceled на Cancellation Error, PR #156094.
  • @ferdnyc (Frank Dana)
    • RPM: сделано /usr/bin/code принадлежащим пакету, PR #142907;
    • удалена оболочка fakeroot при сборке пакетов .rpm, PR #153249.

  • @gjsjohnmurray (John Murray): попытка предотвратить обновление установки Windows пользовательского типа при запуске от имени администратора, (#_148428) PR #155631.
  • @jbicker (Jan Bicker): исправлен неверный комментарий SignatureInformation.activeParameter, PR #155279.
  • @jeanp413 (Jean Pierre): предложение TerminalExitStatus.reason, PR #152833.
  • @jlelong (Jerome Lelong): добавление границы слова к разделителям пар скобок, которые начинаются или заканчиваются буквами, PR #151204.
  • @joscol (Joshua Cole): разрешение CommentNode, чтобы менять основной текст и одновременно входить в режим редактирования, PR #155767.
  • @jzyrobert (Robert Jin):

    • добавление кнопки Expand all в представлении обозревателя, PR #153614
    • редактирование showFoldingControls для включения параметра never, PR #153764.

  • @liby (Bryan Lee): добавление поддержки сопоставления угловых скобок и раскраски в TypeScript, PR #151705.
  • @mingwiki: исправлено то, из-за чего появилось предупреждение о проверке регулярных выражений в Socks5 Proxy, PR #144954.
  • @MonadChains (MonadChains): добавление команды для копирования вывода последней команды, (#_152097) PR #153235.
  • @nirabhromakhal (nirabhromakhal): исправлена ошибка, из-за которой строка состояния могла переполняться, не влияя на уведомления, PR #155649.
  • @PieterBranderhorst: пытался сделать скрытые диапазоны свёртывания независимыми от добавляемых не вручную, добавление ручного свёртыва… PR #139779.
  • @pingren (Ping):

    • исправлена #114461 PR #151824;
    • исправлено положение tab при обёртывании tabs, PR #156116.

  • @pwxn (Paul Landers): добавление команд для прокрутки редактора вверх/вниз, PR #155861.
  • @qingpeng9802 (Qingpeng Li): удаление es5 class compat, PR #153853.
  • @r3m0t (Tomer Chachamu):

    • исправлено: тестовая ошибка, не отображалась при разворачивании, PR #153994;
    • обновление навигации при обновлении папок рабочей области, PR #154616.

  • @SamirPS (SamirAk): сканирование кода (устаревший CodeQL Action v1), PR #156271.
  • @ssigwart (Stephen Sigwart):

    • исправлено: терминалы в области редактора не перезагружались, PR #151852;
    • исправлено зависание виджета предложений, PR #152011;
    • добавление привязок клавиш для фильтров файлов в редакторе поиска, PR #153954;
    • обнаружение ссылок терминала с пробелом, затем строкой: столбцом, PR #153957
    • исправлено: после отображения webview сочетания клавиш меню не работают, PR #154648.

  • @SvanT (Svante Boberg): добавление недостающих удалений, PR #155976.
  • @yiliang114 (易良): исправлены опечатки, PR #155310.

Участвующие в работе над vscode-generator-code:

  • @hawkticehurst (Hawk Ticehurst):

    • добавление ссылки на рекомендации по UX в файлах краткого руководства по markdown, PR #358;
    • проверка согласованности шаблона, PR #360.

  • @MatejKastak: непростая задача: унификация отступов в сгенерированном package.json, PR #357.
  • @nhedger (Nicolas Hedger): добавление pnpm в качестве диспетчера пакетов, PR #339.

Участвующие в работе над vscode-js-debug:


Участвующие в работе над vscode-json-languageservice:


Участвующие в работе над monaco-editor:




Прокачаем ваши навыки или поможем разобраться с VS Code с нуля:

Комментарии (11)


  1. ryanl
    14.09.2022 23:48
    +1

    Зачем это сюда выкладывать? Те кто работают в VS Code сами откроют Start Page и посмотрят changelog после апдейта. Контент закончился что-ли?) Фуу, приехали..


    1. stranger777
      15.09.2022 00:02
      +4

      Понимаю ваш посыл. Но количество людей, читающих подобные тексты на английском, гораздо меньше, чем людей, которые просто работают с VS Code. Таким образом, обязательно найдутся люди, которые пропустили некий функционал. Кроме того, конкретно в этом выпуске выделяется Python и интеграция с Jupyter Notebook, а это именно наши темы.

      Пример ближе и яснее: судя по профилю, вероятно, вы работаете с .NET. Но это не значит, что вы проштудировали весь MSDN и прочитали весь код платформы, или что читаете каждый пост о повышении производительности в очередном выпуске .NET (что несколько ближе к "changelog после апдейта"). Разные люди тратят своё время по-разному.


  1. dolfinus
    15.09.2022 01:30
    +3

    Новый 3-way merge интерфейс просто за гранью зла, а теперь ещё и дефолтный


    1. den_admin
      15.09.2022 12:18

      пользуясь случаем, подскажите, пожалуйста, годные мержелки?


      1. modjo
        15.09.2022 13:53
        +1

        meld


  1. jaha33
    15.09.2022 09:05
    +1

    А существует какие либо негласные правила о том как правильно обновлять IDE и плагины и стоит ли это делать вообще?

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


  1. fire64
    15.09.2022 14:02

    Не знаю, в чем причина, но после обновления Unity и VS Code все поломалось. Теперь c# проекты юнити не подгружаются нормально, функционал как у блокнота в итоге.


    1. fire64
      15.09.2022 16:37

      Хм и зачем было карму сливать?

      Статья о выходе новой версии программы и о новых возможностях и плюсах. Логично, что сюда можно в комментариях писать и о минусах новой версии и отзывы о ее использовании ((


      1. stranger777
        15.09.2022 22:18

        Поправил: конечно, критика имеет право быть, а дискуссия на Хабре очень ценна сама по себе


        1. fire64
          15.09.2022 23:09

          Спасибо


  1. igaliyewa
    15.09.2022 22:12

    Теперь c# проекты юнити не подгружаются нормально, функционал как у блокнота в итоге.. . . . .