How do I use WebStorm for Chrome Extension Development?
Solution 1:
First Time Setup
Open the
Settings
dialog (File
>Settings
)Click
Languages & Frameworks
>Javascript
>Libraries
Click
Download
Make sure
TypeScript community stubs
is selectedSelect
chrome
from the list (you can find it quickly by just typingchrome
)Click
Download and Install
Click
OK
to close the Settings dialog.
Steps 2-6 illustrated below:
In Subsequent Projects
In any subsequent project, you just:
Open the
Settings
dialog again (File
>Settings
)Click
Languages & Frameworks
>Javascript
>Libraries
againCheck
chrome-DefinitelyTyped
Click
OK
to close the dialog.
Steps 2-4 shown below:
Solution 2:
UPDATE 2:
It's now supported out of the box, see the complete answer below.
UPDATE:
There is a more complete stub file that can be added as a library to get code completion. It's a part of the Closure Compiler project. Download chrome_extensions.js.
See also the feature request for WebStorm to add this library automatically from the IDE.
You need to get the JavaScript library for the Chrome API somewhere, or use a stub to get basic completion.
Library or a stub can be configured in WebStorm.
I found the JSON files with the Extension API. One can write a script that will build JS stubs from these JSON files, the stubs can look like the basic version linked on GitHub above, but with the automatic generation they will contain almost complete API and JSDoc comments so that documentation like here can be viewed directly in the IDE.
JSON => JavaScript object stubs mapping is pretty straightforward in this case and writing this kind of converter should not take more than a day (or several hours for the skilled coder).
If someone goes ahead and implements it, please post the link to the results here.
Solution 3:
WebStorm should one day accept json definitions directly to enable autocomplete for the functions defined. Meanwhile, you can use the program at https://github.com/QuickrWorld/jsgen to convert the json files to js to enable auto-complete for the chrome extension APIs.