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:
1brew install coursier
2brew upgrade scala
Ahora, utilizando coursier, instalamos bloop y metals:
1coursier install bloop
2coursier install metals
Agregamos bloop a la ruta existente a ~/.bash_profile:
1export PATH="$PATH:/Users/usuario/Library/Application Support/Coursier/bin"
y recargamos para aplicar los cambios:
1source ~/.bash_profile
A continuación, iremos al directorio de nuestro proyecto y borraremos —o renombraremos— cualquier directorio existente de bloop o metals:
1cd mi-proyecto
2rm -Rf .bloop
3rm -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:
1bloop --java-home <path>
Comprobemos que Helix encuentra el servicio de Metals, y leamos el fichero build.sbt de nuestro proyecto:
1hx --health
2hx build.sbt
En este punto, recomiendo tener un panel adicional abierto con el siguiente comando para verificar que todo vaya como esperamos:
1tail -f .metals/metals.log
Para terminar, importaremos el proyecto en Helix:
1: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:
1coursier 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.
