blob: 589a3ceefb238cee80872a1960fe2ce393e3adbf [file] [log] [blame] [view]
ljustene262c842017-04-12 08:29:041# Visual Studio Code Dev
2
3Visual Studio Code is a free, lightweight and powerful code editor for Windows,
4Mac and Linux, based on Electron/Chromium. It has built-in support for
5JavaScript, TypeScript and Node.js and a rich extension ecosystem that adds
6intellisense, debugging, syntax highlighting etc. for many languages (C++,
Michael Thiessenf643e29f2020-03-24 20:23:017Python, Go, Java). It works without too much setup. Get started
ljustene262c842017-04-12 08:29:048[here](https://code.visualstudio.com/docs).
9
10It is NOT a full-fledged IDE like Visual Studio. The two are completely
11separate products. The only commonality with Visual Studio is that both are
12from Microsoft.
13
14Here's what works well:
15
16* Editing code works well especially when you get used to the [keyboard
17 shortcuts](https://code.visualstudio.com/docs/customization/keybindings).
18 VS Code is very responsive and can handle even big code bases like Chromium.
19* Git integration is a blast. Built-in side-by-side view, local commit and
20 even extensions for
21 [history](https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory)
22 and
23 [blame view](https://marketplace.visualstudio.com/items?itemName=ryu1kn.annotator).
24* [Debugging](https://code.visualstudio.com/Docs/editor/debugging) works
25 well, even though startup times can be fairly high (~40 seconds with
26 gdb on Linux, much lower on Windows). You can step through code, inspect
27 variables, view call stacks for multiple threads etc.
28* Opening files and searching solution-wide works well now after having
29 problems in earlier versions.
30* Building works well. Build tools are easy to integrate. Warnings and errors
31 are displayed on a separate page and you can click to jump to the
32 corresponding line of code.
Daniel Murphyd9e88fb2020-03-17 19:26:2333* VSCode Remote, which allows you to edit remotely-hosted code, and even run
34 computationally expensive plugins like vscode-clangd on the remote
35 server/workstation (see the [Remote section](#Remote)). Great for working-
James Cook3a415982020-03-25 18:47:3836 from-home. (Googlers: See [go/vscode-remote](http://go/vscode-remote)].)
chaopengba312ce2017-02-12 03:38:2537
chaopengca285112017-03-02 15:39:0438[TOC]
39
ljustene262c842017-04-12 08:29:0440## Updating This Page
chaopengba312ce2017-02-12 03:38:2541
ljustene262c842017-04-12 08:29:0442Please keep this doc up-to-date. VS Code is still in active development and
43subject to changes. This doc is checked into the Chromium git repo, so if you
44make changes, read the [documentation
James Cook9d7e2192017-06-19 19:59:0945guidelines](https://chromium.googlesource.com/chromium/src/+/master/docs/documentation_guidelines.md)
ljustene262c842017-04-12 08:29:0446and [submit a change list](https://www.chromium.org/developers/contributing-code).
chaopengba312ce2017-02-12 03:38:2547
ljustene262c842017-04-12 08:29:0448All file paths and commands have been tested on Linux. Windows and Mac might
49require a slightly different setup (e.g. `Ctrl` -> `Cmd`). Please update this
50page accordingly.
chaopengba312ce2017-02-12 03:38:2551
ljustene262c842017-04-12 08:29:0452## Setup
chaopengba312ce2017-02-12 03:38:2553
ljustene262c842017-04-12 08:29:0454### Installation
chaopengba312ce2017-02-12 03:38:2555
ljustene262c842017-04-12 08:29:0456Follow the steps on https://code.visualstudio.com/docs/setup/setup-overview. To
57run it on Linux, just navigate to `chromium/src` folder and type `code .` in a
58terminal. The argument to `code` is the base directory of the workspace. VS
59Code does not require project or solution files. However, it does store
60workspace settings in a `.vscode` folder in your base directory.
chaopengba312ce2017-02-12 03:38:2561
Mounir Lamouri1679feab2019-01-25 19:30:0362### Fixes for Known Issues
63
64#### Git on Windows
Mounir Lamouri8202f362019-01-14 11:48:2665
66If you only have the `depot_tools` Git installed on your machine, even though it
67is in your PATH, VS Code will ignore it as it seems to be looking for `git.exe`.
68You will have to add the following to your settings in order for the Git
69integration to work:
70
Mounir Lamouri1679feab2019-01-25 19:30:0371```json
Mounir Lamouri8202f362019-01-14 11:48:2672{
73 "git.path": "C:\\src\\depot_tools\\git.bat"
74}
75```
76
Mounir Lamouri1679feab2019-01-25 19:30:0377#### Rendering of underscore on Linux
78
79As mentioned in [#35901](https://github.com/Microsoft/vscode/issues/35901), VS
80Code will not show underscore (`_`) properly on Linux by default. You can work
81around this issue by forcing another font such as the default `monospace` or
82changing the font size in your settings:
83
84```json
85{
86 // If you want to use the default "monospace" font:
87 //"terminal.integrated.fontFamily": "monospace"
88 // If you would rather just increase the size of the font:
89 //"terminal.integrated.fontSize": 15
90 // If you would rather decrease the size of the font:
Mounir Lamouria1e5a9e2019-07-30 20:06:0091 //"terminal.integrated.fontSize": 13
Mounir Lamouri1679feab2019-01-25 19:30:0392}
93```
94
ljustene262c842017-04-12 08:29:0495### Useful Extensions
chaopengba312ce2017-02-12 03:38:2596
ljustene262c842017-04-12 08:29:0497Up to now, you have a basic version of VS Code without much language support.
98Next, we will install some useful extensions. Jump to the extensions window
99(`Ctrl+Shift+X`) and install these extensions, you will most likely use them
100every day:
chaopengba312ce2017-02-12 03:38:25101
ljustene262c842017-04-12 08:29:04102* ***C/C++*** -
James Cook9d7e2192017-06-19 19:59:09103 Code formatting, debugging, Intellisense.
ljustene262c842017-04-12 08:29:04104* ***Python*** -
105 Linting, intellisense, code formatting, refactoring, debugging, snippets.
James Cook9f7c73d2017-06-20 15:06:19106* ***Toggle Header/Source*** -
107 Toggles between .cc and .h with `F4`. The C/C++ extension supports this as
108 well through `Alt+O` but sometimes chooses the wrong file when there are
109 multiple files in the workspace that have the same name.
ljustene262c842017-04-12 08:29:04110* ***Protobuf support*** -
111 Syntax highlighting for .proto files.
112* ***you-complete-me*** -
113 YouCompleteMe code completion for VS Code. It works fairly well in Chromium.
114* ***Rewrap*** -
115 Wrap lines at 80 characters with `Alt+Q`.
Daniel Murphyd9e88fb2020-03-17 19:26:23116* ***Remote*** -
117 Remotely connect to your workstation through SSH using your laptop. See the
118 [Remote](#Remote) section for more information about how to set this up.
chaopengba312ce2017-02-12 03:38:25119
ljustene262c842017-04-12 08:29:04120To install You-Complete-Me, enter these commands in a terminal:
chaopengba312ce2017-02-12 03:38:25121
122```
123$ git clone https://github.com/Valloric/ycmd.git ~/.ycmd
124$ cd ~/.ycmd
sangwoo.ko5fe74c732017-09-01 14:44:56125$ git submodule update --init --recursive
chaopengba312ce2017-02-12 03:38:25126$ ./build.py --clang-completer
127```
James Cookcb868402017-06-23 16:04:29128If it fails with "Your C++ compiler does NOT fully support C++11." but you know
129you have a good compiler, hack cpp/CMakeLists.txt to set CPP11_AVAILABLE true.
chaopengba312ce2017-02-12 03:38:25130
Victor Costan1a504072018-02-20 20:10:25131On Mac, replace the last command above with the following.
132
133```
134$ ./build.py --clang-completer --system-libclang
135```
136
ljustene262c842017-04-12 08:29:04137The following extensions might be useful for you as well:
chaopengba312ce2017-02-12 03:38:25138
ljustene262c842017-04-12 08:29:04139* ***Annotator*** -
140 Git blame view.
141* ***Git History (git log)*** -
142 Git history view.
143* ***chromium-codesearch*** -
144 Code search (CS) integration, see [Chromium Code
145 Search](https://cs.chromium.org/), in particular *open current line in CS*,
146 *show references* and *go to definition*. Very useful for existing code. By
147 design, won't work for code not checked in yet. Overrides default C/C++
148 functionality. Had some issues last time I tried (extensions stopped
149 working), so use with care.
150* ***change-case*** -
151 Quickly change the case of the current selection or current word.
152* ***Instant Markdown*** -
153 Instant markdown (.md) preview in your browser as you type. This document
154 was written with this extension!
155* ***Clang-Format*** -
156 Format your code using clang-format. The C/C++ extension already supports
157 format-on-save (see `C_Cpp.clang_format_formatOnSave` setting). This
158 extension adds the ability to format a document or the current selection on
159 demand.
Katie D36d0cd7b2019-04-03 22:19:53160* ***vscode-clangd*** -
161 If you do not plan to use VSCode for debugging, vscode-clangd is a great
162 alternative to C/C++ IntelliSense. It knows about how to compile Chromium,
163 enabling it to provide smarter autocomplete than C/C++ IntelliSense as well
Haojian Wu052c8192019-04-08 15:22:30164 as allowing you to jump from functions to their definitions. See
165 [clangd.md](clangd.md) for details.
Katie D36d0cd7b2019-04-03 22:19:53166
Haojian Wu052c8192019-04-08 15:22:30167 If you need to debug, disable the vscode-clangd extension, enable C/C++
Katie D36d0cd7b2019-04-03 22:19:53168 Intellisense, and restart VSCode.
169
chaopengba312ce2017-02-12 03:38:25170
ljustene262c842017-04-12 08:29:04171Also be sure to take a look at the
172[VS Code marketplace](https://marketplace.visualstudio.com/VSCode) to check out other
173useful extensions.
chaopengba312ce2017-02-12 03:38:25174
ljustene262c842017-04-12 08:29:04175### Color Scheme
176Press `Ctrl+Shift+P, color, Enter` to pick a color scheme for the editor. There
177are also tons of [color schemes available for download on the
178marketplace](https://marketplace.visualstudio.com/search?target=VSCode&category=Themes&sortBy=Downloads).
chaopengba312ce2017-02-12 03:38:25179
ljustene262c842017-04-12 08:29:04180### Usage Tips
181* `Ctrl+P` opens a search box to find and open a file.
182* `F1` or `Ctrl+Shift+P` opens a search box to find a command (e.g. Tasks: Run
183 Task).
184* `Ctrl+K, Ctrl+S` opens the key bindings editor.
185* ``Ctrl+` `` toggles the built-in terminal.
186* `Ctrl+Shift+M` toggles the problems view (linter warnings, compile errors
187 and warnings). You'll swicth a lot between terminal and problem view during
188 compilation.
189* `Alt+O` switches between the source/header file.
190* `Ctrl+G` jumps to a line.
191* `F12` jumps to the definition of the symbol at the cursor (also available on
192 right-click context menu).
193* `Shift+F12` or `F1, CodeSearchReferences, Return` shows all references of
194 the symbol at the cursor.
195* `F1, CodeSearchOpen, Return` opens the current file in Code Search.
196* `Ctrl+D` selects the word at the cursor. Pressing it multiple times
197 multi-selects the next occurrences, so typing in one types in all of them,
198 and `Ctrl+U` deselects the last occurrence.
199* `Ctrl+K, Z` enters Zen Mode, a fullscreen editing mode with nothing but the
200 current editor visible.
201* `Ctrl+X` without anything selected cuts the current line. `Ctrl+V` pastes
202 the line.
203
Michael Thiessenf643e29f2020-03-24 20:23:01204### Java/Android Support
205To get Java support in VS Code, you'll need to install the
206'Java Extension Pack' extension, but you'll want to immediately uninstall or
207disable the Maven for Java extension so it stops nagging you as we won't need
208it.
209
210#### Setting up code completion/reference finding/etc.
211You'll need to locate the .classpath file redhat generates for you. Its
212location will depend on whether you're doing local or remote development.
213Local path on linux will look something like:
214
215`~/.vscode/data/User/workspaceStorage/<hash>/redhat.java/jdt_ws/<project>/.classpath`
216
217If doing remote development, the file will be under `~/.vscode-server/` on your
218remote machine.
219
220You'll need to replace the contents of that file with the contents of
221<chromium-root>/.classpath (generated by gclient runhooks), and then replace
222some paths as vscode interprets some paths differently from eclipse.
223* Replace: `kind="src" path="` with `kind="src" path="_/`
224* Replace: `kind="lib" path="../src` with `kind="lib" path="_`
225* Remove all nested paths (or exclude them from their parents). At time of
226writing:
227 * `third_party/android_protobuf/src/java/src/main/java`
228 * `third_party/junit/src/src/main/java`
229
230Then restart vscode, open a Java file, and wait for a bit.
231
ljustene262c842017-04-12 08:29:04232## Setup For Chromium
233
234VS Code is configured via JSON files. This paragraph contains JSON configuration
235files that are useful for Chromium development, in particular. See [VS Code
236documentation](https://code.visualstudio.com/docs/customization/overview) for an
237introduction to VS Code customization.
238
239### Workspace Settings
Darwin Huang985c38a2018-11-21 19:24:13240Open the file [//tools/vscode/settings.json5](/tools/vscode/settings.json5),
241and check out the default settings there. Feel free to commit added or removed
242settings to enable better team development, or change settings locally to suit
243personal preference. Remember to replace `<full_path_to_your_home>`! To use
244these settings wholesale, enter the following commands into your terminal while
245at the src directory:
ljustene262c842017-04-12 08:29:04246```
Darwin Huang985c38a2018-11-21 19:24:13247$ mkdir .vscode/
248$ cp tools/vscode/settings.json5 .vscode/settings.json
ljustene262c842017-04-12 08:29:04249```
250
251### Tasks
252Next, we'll tell VS Code how to compile our code and how to read warnings and
Darwin Huang985c38a2018-11-21 19:24:13253errors from the build output. Open the file
254[//tools/vscode/tasks.json5](/tools/vscode/tasks.json5). This will provide 5
255tasks to do basic things. You might have to adjust the commands to your
256situation and needs. To use these settings wholesale, enter the following
257command into your terminal:
ljustene262c842017-04-12 08:29:04258```
Darwin Huang985c38a2018-11-21 19:24:13259$ cp tools/vscode/tasks.json5 .vscode/tasks.json
ljustene262c842017-04-12 08:29:04260```
261
262### Launch Commands
263Launch commands are the equivalent of `F5` in Visual Studio: They launch some
264program or a debugger. Optionally, they can run some task defined in
265`tasks.json`. Launch commands can be run from the debug view (`Ctrl+Shift+D`).
Darwin Huang985c38a2018-11-21 19:24:13266Open the file at [//tools/vscode/launch.json5](/tools/vscode/launch.json5) and
267adjust the example launch commands to your situation and needs. To use these
268settings wholesale, enter the following command into your terminal:
ljustene262c842017-04-12 08:29:04269```
Darwin Huang985c38a2018-11-21 19:24:13270$ cp tools/vscode/launch.json5 .vscode/launch.json
ljustene262c842017-04-12 08:29:04271```
272
273### Key Bindings
274To edit key bindings, press `Ctrl+K, Ctrl+S`. You'll see the defaults on the
275left and your overrides on the right stored in the file `keybindings.json`. To
276change a key binding, copy the corresponding key binding to the right. It's
277fairly self-explanatory.
278
279You can bind any command to a key, even commands specified by extensions like
280`CodeSearchOpen`. For instance, to bind `CodeSearchOpen` to `F2` to , simply add
281`{ "key": "F2", "command": "cs.open" },`.
282Note that the command title `CodeSearchOpen` won't work. You have to get the
283actual command name from the [package.json
284file](https://github.com/chaopeng/vscode-chromium-codesearch/blob/master/package.json)
285of the extension.
286
287If you are used to other editors, you can also install your favorite keymap.
288For instance, to install eclipse keymaps, install the
289`vscode-eclipse-keybindings` extension. More keymaps can be found
290[in the marketplace](https://marketplace.visualstudio.com/search?target=vscode&category=Keymaps).
291
Darwin Huang985c38a2018-11-21 19:24:13292Some key bindings that are likely to be useful for you are available at
293[//tools/vscode/keybindings.json5](/tools/vscode/keybindings.json5). Please
294take a look and adjust them to your situation and needs. To use these settings
295wholesale, enter the following command into your terminal:
ljustene262c842017-04-12 08:29:04296```
Darwin Huang985c38a2018-11-21 19:24:13297$ cp tools/vscode/keybindings.json5 .vscode/keybindings.json
ljustene262c842017-04-12 08:29:04298```
299
Daniel Murphyd9e88fb2020-03-17 19:26:23300### Remote
301VSCode now has a
302[Remote](https://code.visualstudio.com/docs/remote/remote-overview) framework
303that allows you to use VSCode on your laptop while your code is hosted
304elsewhere. This really shines when used in conjunction with the vscode-clangd plugin,
305which allows clangd to run remotely as well.
306
307To get this to run, install the Remote pack extension, and then make sure your
308ssh config file has your remote connection:
309
310`~/.ssh/config`:
311```
312Host my-connection
313 HostName my-remote-host.corp.company.com
314```
315
316VSCode will then list this connection in the 'Remote Explorer' section on the
317left. To launch VSCode with this connection, click on the '+window' icon next
318to the listed hostname. It has you choose a folder - use the 'src' folder root.
319This will open a new VSCode window in 'Remote' mode. ***Now you can install
320extensions specifically for your remote connection, like vscode-clangd, etc.***
321
322#### Windows & SSH
323This currently is difficult on Windows because VSCode remote tools assumes
324'sshd' is installed, which isn't the case on Windows. If someone figures out
325how to get vscode remote working on windows with ssh please update this
326document :)
327
Dan Harringtonb06ce2f2019-04-09 15:35:29328### Snippets
329There are some useful snippets provided in
330[//tools/vscode/cpp.json5](/tools/vscode/cpp.json5).
331
Mounir Lamouri3b9e31d2019-07-30 20:14:41332You can either install them in your user profile (path may vary depending on the
333platform):
334```
335$ cp tools/vscode/cpp.json5 ~/.config/Code/User/snippets/cpp.json
336```
337
338Or install them as project snippets after installing the [Project
339Snippets](https://marketplace.visualstudio.com/items?itemName=rebornix.project-snippets)
340extension:
341```
342$ cp tools/vscode/cpp.json5 .vscode/snippets/cpp.json
343```
344
ljustene262c842017-04-12 08:29:04345### Tips
346
347#### The `out` folder
348Automatically generated code is put into a subfolder of out/, which means that
349these files are ignored by VS Code (see files.exclude above) and cannot be
Christian Dullweberd67c9b32018-04-03 08:30:42350opened e.g. from quick-open (`Ctrl+P`).
351As of version 1.21, VS Code does not support negated glob commands, but you can
352define a set of exclude pattern to include only out/Debug/gen:
Christian Dullweberbabb96e12018-05-28 14:00:14353```
Christian Dullweberd67c9b32018-04-03 08:30:42354"files.exclude": {
355 // Ignore build output folders. Except out/Debug/gen/
356 "out/[^D]*/": true,
357 "out/Debug/[^g]*": true,
358 "out/Debug/g[^e]*": true,
359 "out_*/**": true,
360},
Christian Dullweberbabb96e12018-05-28 14:00:14361```
Christian Dullweberd67c9b32018-04-03 08:30:42362
363Once it does, you can use
ljustene262c842017-04-12 08:29:04364```
365"!out/Debug/gen/**": true
366```
367in files.exclude instead of the symlink.
368
369#### Using VS Code as git editor
370Add `[core] editor = "code --wait"` to your `~/.gitconfig` file in order to use
371VS Code as editor for git commit messages etc. Note that the editor starts up
372significantly slower than nano or vim. To use VS Code as merge tool, add
373`[merge] tool = code`.
374
375#### Task Names
376Note that we named the tasks `1-build_chrome_debug`, `2-build_chrome_release`
377etc. This allows you to quickly execute tasks by pressing their number:
378Press `Ctrl+P` and enter `task <n>`, where `<n>` is the number of the task. You
379can also create a keyboard shortcut for running a task. `File > Preferences >
380Keyboard Shortcuts` and add `{ "key": "ctrl+r", "command":
381"workbench.action.tasks.runTask", "when": "!inDebugMode" }`. Then it's
382sufficient to press `Ctrl+R` and enter `<n>`.
383
384#### Working on Laptop
385Because autocomplete is provided by the You-Complete-Me extension, consider
386disabling C/C++ autocomplete and indexing to save battery. In addition, you
387might want to disable git status autorefresh as well.
chaopengca285112017-03-02 15:39:04388
389```
chaopeng5c66dfe2017-03-22 13:51:45390"git.autorefresh": false,
chaopengca285112017-03-02 15:39:04391"C_Cpp.autocomplete": "Disabled",
chaopengca285112017-03-02 15:39:04392```
393
Jianpeng Chaob4048b82018-08-28 23:40:01394### Unable to open $File resource is not available when debugging Chromium on Linux
395Chromium [recently changed](https://docs.google.com/document/d/1OX4jY_bOCeNK7PNjVRuBQE9s6BQKS8XRNWGK8FEyh-E/edit?usp=sharing)
396the file path to be relative to the output dir. Check
397`gn args out/$dir --list` if `strip_absolute_paths_from_debug_symbols` is true (which is the default),
398set `cwd` to the output dir. otherwise, set `cwd` to `${workspaceRoot}`.
399
chaopengba312ce2017-02-12 03:38:25400### More
ljustene262c842017-04-12 08:29:04401More tips and tricks can be found
sangwoo.ko5fe74c732017-09-01 14:44:56402[here](https://github.com/Microsoft/vscode-tips-and-tricks/blob/master/README.md).