The language server protocol
Your favourite language in you favourite Editor
How does it work
Client Editor
LSP Server
How does it work
Client Editor
LSP Server
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
How does it work
Client Editor
LSP Server
Completions
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
How does it work
Client Editor
LSP Server
Completions
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
How does it work
Client Editor
LSP Server
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
How does it work
Client Editor
LSP Server
- adding()
- additional
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
How does it work
Client Editor
LSP Server
- adding()
- additional
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
How does it work
Client Editor
LSP Server
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
How does it work
Client Editor
LSP Server
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
adding(_)
}
The build server protocol
The universe of Build tools
Mill
Seed
The universe of Build tools
Mill
Seed
Metals
Mill
Seed
The universe of Build tools
Bloop
LSP Server
BLOOP AND BSP
Bloop
LSP Server
What is this code a part of!
BLOOP AND BSP
Bloop
LSP Server
Which project?
BLOOP AND BSP
Bloop
LSP Server
BLOOP AND BSP
Which project?
Bloop
LSP Server
BLOOP AND BSP
Bloop
LSP Server
Project Foo
BLOOP AND BSP
Bloop
LSP Server
Project Foo
BLOOP AND BSP
Bloop
LSP Server
I don't know how to compile it!
BLOOP AND BSP
Bloop
LSP Server
Compile Foo!
BLOOP AND BSP
Bloop
LSP Server
Compile Foo!
BLOOP AND BSP
Bloop
LSP Server
BLOOP AND BSP
Bloop
LSP Server
Error report
BLOOP AND BSP
Bloop
LSP Server
Error report
BLOOP AND BSP
Bloop
LSP Server
Diagnostics
BLOOP AND BSP
SemanticDB
$ metap .
Test.scala
----------
Summary:
Schema => SemanticDB v4
Uri => Test.scala
Text => empty
Language => Scala
Symbols => 3 entries
Occurrences => 7 entries
Symbols:
_empty_/Test. => final object Test extends AnyRef { +1 decls }
_empty_/Test.main(). => method main(args: Array[String]): Unit
_empty_/Test.main().(args) => param args: Array[String]
Occurrences:
[0:7..0:11) <= _empty_/Test.
[1:6..1:10) <= _empty_/Test.main().
[1:11..1:15) <= _empty_/Test.main().(args)
[1:17..1:22) => scala/Array#
[1:23..1:29) => scala/Predef.String#
[1:33..1:37) => scala/Unit#
[2:4..2:11) => scala/Predef.println(+1).
Used in:
ReferenceProvider
ImplementationProvider
SyntheticDecorationsProvider
Anything that work file wide
Scalameta parser
- used for syntax based feature
- does not require versions specific feature
- easy to implement new features for all ScalaVersions
- FoldingProvider, DocumentSymbolProvider, some code actions
Scala presentation compiler
Scala Presentation Compiler (mtags)
2.13.4 / 2.12.13 / 2.12.12 / 3.0.0-RC1 ...
Java Interfaces
Metals Server (mtags)
- Used for anything that needs to work on newest unsaved version of the code
- Can work in non-compiling code
- Implements one off features that work for a single point
- HoverProvider, SignatureHelpProvider, DefinitionProvider (fallback)
Scala Spree
By Tomek Godzik
Scala Spree
- 384