Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go, pls stop breaking my editor – Rebecca Stambler
Search
GopherCon Russia
April 13, 2019
Programming
0
490
Go, pls stop breaking my editor – Rebecca Stambler
GopherCon Russia
April 13, 2019
Tweet
Share
More Decks by GopherCon Russia
See All by GopherCon Russia
Go Profiling from Bottom Up - Felix Geisendörfer
gopherconrussia
0
240
Learning Unsung Gotchas of Go - Rashmi Nagpal
gopherconrussia
1
290
Прозрачный gRPC-proxy один-ко-многим - Андрей Смирнов
gopherconrussia
0
150
Из Python в Go и обратно - Андрей Минкин
gopherconrussia
0
160
Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS - Иван Осадчий
gopherconrussia
0
190
Пакет embed: распаковка знаний - Илья Данилкин
gopherconrussia
0
250
За пару мгновений до main() - Олег Ковалев
gopherconrussia
0
150
Тестирование в Go c Ginkgo и Gomega - Александр Егурнов
gopherconrussia
0
130
Building an Autoscaling HTTP Proxy for Kubernetes - Aaron Schlesinger
gopherconrussia
0
140
Other Decks in Programming
See All in Programming
AI & Enginnering
codelynx
0
120
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
740
CSC307 Lecture 10
javiergs
PRO
1
660
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
6
670
Raku Raku Notion 20260128
hareyakayuruyaka
0
360
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
140
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.4k
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
330
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
250
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
110
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
71
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
67
A better future with KSS
kneath
240
18k
Color Theory Basics | Prateek | Gurzu
gurzu
0
200
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
440
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