Ноябрь 2017 (Версия 1.19)

Добро пожаловать в ноябрьский выпуск Visual Studio Code 2017 года. Как было объявлено в ноябрьском плане итераций, в этом месяце основное внимание уделялось проблеме с GitHub, производительности продукта и инструментам сбора данных для лучшей отчетности о проблемах.

 

Во время этой итерации мы закрыли 4400 проблем (отобранных ранее, либо фиксированных) среди всех наших проблем с VS Code. Поскольку мы постоянно закрывали проблемы, вы не прекращали подавать новые, и вы создали около 2700 новых репортов. Это привело к чистому сокращению примерно 1700 проблем, из которых 1400 были в главном репозиторие vscode.

 

Исправления ошибок, а также общественные PR привели к большому списку обновлений. Вот некоторые из основных:

 

  • Производительность - более быстрый запуск и другие улучшения производительности.
  • Serviceability / Diagnostics - новая диагностика VS Code, диагностика и мониторинг расширений.
  • Smarter IntelliSense - IntelliSense запоминает ваши предыдущие предложения.
  • Лучшая компоновка вкладки - заголовки вкладок могут масштабироваться в соответствии с доступным пространством.
  • Диффузор Git Side-by-Side diff - поставщик управления источником Git может отображать изменения изображения рядом.
  • Вывод в VS Code - легко просматривать вывод терминала в редакторе VS Code.
  • Новые рецепты отладки - Узнайте, как отлаживать Next.js, Meteor проекты и приложения, используя утилиту nodemon.

Если вы хотите прочитать эти заметки о выпуске в Интернете, перейдите в «Обновления» на code.visualstudio.com.

Вы также можете ознакомиться с этим выпуском 1.19, в видео от Cloud Advocate Brian Clark.

Примечания к выпуску размещены в следующих разделах, относящихся к VS Code. Вот некоторые дополнительные обновления:

 

  • Workbench - Сравните ваш активный файл с содержимым буфера обмена.
  • Редактор - Смещение улучшений, интервальные номера строк, поддержка глобального буфера обмена macOS.
  • Языки - TypeScript 2.6.2, синтаксис фрагмента JSX, новый JSON с режимом комментариев.
  • Отладка - Undefined переменные env за сессию, улучшить рендеринг VARIABLES.
  • Расширения - Выберите, какие расширения активны в ваших рабочих пространствах.
  • Расширение Authoring - поддержка предварительного выпуска, yo-код может включить TSLint и checkJS.

 

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

Производительность

Производительность является ключевой в редакторе, и в течение ноября мы зафиксировали почти 50 проблем, связанных с производительностью. Мы провели значительное время в профилировщике и перешли на этап инициализации VS Code. Повышение производительности - это не только оптимизация алгоритмов, но и улучшение восприятия производительности для пользователя. Мы начали думать о фазах жизненного цикла запуска (# 38080), чтобы лучше упорядочить создание наших компонентов для более быстрого восприятия запуска (например, всегда пытаться показать мигающий курсор в редакторе). Чтобы узнать больше о нашей работе, вы можете ознакомиться с нашими проблемами, обозначенными как perf-startup, perf-bloat (сокращение исходного кода) или perf.

 

Наконец, вот некоторые примечательные оптимизации, которые мы хотели бы упомянуть:

 

  • Улучшен запуск и общая производительность с улучшенной конфигурационной моделью # 37426, # 37539.
  • Улучшен запуск путем кэширования информации о расширении из файлов package.json # 28331.
  • Улучшен запуск, задерживая создание вспомогательных процессов, таких как наблюдатель файлов # 38230, приложение для поиска # 38235 и процесс расширения # 38323.
  • Улучшена загрузка файлов для повышения производительности запуска # 37541.
  • Использован более быстрый виджет списка вместо дерева, если это возможно # 38638. Переработано представление BREAKPOINTS и раздел Explorer OPEN EDITORS.
  • Оптимизирована обработка сенсорных событий для повышения производительности # 37917.
  • Улучшена общая производительность рабочего места, пропустив ненужные макеты и вычисления 39699, # 39185, # 38966, # 38963, # 38962, # 38960.
  • Улучшен запуск, удален неиспользуемый код # 38414.

 

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

Исправления

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

Логирование

VS Code теперь создает файлы журналов активности, которые могут помочь в диагностике неожиданных проблем, таких как сбои, задержки и т. Д. При запуске VS Code создает четыре основных процесса: основной, общий, рендеринг и расширение-хост, а каждый процесс регистрируется в собственном файле журнала, Вы можете открыть каждый файл журнала с помощью команды Developer: Show Logs... которая откроет сборщик процессов, чтобы выбрать конкретный файл журнала процесса.

VS Code поддерживает следующие уровни журналов:

 

  • critical
  • error
  • warn
  • info
  • debug
  • trace
  • off

По умолчанию VS Code сконфигурирован с информацией об уровне информации и журналах и уровнях выше (предупреждение, ошибка, критическое). Вы можете изменить уровень журнала с помощью аргумента командной строки --log.

--log <level>

    Log level to use. Default is 'info'. Allowed values are 'critical', 'error', 'warn', 'info', 'debug', 'trace', 'off'.

Вы также можете отключить ведение журнала с помощью опции --log off.

--status command line option

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

 

Выполнить код --status из командной строки, пока выполняется другой экземпляр VS Code, и после сбора статуса вы увидите такой экран:

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

VS Code process view

В качестве побочного продукта новой опции командной строки VS Code --status мы создали экспериментальное расширение vscode-процессов, которое показывает все дочерние процессы VS Code в пользовательском представлении и динамически обновляется по мере того, как процессы приходят и уходят. Чтобы лучше понять роль этих процессов, расширение анализирует аргументы процесса и соответствующим образом маркирует процессы. В скобках также указывается загрузка процессора и объем памяти расширения.

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

 

Это расширение по-прежнему является прототипом, и поэтому оно еще не доступно на Marketplace, но вы можете легко собрать расширение VSIX, выполнив следующие команды:

git clone https://github.com/weinand/vscode-processes

  cd vscode-processes

  npm install

  npm run package

После создания расширения VSIX используйте команду Install from VSIX... для установки расширения.

Запуск расширений

Чтобы пользователи могли обнаруживать неисправные или плохо выполняемые расширения, мы добавили представление Running Extensions. В этом представлении отображаются все расширения, которые в настоящее время работают вместе с полезной информацией о производительности. В этом представлении пользователи могут также профилировать VS Code, чтобы определить, какие расширения занимают больше всего времени и являются вероятной причиной проблем с производительностью. Запустите команду Developers: Show Running Extensions из палитры команд, чтобы просмотреть это представление.

Примечание: Представление Running Extensions все еще находится в разработке, поэтому ожидайте увидеть обновления в будущих выпусках. Мы также ценим ваши отзывы.

Как регистрировать производительность и ошибки при сбое

Мы создали руководство для:

 

Workbench

Опция компоновки вкладок нового редактора

Была добавлена новая настройка, workbench.editor.tabSizing, для управления размером вкладок в зависимости от пространства, доступного во внешнем контейнере. По умолчанию (fit) работает по-прежнему и всегда гарантирует, что на вкладке отображается полное имя файла. Если пространство становится слишком маленьким, появится полоса прокрутки.

 

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

Вывод непосредственно в VS Code

Мы добавили поддержку для вывода-вывода команды терминала непосредственно в VS Code и открытие в редакторе:

Кодирование терминала будет определено путем запуска команды locale charmap на Linux / macOS и chcp в Windows. Вы также можете установить переменную окружения VSCODE_CLI_ENCODING, чтобы указать кодировку вручную.

 

Примечание: Теперь мы откроем временный файл для чтения из stdin, как только обнаружим, что stdin не подключен к терминалу. Если вы находитесь в настройке, где вы запускаете VS Code через сценарий оболочки (code.sh или code.cmd) из приложения, которое не является терминалом, пожалуйста, измените это, чтобы вместо этого запустить наш исполняемый файл.

Сравнение открытого файл в буфере обмена

Благодаря PR # 37841 от Max Furman (@maxfurman) теперь вы можете сравнить содержимое текущего открытого файла с содержимым буфера обмена. Команда Compare Active File with Clipboard (id workbench.files.action.compareWithClipboard).

workbench.panel.location устарел

Мы удалили workbench.panel.location из настроек и теперь сохраняем это в хранилище. Все предыдущие функции перемещения панели в сторону сохраняются. Более подробную информацию об этом изменении можно найти здесь.

Редактор

IntelliSense стал умнее

VS Code IntelliSense повторно сортирует предложения по мере ввода. Это гарантирует, что наиболее подходящие предложения находятся в верхней части. Однако есть случаи, когда несколько предложений подходят одинаково хорошо, например, совпадение con в confirm, console, const, и constructor одинаково хорошо подходят, а лексикографическая сортировка решает, какое предложение предварительно выбрано.

 

В этом выпуске мы обновили IntelliSense, чтобы помнить, что вы выбрали в таких случаях. Выберите const для префикса con один раз, и он будет лучшим совпадением в будущем.

Иногда, когда вы печатаете, вы можете случайно смешать соседние символы, например, вместо console, вы можете ввести cnosole или resutl вместо result. Мы сделали IntelliSense более расслабленным и теперь попробуем несколько перестановок при подсчете предложений.

В приведенном выше примере IntelliSense одобряет предложение console, изменяя cnos на cons, поскольку это совпадение сильнее, чем совпадение cnos в RTCIceTransportStateChangedEvent.

Сворачивание областей

Мы изменили Shift + Click на сворачивающиеся значки, чтобы не только складывать / разворачивать соответствующий раздел, но и все его дочерние элементы.

 

Добавлены новые сворачивающиеся области для следующих языков:

 

CSS / Less / SCSS: /*#region*/ и /*#endregion*/

Coffeescript: #region и #endregion

PHP: #region и #endregion

Bat: ::#region и ::#endregion

 

Примечание: Если вы не помните маркер сворачивания, введите # в начале строки, и вы получите предложения IntelliSense. На каждом языке предлагаются предложения или фрагменты предложений.

 

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

 

Fold All Regions (CTRL+K CTRL+8) сбрасывает все регионы с маркеров (например, #region).

Unfold All Regions (CTRL+K CTRL+9) разворачивает все регионы из маркеров.

Fold All Block Comments (CTRL+ K CTRL+/) сбрасывает все регионы, которые начинаются с токена комментария блока (например, /*).

 

Интервальные номера строк

Благодаря PR # 37120 от Дэвида Вебера настройка editor.lineNumbers теперь может быть настроена с интервалом значений, что приведет к тому, что VS Code будет отображать номера строк каждые 10-ю строку.

Глобальный поиск буфера обмена на macOS

Благодаря PR # 35956 от Melvin редактор теперь интегрируется с глобальным поисковиком macOS. Если вы ищете что-то в VS Code или других родных приложениях macOS, а затем переключитесь на другой, виджет поиска будет содержать один и тот же текст. Эта функция включена по умолчанию для macOS, и вы можете отключить ее, установив для параметра editor.find.globalFindClipboard значение false.

Языки

HTML

HTML теперь предлагает завершение кода для объектов символов, таких как &gt; &amp. Чтобы просмотреть предложения, введите & в элементе или атрибуте и вызовите IntelliSense.

JSON с комментариями

Добавлен новый режим JSON с комментариями (jsonc), чтобы различать JSON-подобные файлы, которые позволяют добавлять комментарии и файлы JSON, соответствующие стандартной спецификации JSON. Все файлы конфигурации VS Code используют новый режим и позволяют отправлять комментарии, а файлы .json по умолчанию - стандартный режим JSON, который будет сообщать о комментариях как ошибке.

TypeScript 2.6.2

VS Code теперь включает в себя TypeScript 2.6.2. Это небольшое обновление устраняет некоторые важные исправления ошибок и улучшения инструментальных средств.

JSX синтаксис фрагмента

VS Code теперь включает в себя TypeScript 2.6.2. Это небольшое обновление устраняет некоторые важные исправления ошибок и улучшения инструментальных средств.

Typescript reportStyleChecksAsWarnings

VS Code теперь отображает проблемы стиля кода TypeScript как предупреждения, а не ошибки. Это относится к:

 

  • Переменная объявлена, но никогда не используется
  • Свойство объявлено, но его значение никогда не читается
  • Обнаружен недоступный код
  • Неиспользованная метка
  • Падающий корпус в выключателе
  • Не все пути кода возвращают значение

 

Рассмотрение этих данных в качестве предупреждений совместимо с другими инструментами, такими как TSLint. Они будут отображаться как ошибки при запуске tsc из командной строки.

 

Вы можете отключить это поведение, установив: "typescript.reportStyleChecksAsWarnings": false.

Language Server Protocol

Протокол языкового сервера был расширен с помощью следующей новой функции: контекст завершения, предоставляемый для доступа к символу триггера, больше элементов завершения и видов символов, а также поддержка уценки для элементов завершения и подписи. Добавления протокола доступны в версии 4.0.0-next.x для клиентских и серверных модулей npm.

Git

Изображение отличается

Теперь вы можете просматривать изменения в своих изображениях, бок о бок, непосредственно из своего репозитория Git:

Отладка

Команда редактирования точек остановки

Мы добавили новую команду Edit Breakpoint... в контекстное меню BREAKPOINTS. Это облегчит пользователям редактирование условия или количество совпадений точек останова.

Неопределенные переменные среды

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

 

Если для переменной окружения установлено значение null, эта переменная будет удалена из среды до запуска цели отладки. Это значительно упрощает проверку и отладку кода, который зависит от переменной, которая не определена.

 

Обратите внимание, что в этом выпуске поддерживается только отладчик Node.js.

Новый стиль рендеринга для синтетических элементов в VARIABLES

В представлении VARIABLES отладчика мы теперь показываем «синтетические» элементы в приглушенном стиле, чтобы отличать их от реальных «данных», полученных от отладчика или среды выполнения. В этом выпуске только узлы «диапазона» больших массивов считаются «синтетическими» и отображаются в приглушенном стиле. Мы ожидаем, что в будущем эта функция будет включена в число дополнительных расширений debug.

Новые настройки отладки

  • Новый параметр debug.showInStatusBar контролирует видимость элемента строки состояния отладки. Возможные значения: never, always и по умолчанию onFirstSessionStart.
  • Новая настройка debug.openDebug контролирует видимость представления Debug. Возможные значения: neverOpen, openOnSessionStart и значение по умолчанию openOnFirstSessionStart.

Расширения

Включить расширения на рабочее пространство

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

Новая документация

Java темы

Существует новый набор тем Java, в которых показано, как использовать пакет расширения Java для отладки, развертывания облаков и разработки Azure Functions.

Python темы

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

Рецепты отладки

Мы добавили несколько новых рецептов отладки:

 

 

См. «Отладка рецептов», чтобы узнать больше об этих руководствах и найти полезные сообщения в блогах.

Extension Authoring

Pre-release versions

Теперь вы можете распространять расширения VSIX с версиями до выпуска, такими как x.y.z-alpha, x.y.z-beta и VS Code, которые будут обнаруживать их и предоставлять обновления в соответствии с их приращениями версии, как определено здесь. Обратитесь к этой проблеме, чтобы узнать больше.

Генератор расширений- yo code

Генераторы yoman для расширений TypeScript и JavaScript теперь предоставляют дополнительные опции, позволяющие больше проверять ваши расширения. Для расширений TypeScript генератор предоставляет параметры для настройки TSLint и включения strict параметров компилятора TypeScript.

 

Для JavaScript есть приглашение включить параметр checkJS, который позволяет проверять тип в файлах JavaScript.

Debug API updates

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

 

В этой вехе мы продолжили работу над API отладки, связанным с точками останова. Теперь можно получить доступ к набору всех точек останова рабочей области (vscode.debug.breakpoints) и зарегистрироваться для уведомления о добавленных, удаленных или измененных точках останова (vscode.debug.onDidChangeBreakpoints).

 

Обратите внимание, что доступ к точкам останова изначально возвращает пустой массив, но запускает последующее событие BreakpointsChangeEvent, которое обновляет vscode.debug.breakpoints до правильного набора. Поэтому, если ваш код зависит от правильного набора точек останова, не забудьте зарегистрироваться для BreakpointsChangeEvents.

 

Различные типы точек останова представлены в виде различных подклассов точки останова. В настоящее время поддерживаются SourceBreakpoint и FunctionBreakpoint. Используйте проверку экземпляра, чтобы определить конкретный тип.

Примечание: В настоящее время этот API предлагается, поэтому для его использования вы должны выбрать его, добавив "enableProposedApi": true для package.json, и вам придется скопировать vscode.proposed.d.ts в расширение проект. Также имейте в виду, что вы не можете публиковать расширение для Marketplace, которое использует атрибут enableProposedApi.

Текст вывода на консоли отладки

 

Предлагаемый API отладки консоли от последнего месяца был слегка изменен и перемещен с «предлагаемого» на «официальный». Расширение может добавлять текст в консоль отладки с помощью vscode.debug.activeDebugConsole.append (текст) или vscode.debug.activeDebugConsole.appendLine (текст). Устаревший debug.logToDebugConsole будет удален, как только он больше не будет использоваться ни в одном расширении на Marketplace.

Debug contributions in package.json

Более мелкие события активации отладчика

 

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

 

Простой способ достичь этого - добавить событие активации onDebug в секцию activEvents пакета расширения package.json. Это работает отлично, пока расширение не тратит много времени в своей последовательности запуска. Если это так, например, запуск языкового сервера, следует избегать ранней активации, поскольку это может негативно повлиять на другие расширения отладки.

 

Чтобы упростить запуск, мы представили еще два мелкозернистых активационных события:

 

  • onDebugInitialConfigurations запускается непосредственно перед вызовом метода allowDebugConfigurations для DebugConfigurationProvider.
  • onDebugResolve: type запускается непосредственно перед вызовом метода resolveDebugConfiguration для DebugConfigurationProvider для указанного типа.

 

Правило большого пальца: если активация отладочных расширений является легкой, используйте onDebug. Если это супертяжелый вес, используйте onDebugInitialConfigurations и / или onDebugResolve в зависимости от того, реализует ли DebugConfigurationProvider соответствующие методы, обеспечивающие DebugConfigurations и / или resolveDebugConfiguration.

Debug Adapter Protocol

Новое значение enum virtual для атрибута presentationHint.kind типа Variable

 

Новое значение enum virtual указывает, что переменная является синтетическим объектом, введенным отладчиком для целей рендеринга или взаимодействия с пользователем. Ожидается, что клиент будет отображать этот элемент по-другому, чем обычные переменные.

 

Поддержка удаления переменных из среды

 

Запрос runInTerminal используется адаптером отладки для запуска цели отладки во встроенном или внешнем терминале. Один параметр для запроса - это набор переменных окружения для перехода к цели отладки. В этом выпуске значение null добавлено в тип значения переменной среды, при этом семантика «удаляет переменную среды из среды перед запуском цели».

Инженерия

Yarn

Теперь мы используем Yarn для управления зависимостями производства и разработки. Это значительно сократило время настройки для подготовки репозитория VS Code, как для разработки, так и для сборки. Более подробная информация содержится в этом Pull запросе.

Новые команды