Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Go, pls stop breaking my editor – Rebecca Stambler
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
GopherCon Russia
April 13, 2019
Programming
530
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go, pls stop breaking my editor – Rebecca Stambler
GopherCon Russia
April 13, 2019
More Decks by GopherCon Russia
See All by GopherCon Russia
Go Profiling from Bottom Up - Felix Geisendörfer
gopherconrussia
0
270
Learning Unsung Gotchas of Go - Rashmi Nagpal
gopherconrussia
1
310
Прозрачный gRPC-proxy один-ко-многим - Андрей Смирнов
gopherconrussia
0
190
Из Python в Go и обратно - Андрей Минкин
gopherconrussia
0
190
Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS - Иван Осадчий
gopherconrussia
0
230
Пакет embed: распаковка знаний - Илья Данилкин
gopherconrussia
0
310
За пару мгновений до main() - Олег Ковалев
gopherconrussia
0
180
Тестирование в Go c Ginkgo и Gomega - Александр Егурнов
gopherconrussia
0
170
Building an Autoscaling HTTP Proxy for Kubernetes - Aaron Schlesinger
gopherconrussia
0
170
Other Decks in Programming
See All in Programming
AmebaブログはKMPから卒業します
kmars0605
0
200
Kotlinの15年とServer-Side Kotlin
n_takehata
1
150
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
320
ジョジョの世界をXRで再現する
mofurune
0
170
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
780
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
140
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
Railsバージョンを4倍にした話
optim
0
440
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
0
1.5k
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
310
Done Done
chrislema
187
17k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Marketing to machines
jonoalderson
1
5.9k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
Unsuck your backbone
ammeep
672
58k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Transcript
Go, pls stop breaking my editor MOSCOW, RUSSIA APRIL 13
2019 REBECCA STAMBLER
None
None
None
Go,
Go, please stop breaking my editor!
Rebecca Stambler Software Engineer, Google @stamblerre
None
None
None
None
None
My editor isn’t working!
My editor isn’t working! • There are many different editors
and many different features
VSCode Goland Vim
My editor isn’t working! • There are many different editors
and many different features • Many features are slow
My editor isn’t working! • There are many different editors
and many different features • Many features are slow • New Go releases break features
None
My editor isn’t working! • There are many different editors
and many different features
User triggers go-to-definition
User triggers go-to-definition VSCode Go extension
User triggers go-to-definition VSCode Go extension godef
User triggers go-to-definition VSCode Go extension godef
User triggers go-to-definition VSCode Go extension godef VSCode opens file
at the specified position
godef gopkgs go-outline go-symbols VSCode guru gorename gomodifytags goplay Go
extension
godef gopkgs go-outline go-symbols VSCode guru gorename gomodifytags goplay impl
gotype-live gocode gogetdoc goimports goreturns goformat golint Go extension
godef gopkgs go-outline go-symbols VSCode guru gorename gomodifytags goplay impl
gotype-live gocode gogetdoc goimports goreturns goformat golint gotests gometalinter staticcheck golangci-lint revive fillstruct dlv godoctor Go extension
godef gopkgs go-outline go-symbols guru gorename gomodifytags goplay impl gotype-live
gocode gogetdoc goimports goreturns goformat golint gotests gometalinter staticcheck golangci-lint revive fillstruct dlv godoctor
My editor isn’t working! • There are many different editors
and many different features • Many features are slow
Command-line tools
Command-line tools • Most of these tools work on 1
request per process
Command-line tools • Most of these tools work on 1
request per process • The tool has to parse your file and type-check your dependencies EVERY TIME!
My editor isn’t working! • There are many different editors
and many different features • Many features are slow • New Go releases break features
An example
An example: gocode • A tool for autocompletion
An example: gocode • A tool for autocompletion • Go
1.10 broke nsf/gocode
An example: gocode • A tool for autocompletion • Go
1.10 broke nsf/gocode • Fixed in mdempsky/gocode
An example: gocode • A tool for autocompletion • Go
1.10 broke nsf/gocode • Fixed in mdempsky/gocode • And then...Go modules
An example: gocode • A tool for autocompletion • Go
1.10 broke nsf/gocode • Fixed in mdempsky/gocode • And then...Go modules • Resulting in stamblerre/gocode
Takeaways • At this rate, we will have a version
of gocode for every version of Go
Takeaways • At this rate, we will have a version
of gocode for every version of Go • Your tools shouldn’t break when you upgrade
Why did gocode keep breaking?
Why did gocode keep breaking? • When Go changes, tools
change
Why did gocode keep breaking? • When Go changes, tools
change • When go build changes, tools change more
Why did gocode keep breaking? • When Go changes, tools
change • When go build changes, tools change more • Tools copy the behavior of the Go compiler
foo.go
foo.go github.com/stamblerre/foo
foo.go github.com/stamblerre/foo a c b dependencies
None
How will we fix your editor?
How will we fix your editor? 1. Stop tools from
breaking every 6 months
How will we fix your editor? 1. Stop tools from
breaking every 6 months 2. Support a set of features for all editors
How will we fix your editor? 1. Stop tools from
breaking every 6 months
gocode
go/packages gocode
go/packages gocode Which build system am I running in?
go/packages gocode Which build system am I running in? go
1.10 go 1.11 gb go 1.12
go/packages • Reduces the maintenance burden
go/packages • Reduces the maintenance burden • When a new
Go release comes out, fix the driver, not the tools
How will we fix your editor? 1. Stop tools from
breaking every 6 months 2. Support a set of features for all editors
Language Server Protocol A standardized protocol for communication between editors
and language servers
godef gopkgs go-outline go-symbols guru gorename gomodifytags goplay impl gotype-live
gocode gogetdoc goimports goreturns goformat golint gotests gometalinter staticcheck golangci-lint revive fillstruct dlv godoctor
Go language server
gopls
gopls • The Go language server
gopls • The Go language server • Owned and maintained
by the Go team and community
gopls • The Go language server • Owned and maintained
by the Go team and community • Currently in alpha
gopls • The Go language server • Owned and maintained
by the Go team and community • Currently in alpha • Pronounced “Go please”
gopls is faster • All features benefit from caching
gopls is faster • All features benefit from caching •
Completion is noticeably faster (less than 1 ms)
gopls is faster • All features benefit from caching •
Completion is noticeably faster (less than 1 ms) • Remains fast with modules
gopls is extensible • Adding new features is easier
gopls is extensible • Adding new features is easier •
Planned:
gopls is extensible • Adding new features is easier •
Planned: ◦ References, rename
gopls is extensible • Adding new features is easier •
Planned: ◦ References, rename ◦ More diagnostics (lint, custom, etc.)
gopls is extensible • Adding new features is easier •
Planned: ◦ References, rename ◦ More diagnostics (lint, custom, etc.) ◦ Quick fix suggestions
gopls is reliable
gopls is reliable • Testing framework
gopls is reliable • Testing framework • Go team ownership
gopls is reliable • Testing framework • Go team ownership
• Coordination with community
Information To install: golang.org/wiki/gopls
Information To install: golang.org/wiki/gopls To contribute: golang.org/wiki/golang-tools
Thank you • Go team members ◦ Ian Cottrell ◦
Peter Weinberger ◦ Michael Matloob • Go community members ◦ Paul Jolly ◦ Ramya Rao ◦ Billie Cleek ◦ And many more!
None
None
None
Image credits • Gopher image by Ashley McNamara • Fire
extinguisher image via strikefirstusa.com • Icons via flaticon.com, made by Freepik