Currently working on Metals as one of the main contributors as a part of the collaboration between VirtusLab and Scala Center.
Client Editor
LSP Server
Client Editor
LSP Server
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
Client Editor
LSP Server
Completions
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
Client Editor
LSP Server
Completions
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
Client Editor
LSP Server
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
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_
}
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_
}
Client Editor
LSP Server
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
addi_
}
Client Editor
LSP Server
object Main{
def adding(a : Int, b : Int) = a + b
val additional = ""
val one = 1
val two = 2
adding(_)
}
Mill
Mill
Metals
Mill
Bloop
LSP Server
Bloop
LSP Server
What is this code a part of!
Bloop
LSP Server
Which project?
Bloop
LSP Server
Which project?
Bloop
LSP Server
Bloop
LSP Server
Project Foo
Bloop
LSP Server
Project Foo
Bloop
LSP Server
I don't know how to compile it!
Bloop
LSP Server
Compile Foo!
Bloop
LSP Server
Compile Foo!
Bloop
LSP Server
Bloop
LSP Server
Error report
Bloop
LSP Server
Error report
Bloop
LSP Server
Diagnostics
- Intellij is still the most wholesome solution
- multiple features
- a lot of additional tools
- probably best for Scala
- not everyone needs every possible feature
- indexing times are a killer
- it's large and unwieldy for quick editing
- additional barrier if you start with Scala
- Intellij is still the most wholesome solution
- multiple features
- a lot of additional tools
- probably best for Scala
Mill
trait A:
def f: Int
class C(x: Int) extends A:
def f = x
object O:
def f = 3
trait A:
def f: Int
class C(x: Int) extends A:
def f = x
object O:
def f = 3
val x: String = ???
val y: String | Null = ???
x == null // error
x eq null // error
"hello" == null // error
y == null // ok
y == x // ok
trait A:
def f: Int
class C(x: Int) extends A:
def f = x
object O:
def f = 3
val x: String = ???
val y: String | Null = ???
x == null // error
x eq null // error
"hello" == null // error
y == null // ok
y == x // ok
@main def helloWorld(
age: Int,
name: String,
others: String*
) = {
println(s"Hello $name!")
println(s"You are $age years old")
}
trait A:
def f: Int
class C(x: Int) extends A:
def f = x
object O:
def f = 3
val x: String = ???
val y: String | Null = ???
x == null // error
x eq null // error
"hello" == null // error
y == null // ok
y == x // ok
@main def helloWorld(
age: Int,
name: String,
others: String*
) = {
println(s"Hello $name!")
println(s"You are $age years old")
}
case class Circle(
x: Double,
y: Double,
radius: Double
)
def (c: Circle).circumference: Double =
c.radius * math.Pi * 2
- simplified pattern matching
- better macros
- enums
- focus on ease of migration
- implicit suggestions
- a lot of even more modern features
trait A:
def f: Int
class C(x: Int) extends A:
def f = x
object O:
def f = 3
val x: String = ???
val y: String | Null = ???
x == null // error
x eq null // error
"hello" == null // error
y == null // ok
y == x // ok
@main def helloWorld(
age: Int,
name: String,
others: String*
) = {
println(s"Hello $name!")
println(s"You are $age years old")
}
case class Circle(
x: Double,
y: Double,
radius: Double
)
def (c: Circle).circumference: Double =
c.radius * math.Pi * 2
Last year Scala Days talk by Ólafur Páll Geirsson
https://tinyurl.com/metals-scala
Presentation: https://slides.com/tomekgodzik/growing
Metals documentation: https://scalameta.org/metals/
Bloop documentation: https://scalacenter.github.io/bloop/
Shout at me on Twitter: @TomekGodzik
OR
Ask me about anything on Slack!