Professional Documents
Culture Documents
Welcome to the August 2018 release of Visual Studio Code. There are a number of significant updates in this
version that we hope you will like, some of the key highlights include:
Settings editor - New Settings editor UI to discover, search, and modify VS Code settings.
Custom menu bar - Fully themable title and menu bars on Windows and Linux.
Breadcrumbs improvements - Symbols highlighted when navigating with breadcrumbs.
New Terminal menu - Combined menu for creating terminals and managing tasks.
Platform specific keyboard shortcuts - Share the same keybindings.json file across different OSs.
CSS @import path completion - Import path suggestions while you type in CSS, SCSS, and Less.
JSON conditional evaluation - Support for 'if', 'then', and 'else' schema keywords.
Built-in Loaded Scripts view - Loaded Scripts Explorer now available for debug extensions.
Insiders: Want to see new features as soon as possible? You can download the nightly Insiders
(https://code.visualstudio.com/insiders) build and try the latest updates as soon as they are available. And for the
latest Visual Studio Code news, updates, and content, follow us on Twitter @code (https://twitter.com/code)!
Workbench
Settings editor
Over the past few months, we've been developing a GUI for editing settings. In 1.27, we are making it the default
settings editor.
You can still access the JSON settings editor, either by using the command Open Settings (JSON) or by changing
your default settings editor with the "workbench.settings.editor" setting.
One improvement we made this month is to clean up the UI by moving setting value descriptions
( enumDescriptions ) into a custom dropdown control:
Settings that have been modified are now indicated with a blue line, like modified lines in the editor. The gear icon
opens a context menu with an option to reset the setting to its default value.
Setting values are now validated, and any validation errors are displayed.
The table of contents now will remain visible during search, and filter to show only categories that have matches.
You can click on a category to filter the results to just settings under that category. Set
"workbench.settings.settingsSearchTocBehavior" to "hidden" if you prefer to hide the table of
contents during search.
When you search in settings, our Bing-powered search service is still providing results that it thinks are relevant.
Now, that service will also show you extensions from the Marketplace that have relevant settings. You will see a
button at the bottom of the settings search results, Show matching extensions. When clicked, the Extensions view
will open with the matching extensions.
Themable title bar, menu bar, and context menus throughout the product. This means your dark theme stays
dark!
Better keyboard navigation in the menu bar. We have made it easier to switch between menus with the
keyboard and use menu mnemonics.
A less intrusive menu bar. The new experience is more compact and less jarring when setting
"window.menuBarVisibility" to "toggle" .
Better accessibility. Several accessibility issues have been resolved to improve menu usability with a screen
reader.
As we want to make this new experience the default on Windows, we encourage you to try it out and send us your
feedback so we can provide the best possible experience.
Breadcrumbs improvements
We have tweaked the new breadcrumbs bar, made various improvements, and fixed bugs:
{
"key": "ctrl+o",
"command": "workbench.action.files.openFolder",
"when": "!isMac"
},
{
"key": "cmd+o",
"command": "workbench.action.files.openFolder",
"when": "isMac"
}
This makes it much easier to share your keybindings.json file across different machines.
Note: Unless the file is dirty, the contents of the file are not preserved between restarts.
Accessibility improvements
We have fixed quite some accessibility issues - mostly around keyboard navigation, screen reader support, and
focus. The full list can be found here (https://github.com/Microsoft/vscode/issues?
q=is%3Aissue+label%3Aaccessibility+milestone%3A%22August+2018%22+is%3Aclosed). This is an ongoing effort
which we plan to continue in September.
Editor
Auto closing & surrounding characters
When typing certain brackets like { , [ or ( , depending on the programming language, they will get auto-closed
by default when they are followed by specific characters that typically cannot start an expression, for example
;:.,=}])> . This behavior can be customized with the editor.autoClosingBrackets setting. Similarly, it is
possible to customize the auto closing behavior while typing quotes like " , ' or ` with
editor.autoClosingQuotes .
When text is selected and you type one of these characters, the selection will be surrounded by brackets or quotes.
It is now possible to adjust this behavior separately via the new editor.autoSurround setting.
Languages
Path completion for CSS imports
Path completion for CSS, SCSS and Less @import is now available. SCSS partial @import is handled as well.
Jump to definition for CSS links
There is now jump to definition for @import and url() links in CSS, SCSS and Less.
JSON
The built-in JSON language extension now supports the new JSON Schema Draft-07 (https://json-
schema.org/draft-07/json-schema-release-notes.html).
The most interesting addition are the if , then , else keywords to allow conditional schema evaluation.
{
"type": "integer",
"minimum": 1,
"maximum": 1000,
"if": { "minimum": 100 },
"then": { "multipleOf": 100 },
"else": {
"if": { "minimum": 10 },
"then": { "multipleOf": 10 }
}
}
The if keyword means that, if the result of the value schema passes validation, apply the then schema,
otherwise apply the else schema.
HTML
The HTML formatter has been updated to version 1.8.1 of JS Beautifier (http://jsbeautifier.org/).
"aligned-multiple" will wrap attributes when the maximum line length is reached and aligns all
wrapped lines with the first attribute.
TypeScript 3.0.3
VS Code now ships with TypeScript 3.0.3. This minor release fixes a number of bugs and improves stability. You can
read about the complete set of changes here (https://github.com/Microsoft/TypeScript/milestone/76?closed=1).
Debugging
Loaded Scripts view now reusable
For more than a year, the Loaded Scripts Explorer (https://code.visualstudio.com/docs/nodejs/nodejs-
debugging#_access-loaded-scripts) in the Debug view was contributed by the Node.js debug extension and was
not available to other debuggers. In this release, we've added the Loaded Scripts view as a built-in debugger
feature. All debug extensions that have the notion of "scripts" will be able to support access to their scripts in a
dynamically updated view.
In addition, we've improved some shortcomings of the old Loaded Scripts Explorer:
Chains of single-child folders are now collapsed into a single node. This makes it much easier to drill down
into deep but sparse folder hierarchies.
We've started to address accessibility issues.
Extension Authoring
Extension logging
The ExtensionContext that comes as an argument of the activate function has a new property logPath
(https://github.com/Microsoft/vscode/blob/526f4c149211773357b2ce9f62c2a9973612a16a/src/vs/vscode.d.ts#L4541-
L4546). This is the absolute file path of a directory where extensions can store log files. The path is unique for an
extension and not reused by other extensions.
Code Action kind announcements from the server to allow clients to populate corresponding menu entries.
An implementation for a textDocument/prepareRename (https://microsoft.github.io/language-server-
protocol/specification#textDocument_prepareRename).
Support for file operations (create, rename and delete) in Workspace Edits
(https://microsoft.github.io/language-server-protocol/specification#workspace_applyEdit).
Previously, when building Language Server extensions using vscode-languageclient , you could specify
[langId].trace.server to send LSP logs (https://code.visualstudio.com/docs/extensions/example-language-
server#_logging-support-for-language-server) into a VS Code output channel.
[langId].trace.server can now output logging information in a machine-readable JSON format
(https://github.com/Microsoft/language-server-protocol-inspector#log-format):
"languageServerExample.trace.server": {
"format": "json", // or "text"
"verbosity": "verbose" // or "off" | "message"
}
This opens up interesting use cases, such as streaming LSP logs into an LSP Inspector
(https://marketplace.visualstudio.com/items?itemName=octref.lsp-inspector-webview) to visualize the behavior of
a Language Server:
Note that you cannot publish an extension that uses a proposed API. We may likely make breaking changes in the
next release and we never want to break existing extensions.
/**
* Whether the source control is selected.
*/
readonly selected: boolean;
/**
* An event signaling when the selection state changes.
*/
readonly onDidChangeSelection: Event<boolean>;
}
Comment providers
We are introducing the concept of comments this iteration, which allow extensions to create and manage
conversations within editors and a new Comments panel. This enables extensions to support code review scenarios.
Comments are organized into threads and associated with a particular document.
interface CommentThread {
threadId: string;
resource: Uri;
range: Range;
comments: Comment[];
collapsibleState?: CommentThreadCollapsibleState;
}
interface Comment {
commentId: string;
body: MarkdownString;
userName: string;
gravatar: string;
command?: Command;
}
interface CommentInfo {
threads: CommentThread[];
commentingRanges?: Range[];
}
interface DocumentCommentProvider {
provideDocumentComments(document: TextDocument, token: CancellationToken): Promise<Com
mentInfo>;
createNewCommentThread(document: TextDocument, range: Range, text: string, token: Canc
ellationToken): Promise<CommentThread>;
replyToCommentThread(document: TextDocument, range: Range, commentThread: CommentThrea
d, text: string, token: CancellationToken): Promise<CommentThread>;
onDidChangeCommentThreads: Event<CommentThreadChangedEvent>;
}
interface WorkspaceCommentProvider {
provideWorkspaceComments(token: CancellationToken): Promise<CommentThread[]>;
onDidChangeCommentThreads: Event<CommentThreadChangedEvent>;
}
Using the DocumentCommentProvider , comments can be returned for open documents. When providing
comments, the extension specifies both the current threads on the document, and what range of the document
supports adding new comments. Comments can be added or replied to from within the document.
When a WorkspaceCommentProvider is first registered, the CommentsPanel becomes visible and shows all
comments provided to it. Comments are grouped by comment thread and resource. When a comment is selected
in the panel, the comments command is run, so the extension determines the behavior.
Preview Features
Preview features are not ready for release but are functional enough to use. We welcome your early feedback while
they are under development.
Engineering
Extensions and webpack
We are now using webpack (https://webpack.js.org) to bundle extensions. It unlocks two achievements: (1) reduce
the startup time for extensions because there are fewer files to load and less source to parse and (2) reduce the
install time because fewer files need to be extracted and written to disk. So far, we've reduced the bundle size by
~4000 files!
Performance canary
We have added a test harness to ensure that our startup performance isn't regressing. There is a new script that can
be deployed to dedicated machines to test the performance of Insider builds. The script simply installs the latest
build and makes sure that it starts within a time limit. For now, we started with Windows because performance is
often affected by updates to anti-virus software but the plan is to test on all platforms we support.
Thank You
Last but certainly not least, a big Thank You! to the following folks that helped to make VS Code even better:
Contributions to vscode :
Contributions to vscode-vsce :
Contributions to vscode-eslint :
Contributions to language-server-protocol :
Contributions to vscode-languageserver-node :
Contributions to debug-adapter-protocol :
Contributions to vscode-css-languageservice :
Connor Shea (@connorshea) (https://github.com/connorshea): Add CSS Lint Rule name to lint markers. PR
#116 (https://github.com/Microsoft/vscode-css-languageservice/pull/116)
Contributions to vscode-html-languageservice :
Contributions to vscode-json-languageservice :
Chris Wendt (@chrismwendt) (https://github.com/chrismwendt): Do not mutate the given path PR #12
(https://github.com/Microsoft/node-jsonc-parser/pull/12)
Contributions to vscode-generator-code :
Contributions to localization :
There are almost 1200 members in the Transifex VS Code project (https://aka.ms/vscodeloc) team with about 100
active contributors every month. We appreciate your contributions, either by providing new translations, voting on
translations, or suggesting process improvements.
Here is a snapshot of contributors for this release. For details about the project including the contributor name list,
visit the project site at https://aka.ms/vscodeloc (https://aka.ms/vscodeloc).
Yes No
Support (https://support.microsoft.com/en-us/getsupport?
wf=0&tenant=ClassicCommercial&oaspworkflow=start_1.0.0.0&locale=en-us&supportregion=en-
us&pesid=16064&ccsid=636196895839595242)
Privacy (https://privacy.microsoft.com/en-us/privacystatement)
Terms of Use (https://www.microsoft.com/en-us/legal/intellectualproperty/copyright/default.aspx) License (/License)
(https://www.microsoft.com)
© 2018 Microsoft