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
500
0
Share
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
240
Learning Unsung Gotchas of Go - Rashmi Nagpal
gopherconrussia
1
290
Прозрачный gRPC-proxy один-ко-многим - Андрей Смирнов
gopherconrussia
0
160
Из Python в Go и обратно - Андрей Минкин
gopherconrussia
0
170
Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS - Иван Осадчий
gopherconrussia
0
200
Пакет embed: распаковка знаний - Илья Данилкин
gopherconrussia
0
260
За пару мгновений до main() - Олег Ковалев
gopherconrussia
0
150
Тестирование в Go c Ginkgo и Gomega - Александр Егурнов
gopherconrussia
0
140
Building an Autoscaling HTTP Proxy for Kubernetes - Aaron Schlesinger
gopherconrussia
0
140
Other Decks in Programming
See All in Programming
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
220
Migration to Signals, Signal Forms, Resource API, and NgRx Signal Store @Angular Days 03/2026 Munich
manfredsteyer
PRO
0
230
実践ハーネスエンジニアリング #MOSHTech
kajitack
7
5.6k
Smarter Angular mit Transformers.js & Prompt API
christianliebel
PRO
1
120
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
320
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
520
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
370
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
220
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
150
RSAが破られる前に知っておきたい 耐量子計算機暗号(PQC)入門 / Intro to PQC: Preparing for the Post-RSA Era
mackey0225
3
120
Go_College_最終発表資料__外部公開用_.pdf
xe_pc23
0
120
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
8
4.5k
Featured
See All Featured
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
160
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
190
How STYLIGHT went responsive
nonsquared
100
6k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
85
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
ラッコキーワード サービス紹介資料
rakko
1
2.9M
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
500
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
470
The agentic SEO stack - context over prompts
schlessera
0
730
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
330
HDC tutorial
michielstock
1
600
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
240
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