Visual Studio Code

From Bitpost wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Install

  • Add the repo
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
  • Update as usual
sudo apt-get update
sudo apt-get install code # released monthly
# or code-insiders (released daily)
# use [apt search visualst]

Settings sync

Sync my settings on any new machine.

(bottom-left gear) > Turn on settings sync

Use my github account.

Extensions

  • Debug > Install additional debuggers... > C++
  • C/C++
  • CMake, CMake Tools (one for project mgmt, one for cmake file editing)
  • eslint
  • Bookmarks; go F2, set ctrl-F2
  • Numbered bookmarks; go c-1, set c-a-sh-1
  • vscode-icons
  • change-case
  • overtype
  • sequential-number
  • MongoDB for VS Code
  • REST client

Run API queries out of *.http files. If you get web services errors, restart code (all instances).

  • Docker, Dev Containers

You can connect to a remote docker host with some settings foo.

  • Remote - SSH, SSH Tooling

nah/old...

  • x GitLens
  • x sort-imports (for ES6)
  • Debugger for Firefox
  • Debugger for Chrome

Config and Key Bindings

Go to File > Preferences > Settings for a shitton of settings. Search for the name you want.

Turn OFF these very-slow automatic checks in your launch.json file:

   "npm.autoDetect": "off",
   "gulp.autoDetect": "off",
   "grunt.autoDetect": "off",
   "jake.autoDetect": "off",
   "typescript.tsc.autoDetect": "off",

Turn this shit off, it "reuses tabs" on files you open (unless you double-click to open, or edit the file). Nonsense.

"workbench.editor.enablePreview": false

Use the editor; changes are stored and shared across installs from here:

ls ~/.config/Code/User/
keybindings.json -> ../../../development/config/common/home/m/.config/Code/User/keybindings.json
settings.json -> ../../../development/config/common/home/m/.config/Code/User/settings.json

Debugging

While debugging, you can use the Debug Console to print memory, including the content of strings that are clipped by default in the variables and watch windows.

View > Open View > Debug Console

From there, send gdb a command to print memory – 300 characters of a string in this example:

-exec x/300sb Query.c_str()

Code completion and linting

Code formatting

Auto-format your code, all day long! This literally saves hours of typing, not to mention keeping the code uniform. DO IT.

Prefs > Settings > search > format on save > check the box!

We let vscode use clang-format to format C++ code. You need to install it:

sudo apt install clang-format

Custom rules are defined here:

[workspace-folder]/.clang-format

See the formatting rules for help.

If formatting errors out or does not happen, run [clang-format #filename#] in a command prompt and see if you have errors in your rules file.

NOTE: eslint is the current way to enforce code style in Javascript. See the eslint page for more information.

Some C++ ones:

Standard: Cpp11
BasedOnStyle: LLVM
IndentWidth: 2
ColumnLimit: 0
AccessModifierOffset: -2
NamespaceIndentation: All
BreakBeforeBraces: Custom
BraceWrapping:
 AfterEnum: true
 AfterStruct: true
 AfterClass: true
 SplitEmptyFunction: true
 AfterControlStatement: false
 AfterNamespace: false
 AfterFunction: true
 AfterUnion: true
 AfterExternBlock: false
 BeforeCatch: false
 BeforeElse: false
 SplitEmptyRecord: true
 SplitEmptyNamespace: true

Intellisense

Use CMake to generate json that includes the project headers, then import that into vscode settings, for a DRY way to set up header paths.

  • Add this to CMakeList.txt to generate compile_commands.json:
# MDM This creates compile_commands.json, which can be imported by vscode to set include paths from here, w00t DRY
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  • Edit your project settings (eg...)
/home/m/development/thedigitalage/AbetterTrader/server/.vscode/c_cpp_properties.json
  • Add a compileCommands directive:
{
   "configurations": [
       {
           "name": "Linux",
           "includePath": [
               "${workspaceFolder}/**"
           ],
           "defines": [],
           "compilerPath": "/usr/bin/clang",
           "cStandard": "c11",
           "cppStandard": "c++17",
           "intelliSenseMode": "clang-x64",
           "configurationProvider": "vector-of-bool.cmake-tools",
           "compileCommands": "${workspaceFolder}/cmake-debug/compile_commands.json"
       }
   ],
   "version": 4
}