Virtuslab in cooperation with Scala Center and the Scala community is working on a unique open-source solution – Metals. It’s a Language Server Protocol (LSP) implementation that enables users of many different text editors to enjoy rich IDE features such as code completion, type hints, fuzzy symbol search, rename, diagnostics, goto definition and many more. We invite you to read this exclusive inside report with Tomasz Godzik, who is core maintainer of this solution.
Giving back to the community
In spring 2019, VirtusLab joined Scala Center as a contributor member. Its main task is education, creating open-source tools and improving existing ones. Since then we have been working on improving Metals. Why did we decide on such cooperation? It was an obvious step since we specialize in the Scala language and have a large tooling division already. We were especially excited as we knew that such a tool would be very useful for the community and was really needed. Furthermore, we have always been guided by the principle of supporting open-source solutions. Most companies use OSS tools and libraries, but they rarely actively participate in fixing bugs, improving existing tools or creating new ones. We always want to give back to the community, so VLTeam does its best to contribute to open source projects and enhance software that is used by developers around the world.
Metals at VirtusLab
The Metals project is the result of great collaboration in the open-source community, mostly of Ólafur Páll Geirsson, Jorge Vicente Cantero, Gabriel Petronella, Chris Kipp and from VirtusLab side – Tomasz Godzik, Marek Żarnowski, Alexey Alefirov, Szymon Swistuń, Krzysztof Bochenek, just to name a few. At VirtusLab, we specialize in dev tolling not only for Scala. The team working on Metals is one of the tooling teams delivering solutions for boosting devs’ efficiency. Metals project is a full-time job funded by VirtusLab and led by Tomasz Godzik.
Tomasz is one of the main Metals maintainers and works in close cooperation with Scala Center. He is very devoted to the project and interested in this subject. Tomasz is also doing most releases, that’s why he knows the most actual data –
“Visual Studio Code extension installations it’s now at 50 000, and it was around 10 000 when we started. Statistics are rising also thanks to the work of the VL team. We really contribute to this solution!”.
The team has a lot of independence thanks to which they choose problems to address by themselves. The selection criteria include: how complicated the problem is, what are the current needs of VirtusLab (what solution we need to improve our daily work) and ScalaCenter, what is the popularity of a given feature among voters (GitHub’s likes).
The most important technologies used are LSP protocol, Scalameta, SemanticDB and especially Bloop. Metals can be used in Visual Studio Code, Vim, Emacs, Atom and Sublime Text as well as any other Language Server Protocol compatible text editor. It turns them into powerful but still fast and lightweight IDE. It can also run with Eclipse and filled a gap that appeared after the aforementioned Scala IDE. Metals also works out of the box with such build tools as Sbt, Gradle, Maven and Mill. It’s also possible to use any build tool with support for Bloop like Fury or Seed.
Challenges & opportunities
The main problems VL team encounters are related to the optimization and adapting the existing protocol to make new features work as intuitive as possible. Optimization is crucial for us since we have in mind that the solution we’re working on is not only to help the community, but also to improve our daily work. It has to be fast – indeed, Metals is in many areas super fast! As for the future, we plan to contribute directly to the success of Scala 3 through fully supporting it from day one.
Metals has constantly growing base of satisfied users and gets more and more features. Now it’s the 2nd most widely used IDE for Scala. We are proudly contributing to this solution and invite everyone who also would like to help the open-source community.