six steps from zero to ide · 2018. 5. 20. · scala java rust python vim sublime vs code atom...

47
Six steps from zero to IDE @olafurpg

Upload: others

Post on 17-Sep-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Six steps from zero to IDE@olafurpg

Page 2: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

About me

• Software developer atScala Center

• Maintain scalafmt, scalafix, scalameta

• Mission: enable people tofocus on apps, not tools

Page 3: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Tooling

Page 4: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

scalafmt

Page 5: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

scalafix

Page 6: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

— r/scala, 10 points

“The Scala IDE situation is quite possibly the worst out of all the industrial languages in existence.

They’re all terrible, especially VS Code or Atom. Just use IntelliJ and hope for the best.”

Page 7: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Let’s build an IDE!

Page 8: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

How hard can it be?

Page 9: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Pretty basic features• Work with my editor

• Vim, Sublime Text, VS Code, Atom, Emacs, …

• Work with my build tool

• sbt, gradle, maven, pants, bazel, mill, cbt, …

• Diagnostics

• No spurious red squiggles!

Page 10: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Pretty basic features• Goto definition

• Project sources, Scala deps, Java deps, classfiles

• Auto completions

• Scope, auto-import, type members, extension methods

• Refactorings

• Rename, organize imports, insert type annotation, …

Page 12: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language
Page 13: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Rest of the talk

• Language Server Protocol

• “Zoo” of Scala language servers

• Build Server Protocol

• Conclusion

Page 14: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Scala Java Rust Python

Vim

Sublime

VS Code

Atom

Emacs

IntelliJ

Page 15: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Scala

Java

Rust

Python

Vim

Sublime

VS Code

Atom

Emacs

IntelliJ

Language Server Protocol

Page 16: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Scala

Java

Editor

Page 17: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

JSON-RPC

Page 18: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Wait, JSON? On every keystroke?

Page 19: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Xian editor for the next 20 years with with

uncompromising performance

Page 20: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language
Page 21: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

LGTM, where do I sign up?

Page 22: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

How to build an IDE

1. Configure LSP 2. Implement the rest of the IDE

1. 2.

Page 23: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Language Features

Page 24: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

textDocument/publishDiagnostics

Page 25: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

textDocument/publishDiagnostics

Page 26: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

textDocument/definition

Page 27: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

textDocument/definition

Page 28: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

SemanticDB

Symbol: spire.math.Complex#real(). Range: 10:18-10:22 Role: REFERENCE

Page 29: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

textDocument/completions

Page 30: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

textDocument/completions

Page 31: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

textDocument/codeActions

Page 32: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

textDocument/codeActions

Page 33: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language
Page 34: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

The Zoo

Page 35: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

ENSIME Dotty sbt Metals

Navigation Graphpocolypse TASTY* zinc analyses* SemanticDB

Diagnostics scalac dotc sbt server sbt server/scalac

Completions scalac dotc scalac

Refactoring scala-refactoring scalafix

*partial support

Page 36: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Limitations

Page 37: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

• Work with my build tool

• sbt, gradle, maven, pants, bazel, mill, cbt, …

Pretty Basic Features

Page 38: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

IntelliJ ENSIME Dotty Metalssbt

mavengradlepantsbazelmill

bloop

Page 39: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

IntelliJ

ENSIME

Dotty

Metals

sbt

maven

gradle

pants

bazel

mill

bloop

Build Server Protocol

Page 40: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Build Server Protocol and fresh IDEAs

— @ebenwert, @jvican at ScalaSphere April 2018

Page 41: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Conclusion• Work with my editor

• Work with my build tool

• Diagnostics

• Navigation

• Completions

• Refactoring

Page 42: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Conclusion• Work with my editor → LSP!

• Work with my build tool

• Diagnostics

• Navigation

• Completions

• Refactoring

Page 43: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Conclusion• Work with my editor → LSP!

• Work with my build tool → BSP!

• Diagnostics → BSP+LSP!

• Navigation

• Completions

• Refactoring

Page 44: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Conclusion• Work with my editor → LSP!

• Work with my build tool → BSP!

• Diagnostics → BSP+LSP!

• Navigation → SemanticDB!

• Completions

• Refactoring

Page 45: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Conclusion• Work with my editor → LSP!

• Work with my build tool → BSP!

• Diagnostics → BSP+LSP!

• Navigation → SemanticDB!

• Completions → ???!

• Refactoring

Page 46: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Conclusion• Work with my editor → LSP!

• Work with my build tool → BSP!

• Diagnostics → BSP+LSP!

• Navigation → SemanticDB!

• Completions → ???!

• Refactoring → Scalafix!

Page 47: Six steps from zero to IDE · 2018. 5. 20. · Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ. Scala Java Rust Python Vim Sublime VS Code Atom Emacs IntelliJ Language

Thank You