Cómo instalar Scala/Metals en MacOS
Utilizar Scala con Metals puede ser muy complicado si no se utilizan las versiones correctas. Después de muchas horas logré hacerlo funcionar y estoy encantado con su funcionamiento. Mi editor es Helix, pero los siguientes comandos funcionarán con cualquier otro editor.
Lo primero es desinstalar cualquier versión existente que tengamos de bloop o metals y, a continuación, instalar coursier y actualizar scala:
brew install coursier
brew upgrade scala
Ahora, utilizando coursier, instalamos bloop y metals:
coursier install bloop
coursier install metals
Agregamos bloop a la ruta existente a ~/.bash_profile:
export PATH="$PATH:/Users/usuario/Library/Application Support/Coursier/bin"
y recargamos para aplicar los cambios:
source ~/.bash_profile
A continuación, iremos al directorio de nuestro proyecto y borraremos —o renombraremos— cualquier directorio existente de bloop o metals:
cd mi-proyecto
rm -Rf .bloop
rm -Rf .metals
Nota: A partir de aquí, si tenemos múltiples versions de Java instaladas en el ordenador, debemos asegurarnos que las variables de ambiente JAVA_HOME y PATH apunten a la versión que queremos utilizar.
Iniciemos el servicio de bloop pasando como parámetro la versión de java que queremos usar:
bloop --java-home <path>
Comprobemos que Helix encuentra el servicio de Metals, y leamos el fichero build.sbt de nuestro proyecto:
hx --health
hx build.sbt
En este punto, recomiendo tener un panel adicional abierto con el siguiente comando para verificar que todo vaya como esperamos:
tail -f .metals/metals.log
Para terminar, importaremos el proyecto en Helix:
:lsp-workspace-command buildIimport
Si todo ha funcionado bien, podremos abrir ficheros adicionales en la sesión de Helix y utilizar funciones como g-r ir a referencias, g-i ir a implementación, etc. En caso de error, debemos revisar el fichero .metals/metals.log.
Nota: Al terminar, podemos detener el servicio de bloop con
bloop exit.
Nota: El comando coursier también puede ser utilizado para instalar paquetes adicionales y sus dependencias, por ejemplo:
coursier fetch org.scala-sbt:compiler-interface:1.11.0
Conclusión
Debemos tener presente el utilizar las versiones de bloop y metals que vienen incluidas con coursier, de otra manera corremos el riesgo de caer en incompatibilidades que resultarán en errores difíciles de corregir.
