⭐️WebStorm 2019.1 is now available!⭐️
WebStorm 2019.1 brings with it new smart intentions for JavaScript and TypeScript, improved support for Angular, updated documentation for CSS and HTML, a more powerful debug console, and much more!
Explore the top new features and download WebStorm 2019.1 on our website.
In this blog post we would like to share with you the detailed release notes for this WebStorm update. They are compiled from the EAP blog posts that we’ve been publishing here for the past several months.
Here are the features and improvements grouped by the WebStorm subsystems:
With destructuring, you can unpack values from arrays and objects into variables. This feature has a very concise syntax that is often used when you need to pass data in your app.
If you’re not yet familiar with destructuring, we recommend reading the great overview in the book Exploring ES6.
To help you start using destructuring in your code, WebStorm 2019.1 adds a set of new refactorings and intentions that can introduce destructuring to your code. Let’s see how they can be used when working with objects and arrays.
If you have a piece of code in which you are getting multiple values out of an array or an object, you can now simplify it by using the new Replace with object or array destructuring intention (Alt-Enter):
If not all values from the array or object are used, the resulting destructuring will skip the elements:
If you want to keep the original assignments, you can use the Introduce object or array destructuring intention (Alt-Enter), or go with the Extract object or array destructuring refactoring:
This intention can be very handy when working with React class components:
Some other IDE actions now also default to destructuring. For example, the Insert ‘require()’ quick-fix that works in Node.js apps with CommonJS modules now uses destructuring:
There’s also a new Convert parameters to object action (Alt-Enter) that generates a destructuring parameter for a function:
Convert Promise to async/awaitWith this new intention in the IDE, you can automatically change a function that returns a promise with .then()
and .catch()
calls to an async function that uses the async/await syntax – not only in TypeScript files, but also in JavaScript and Flow.
Simply press Alt-Enter on the name of the function and select Convert to async function. Voila!
WebStorm will introduce a new variable and replace Promise.catch
with the try-catch block:
// Before: function getProcessedData(url) { return downloadData(url) .then(v => { return processDataInWorker(v); }) .catch(e => { alert("Please try again later"); }); }
// After async function getProcessedData(url) { try { let v = await downloadData(url); return processDataInWorker(v); } catch (e) { alert("Please try again later"); } }
In this example, WebStorm knows that `fetch` returns a promise and suggests converting the download function to async:
// Before: function download() { return fetch('https://jetbrains.com').then( result => result.ok) }
// After: async function download() { let result = await fetch('https://jetbrains.com'); return await result.ok; }Convert properties in constructor to class fields
With this handy new intention (Alt-Enter), you can replace properties defined in a constructor with class fields:
// Before: class Point { constructor() { this.x = 0; this.y = 0; } }
// After: class Point { x = 0; y = 0; constructor() { } }New inspections for switch statements
WebStorm 2018.2 added an intention which generated cases for ‘switch’. But what if you edited your code and are now missing a new case inside the switch statement? Or there’s a missing default
? Or what if some branches are unreachable? The IDE can now help with that too. We’ve added a bunch of improvements which may be truly beneficial to handling switch statements in JavaScript and TypeScript.
There’s now code completion inside switch
that suggests cases based on the available data about the parameter (when it is a TypeScript enum or when its type is specified in JSDoc as a list of string values).
The new inspection will check that all the cases are covered and if any are missing, the intention to create them can be used.
If there’s an empty switch statement, the IDE will suggest that you remove it. You can unwrap a switch
that only has a default clause.
The IDE will now warn you about any unreachable branches and provide a quick fix to remove them.
Another new inspection will help you avoid the situation when a variable is declared in one case and then used in another.
The last new inspection will warn you if the type of switch parameter is not strictly enumerable and there is no default clause.
Note that this one is set to the “Don’t show, quick fix only” severity level by default, i.e., it provides the quick fix on Alt-Enter, but it is not highlighted in the editor. To change the severity, navigate to Preferences | Editor | Inspections | JavaScript | General | ‘switch’ statement with no ‘default’ branch.
Add or remove exportWith this new intention (Alt-Enter), you can quickly add export
or export default
for a class, variable, or function – and save a couple of seconds typing it. The Remove export action, as you may have already guessed, removes the export statement – but first it makes sure that the symbol is not used in some other files.
Starting with TypeScript 3, some of the error messages have additional information with links to the related code that can help you to understand the cause of the problem. WebStorm now shows this extended info in its error tooltips, so you can click on the link to jump to the code.
Adding missing library to tsconfig.jsonWith TypeScript, you need to explicitly list standard libraries in the tsconfig.json file that TypeScript will include in the compilation, e.g. DOM, ES2015.Promise, etc. WebStorm can help you with that. Press Alt-Enter on the symbol defined in the unlisted library, and use a quick-fix to add the required libraries to tsconfig.json.
TypeScript 3.3 and 3.4We have updated the bundled version of TypeScript to 3.3.
To get ready for the TypeScript 3.4 release, we’ve supported the new syntax features planned for this release.
Style sheets support Updated docs for CSS and browser compatibility checkWe’ve updated our documentation for CSS properties and pseudo-elements. Press F1 to see the brief description of the property and its values, as well as information about the supported browsers.
The description and browser compatibility data is loaded from MDN. You can quickly open the full article in the browser to see more details and examples – click the link at the bottom on the documentation popup, or press Shift-F1.
If you’re offline and the IDE can’t access developer.mozilla.org, WebStorm will show the property description from the bundled schemas that it uses for completion and validation. It might be different from the one available on MDN, but still useful.
Now, when WebStorm knows what browsers support a specific CSS property (thanks to MDN Browser Compatibility Data), you can use a new compatibility inspection. Go to Preferences/Settings | Editor | Inspections – CSS and select “Browser compatibility”, then select the minimum browser versions you want to target. You will see a warning in the editor if a property is not supported in the target browser.
With the new Extract CSS variable refactoring, it is now so much easier to introduce variables using the var(--var-name)
syntax in your .css files.
Select the value you want to declare as a variable and press Alt-Cmd-V on macOS or Ctrl-Alt-V on Windows and Linux. Or, select Extract Variable in the Refactor menu. Then type the name and decide if you want to replace just one or all usages of this value in the current file.
By the way, the color preview on the editor gutter now works for all usages of CSS variables.
Camel case support for CSS ModulesIf you’re using CSS Modules in your project, code completion for classes in the JavaScript file will now suggest camel-cased versions of class names with dashes:
Support for Less 3.0 featuresIn Less files, we’ve added support for the Less 3.0 feature, properties as variables.
After typing $
as a value, you will now see suggestions for the property names used in this scope that can be used as variables:
WebStorm now also supports the if syntax in Less.
HTML support Updated HTML documentationWe updated the HTML documentation to make it much more informative and useful. The quick documentation for a tag (Ctrl+Q on Windows and Linux or F1 on macOS) shows its short description from MDN including its compatibility with the most popular browsers: Chrome (+Android), Safari (+iOS), Firefox, IE, and Edge. (Note that if there’s no available information or if a tag is available in all browsers, then no browser info is shown.)
The docs for the attributes also show the MDN data:
If you want more information about the tag and examples of how it is used, then it is easy to consult the full MDN reference – press Shift+F1 or click the link and it will open in the browser.
Improvements in PugWe’ve fixed a bunch of issues related to the use of JavaScript in Pug (ex-Jade) files: arrow functions are supported inside of Pug’s script tag and template strings are now also properly supported.
Development with Angular New inspections for Angular projectsFor Angular applications, we’ve added 17 new inspections that will help you detect Angular-specific errors in your app as you edit code. These inspections are going to replace the integration with the Angular language server that the IDE was running side by side with the TypeScript service. Our goal is to provide a better editing experience when working with both TypeScript and Angular template files, with more checks and quick-fixes available for them.
Here are a couple of examples:
The new inspection suggests to add a component to a module:
This inspection warns you that both template and templateUrl properties are used and suggests removing one:
Here the inspection warns you about the incorrect use of structural directives:
To see the full list of inspections and configure them, go to Preferences/Settings | Editor | Inspections – Angular.
Easier navigation in Angular projectsWe know that when working on Angular projects you always have to jump between the different component files such as TypeScript, template, and style files. There are many ways to do this: you can use the Navigation bar, or the Project view, or Go to File, or the Angular CLI QuickSwitch plugin…
We’ve decided to add one more – using the Related Symbol… popup. When you’re in one of the Angular component files, press Ctrl-Cmd-Up on macOS or Ctrl+Alt+Home on Windows and Linux to see the list of other related files. Then you can use the arrow keys to select the file you need and then press Enter to open it.
In the popup, you can also use the numbers associated with each file type: 1. The TypeScript file with the component class; 2. Template; 3. Tests; and 4. Styles. So Ctrl-Cmd-Up / Ctrl+Alt+Home and then 1 will take you to the TypeScript component file.
In the TypeScript file, the Related Symbol popup will also list all the symbols that were imported into this file (hence, the name).
Development with React Improved completion for propsWebStorm now provides better code completion for React props merged using with the spread operator.
React Hooks have recently landed in the stable React version. One of the features that was immediately suggested to us was a refactoring for creating a custom React hook – and the Extract Method refactoring is perfect for this task!
We’ve implemented a couple of improvements, namely, allowed Extract Method to work with local functions and use destructuring for the return values.
So here’s how it works:
We have good news for all our Vue and TypeScript fans! WebStorm now uses the TypeScript language service together with its own TypeScript support, for any TypeScript code in .vue files. This means that you’ll now get more accurate type checking and type info, and you will be able to use the quick-fixes provided by the service. All the TypeScript errors in the current file will be listed in the TypeScript tool window at the bottom of the IDE window.
Node.js and npm Completion for npm scriptsWhen adding new scripts to the package.json file, WebStorm now provides suggestions for available commands. You can see a list of commands provided by the installed packages (from the node_modules/.bin folder):
After typing node
, the IDE will offer completion for folders and files that you can run. And after typing npm run
, you’ll see a list of tasks defined in the current file. Cmd/Ctrl-click on the task name will take you to its definition in the same file:
Another improvement related to the package.json file is a new tooltip that shows what range of versions could be installed when running npm install
or yarn install.
Press Cmd/Ctrl and hover over the version to see the information.
If you’re using Docker for testing your Node.js application, you can now use the configuration described in the Docker Compose file to easily run and debug the app from the IDE.
Please note that the described steps only work if you use node
or npm
in the command field of your Docker Compose file to run your app, e.g. command: node ./src/app.js
In the dialog that opens, select Docker Compose. If you haven’t used Docker in WebStorm before, you need to configure the Docker connection – click the
New…icon and select the connection option according to your OS as described in this
doc.
Now you can use this configuration to run or debug your app – the IDE will deploy the app to the Docker container using the docker-compose up command and, if running in the debug mode, pass the debug flag to Node.js and attach to the debug process.
If you don’t use Docker Compose or want to have a closer look at the Docker support for Node.js in WebStorm, check out the blog post “Quick tour of WebStorm and Docker”.
Simple Node.js project templateTo make it easier to start a simple Node.js app, we’ve added a new template called “Node.js”. You can choose this when you click Create New Project on the IDE Welcome screen.
This project generator runs the npm init
command that adds a package.json file and enables code completion for Node.js core APIs.
We have completely redesigned our integration with ESLint and TSLint to improve the way it works in monorepos (including projects managed by lerna and yarn workspaces) and projects with multiple linter configurations.
Before, WebStorm could run only one linter’s service per project. So if you had different linter versions with different configs in different parts of your project, still only one ESLint or TSLint process would run, resulting in some configs being ignored or some plugins working incorrectly.
Now, the IDE will start a separate process for every package.json that lists a linter (ESLint or TSLint) as a dependency, and it will process everything below it as if it were invoked with .bin/eslint **/*.js
(in case of ESLint).
This behavior is on by default for all new projects.
To switch to the new mode in the existing projects, go to Preferences/Settings | Languages and Frameworks | JavaScript | Code Quality Tools | ESLint or TypeScript | TSLint and select Automatic ESLint/TSLint configuration.
If you need to run a globally installed linter, pass additional options to it, or add a custom rules directory, you configure all these additional options if you select Manual configuration.
Support for TSLint as TypeScript pluginIf you’re using TypeScript in your .vue files and want to lint the code inside the script tag using TSLint, you can now use the typescript-tslint-plugin plugin for TypeScript. With this, TSLint checks become part of the TypeScript language service, and you will be able to see all the TSLint errors next to the TypeScript errors in the IDE tool window and, of course, in the editor.
You can fix and suppress TSLint errors and warnings using the intentions available on Alt-Enter.
To start using it, first, install the plugin with npm install typescript-tslint-plugin
and then enable it in the project’s tsconfig.json file:
{ "compilerOptions": { "plugins": [ { "name": "typescript-tslint-plugin" } ] } }
By the way, you may also want to use typescript-tslint-plugin if you have enabled the TSLint rules that require type information (like “deprecation” or “prefer-readonly”) – that way these types of errors will be highlighted in the editor as you type.
Debugging New debugger consoleWe have completely re-implemented the debugger console in the JavaScript and Node.js debug tool windows. This console shows you stack traces and everything that was logged in your code (e.g. using console.log()
). You can use this interactive console to evaluate arbitrary JavaScript statements – just start typing them in the input at the bottom of the console panel.
Here are some of the new features and improvements that we’ve implemented. You can debug this demo file in WebStorm 2019.1 EAP to see all these features in action.
The objects are now nicely displayed using a tree view.
console.warn()
), errors (console.error()
), and info (console.info()
) messages now have different icons and background colors to make them easier to notice.You can filter out any type of log messages using the filter icon on the left side of the console panel.
You can now see the log messages styled using CSS and the
%c
marker.
console.group()
and console.groupEnd()
are now displayed as a tree.If you’re using
console.groupCollapsed()
, the output will be collapsed by default.
If you’ve run tests in WebStorm and some of them have failed, now you can see where the problem has occurred – right in the editor. The IDE will use the information from the stack trace and highlight the failed code. On hover, you’ll see the error message from the test runner. And you can immediately start debugging the test.
This works with Jest, Karma, Mocha, and Protractor.
Testing with Cucumber and TypeScriptIf you’re using Cucumber and TypeScript, you will notice some major improvements in WebStorm 2019.1. First, you can now jump from the steps in the .feature file to their definitions in the TypeScript file. Second, you can generate missing definitions using a quick fix (Alt-Enter on the highlighted step).
Please note that at the moment WebStorm only supports step definitions that are written using regular expressions.
To run such tests in the IDE, use a Cucumber.js run/debug configuration and add Compile TypeScript as a Before launch task (if you don’t have any other build step set up for compiling TS): this way, the IDE will run a TypeScript compiler with the selected tsconfig.json file before running Cucumber.
If you want to debug these tests, don’t forget to enable source maps ("sourceMap": true
) in your tsconfig.json file.
You can now use the new colorful UI themes in WebStorm that are available as plugins. Choose between the Dark Purple, Gray, and Cyan Light themes, or create your own.
Recent LocationsWebStorm 2019.1 adds a new way to navigate around the project – the Recent Locations popup. It can be opened with Cmd-Shift-E on macOS or Ctrl+Shift+E on Windows and Linux.
It shows you the list of files and lines of code in them that you have recently opened in the editor (when navigating to the definition or usage, using the Go to action, or simply opening the file from the project view).
When the popup is open, start typing to filter the results and find the code you need (the search works for the code and file names). Of course, you can also just use the up and down arrows to select the required location.
If you want to only see the code fragments that have been changed, select the “Show only changed” checkbox.
Save project as a templateDo you have a project that you want to use as a template for other new projects? Now with the new action Save as a Template in the Tools menu you can create custom project templates.
To use the template, click Create New Project on the IDE Welcome Screen and simply select the template from the list.
All project settings in the .idea folder will be saved in the template. So if you want your new project to have some predefined run/debug configurations, check the Share checkbox in the configuration before you save the template.
You can now enable soft-wraps in the editor for specific file types. To do that, open Preferences/Settings | Editor | General and specify the file types in the “Soft-wrap files” field:
With the soft wrapping on, the IDE will display long lines wrapped in the editor without actually adding line breaks.
Drag to add multiple cursorsIf you want to add cursors at the same position on multiple lines, you now need to press Alt-Shift (instead of Alt), then press the mouse key and drag the cursor up or down. You can change the key combination in Preferences / Settings | Keymap: search for the Add rectangular selection action.
Version Control Cherry-pick a file from a commit from the VCS logNow you can cherry-pick select files from a commit, right from the context menu in the VCS log:
Incoming and outgoing commitsThe IDE now indicates if the incoming and outgoing commits are available for individual branches in the Branches popup. To see this info, open Preferences/Settings | Version Control | Git and enable the new option, Mark Branches that have incoming/outgoing commits in the Branches popup.
File status for ignored files and foldersIn the Project view, the ignored files and folders now use olive-green so that it’s easier to distinguish them from other files. You can modify the color in Preferences/Settings | Version Control | File Status Color.
Your WebStorm Team
Subscribe to WebStorm Blog updatesThanks, we've got you!
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.3