The Journey of Visual Studio Code
Erich Gamma
Envision new paradigms for online
developer tooling that will be as successful
as the IDE has been for the desktop
2012
2011
Eat your own dogfood
h"p
2011
2012
2012
2013
Meanwhile Microso; Changes
Run on Windows Run everywhere
Edit in Visual Studio Use your favorite editor
Black box compilers Open Language Service APIs
Proprietary Open Source
Hacker News: Microso; “Hit List”
h@ps://hn.algolia.com/?query=MicrosoH
Pivot
or
Persevere?
Visual Studio
Code
A tool that combines the simplicity of a code
editor with what developers need for the core
code-build-debug-commit cycle
editor IDE
lightweight/fast project systems
keyboard centered code understanding
file/folders debug
many languages integrated build
many workflows File>New, wizards
designers
lightweight/fast ALM integraVon
file/folders with project context plaWorm tools
many languages ...
keyboard centered
code understanding
debug
task running
Inside Visual Studio Code – OSS in AcGon
Electron, Node
TypeScript
Monaco Editor
It’s fun
to program in
JavaScript
Compensating patterns for classes, modules and namespaces.
Refactoring JavaScript code is difficult!
Code becomes read only
Defining and documentation of APIs is difficult.
Type information in comments are not checked
TypeScript
OpVonal staVc types – be@er tooling: IntelliSense, Refactoring
Be@er APIs docs
More safety
delete this.markers[range.statMarkerId]; // startMarkerId
Use features from the future (ES6, ES7) today
Growing the Code
VS Code Preview – April 2015
Extensions
Eclipse
Everything is…
... a plugin with contribuVons
… implemented in Java
… runs in a single shell/window
Eclipse Plug-ins
Extension isolaGon
Controlled
extensibility
JavaScript or
Main Extension TypeScript
Extension
Process Extension
Host
Host
IPC RP Host Reuse node modules
C
Renderer process Node
API: vscode.d.ts
Extension descripVon:
package.json
Language API
Language API – Providers
Editor Provider
registerHoverProvider() provideHover()
… …
DEMO: Extension Development
Extensions, Extensions, Extensions
1000+ extensions in the marketplace
Language/Debug services
OmniSharp Server
PowerShell
Go CLI Tools
Jedi
Extension
RP Host vs
C
Renderer process Node racer
javac
JSON TS/JS Server
(*) code language protocol
Tool Protocols
Request Response
definiFon Returns the file locaVon of the symbol at the given file locaVon
references Returns the file locaVons that reference the symbol at the given file locaVon
compleFons Returns possible compleVons at a given file locaVon
symbolDetails Return a type informaVon and documentaVon for the symbol at a given file
locaVon
format Returns edit instrucVons to format a file
outline Returns list of navigaVon targets for a parVcular file
Request
launch Launch a debugee
open NoVfies the server that the editor host has
setBreakpoints opened
SetsamulVple
file break points
close NoVfies the server that a previously opened file is now closed
change NoVfies the server that a range of a filenext,
conFnue, has changed
ExecuVon control
stepIn, stepOut
stackTrace Returns the stack trace from the current execuVon state
variables Returns the children of all variables given a variable reference
Event
stopped The execuVon of the debugee has stopped
exited The debugee has terminated
DEMO: Sublime
November 2015: VS Code goes OSS
Transparency
Development
Community
Team
Feedback
OSS - Transparency
Feedback Channels
QuesVons: Stack Overflow
Issues/Pull Requests: GitHub
Feature VoVng: User Voice
SenVment: Twi"er
MSFT FTEs use to same channels
Feedback Example - Accessibility
CollaboraVon with GitHub on
Electron accessibility
h@ps://github.com/MicrosoH/vscode/issues/2108
More Feedback: Development Channels
Stability Daily updates
VS Code OSS vs. VS Code Distro
VS Code OSS VS Code Distro
Everybody can build from github repo Builds on VS Code
Not branded MS branded (logo, telemetry, gallery)
MIT License MS Standard License
Supported by Community Supported by MS
Easy for Developers
VS Code consumes 142 OSS
components, 90+% are node
modules
Variety of licenses, someVmes none
We track, review each license, C/R
statements for every dependency
Needs tooling to generate and
maintain third party noVces
Easy for Contributors: CLA BOT
Summary
Run on Windows Run everywhere
Edit in Visual Studio Use your favorite editor
Black box compilers Open Language Service APIs
Proprietary Open Source
Thank you!
@erichgamma
@code