Configurando o VSCode para Trabalhar com o Scala


O artigo é destinado a iniciantes em programação no Scala, que eu próprio sou, e apenas para aqueles que desejam começar a escrever código de programa no VSCode.

Aconteceu que o único guia sobre como trabalhar com Scala no Visial Studio Code foi este vídeo no canal do YouTube DevInsideYou. Ele descreve detalhadamente a instalação e configuração do ambiente para VS Code e Sublime Text.

Este artigo é uma adaptação do vídeo com algumas adições minhas. Você pode assistir ao vídeo ou continuar lendo este artigo (ou os dois). Nesse caso, espero que seja útil para você.

Instalação


A primeira coisa que precisamos fazer é instalar o próprio Scalu , bem como o sistema de criação de projetos do SBT , se você ainda não o fez.


Para trabalhar com Scala no VSCode, há uma extensão Metals .

Recursos de metais


  • Diagnóstico preciso ao salvar:
  • Transição para definição e pop-up de ajuda instantânea:
  • Definição do tipo:
  • Preenchimento automático ao discar:

Somente a funcionalidade básica está listada aqui, siga a documentação para obter uma descrição mais detalhada.

A seguir, um trecho de um vídeo do DevInsideYou que demonstra como o Scala interage com os editores de código:


Protocolo do servidor de idiomas - usado entre a ferramenta cliente (IDE) e os servidores que fornecem funções específicas para uma linguagem de programação (preenchimento automático, transição para definição etc.).

Metais = Meta (de Scalameta) + LS (do Servidor de Idiomas - o protocolo padrão do servidor de idiomas).

O LSP reduz a complexidade m-times-n, fornecendo um alto nível de suporte para qualquer linguagem de programação em qualquer editor, IDE ou terminal de cliente, para a tarefa mais simples m-plus-n. O LSP foi criado pela Microsoft para definir uma linguagem comum que os analisadores de linguagem de programação possam falar. O Microsoft Visual Studio Code suporta esse protocolo pronto para uso.

O LSP permite que as comunidades de idiomas se concentrem em um servidor de idiomas de alto desempenho, que pode fornecer preenchimento de código, dicas de ferramentas, ir para definição, procurar links e muito mais, enquanto editores e comunidades de clientes podem se concentrar na criação de um único e intuitivo de alto desempenho. e uma extensão idiomática que pode se comunicar com qualquer servidor de idiomas para fornecer instantaneamente um suporte profundo a idiomas.

Inicialização do Projeto


1 via


Inicialização via arquivo scala . Para fazer isso, abra a pasta do projeto e crie a seguinte estrutura padrão:


Exemplo de saída após o primeiro início do Metals:



2 vias


A segunda maneira envolve o uso de moinho . Para fazer isso, crie o arquivo build.sc na pasta do projeto e abra-o.

Exemplo de saída após o primeiro início do Metals:


3 vias (final)


Inicialização com o SBT . Crie um arquivo build.sbt na pasta do projeto com o seguinte conteúdo:

name := "scala-vscode-example" version := "0.1" scalaVersion := "2.13.1" triggeredMessage := Watched.clearWhenTriggered autoStartServer := false scalacOptions ++= Seq( "-feature", "-deprecation", "-language:implicitConversions", "-language:higherKinds" ) addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.10.3") 

Exemplo de saída após o primeiro início do Metals:


Quando o Metals detecta um espaço de trabalho sbt para o qual não há project / build.properties , uma notificação pop-up aparece recomendando que você atualize para 0.13.7:


Eles recomendam o uso do sbt versão 1.2.8. Para alterar a versão sbt, faça as seguintes alterações no arquivo project / build.properties :


Para verificar a versão sbt, use o comando:

 $ sbt sbtVersion 

Inicializamos o ambiente de trabalho sbt na pasta do projeto:

 $ sbt 

Projeto de importação


Para importar o projeto, clique no botão Importar construção na notificação exibida ou insira o comando:


Depois de fazer alterações em qualquer escala, o arquivo Metals o compila automaticamente:


Médico


Usado para corrigir possíveis problemas de configuração de compilação. Para começar a usar:


Conclusão:


Bloop


O Bloop é um servidor de compilação e uma ferramenta CLI para Scala que funciona com o SBT e tem suporte experimental para outras ferramentas de compilação, como Maven , Gradle e Mill . Se seu espaço de trabalho contiver um diretório .bloop com arquivos JSON Bloop, o Metals se conectará automaticamente a ele.

Benefícios Bloop:

  • Compila, testa e executa o código Scala o mais rápido possível. A compilação ocorre automaticamente quando o código fonte é alterado, o lançamento e o teste do programa não requerem uma recompilação;
  • Integra-se facilmente com ferramentas de criação, aplicativos de linha de comando, editores e ferramentas personalizadas;
  • Ele inicia separadamente do IDE, portanto, não depende de sua conclusão ou reinicialização;
  • Acelera a abertura do projeto, pois o Metals não precisa executar o servidor interno para você.

O seguinte snippet do vídeo "Happy Life With Scala Metals" mostra o processo de criação do aplicativo:


Nota : existem algumas imprecisões na figura. Gabriele Petronella aponta para eles em seu comentário no vídeo:
Na figura, as setas inferiores do BSP estão tecnicamente incorretas. Como você (corretamente) apontou, se a ferramenta de construção fala BSP, ela pode se integrar diretamente aos metais sem passar pelo Bloop. Mover de uma ferramenta de construção para um Bloop é uma maneira de adicionar a integração do BSP à própria ferramenta de construção, e é uma etapa especial que não usa o BSP. Mais informações podem ser encontradas aqui .
O Bloop se integra aos IDEs e aos editores de texto, fornecendo um curto ciclo de feedback e diagnóstico confiável do compilador.

Bloop é usado em Metais de duas maneiras possíveis:
  1. Se o Bloop estiver instalado no seu computador, o Metals simplesmente se conectará a um servidor de compilação existente (recomendado);
  2. Se o Bloop não estiver instalado, o servidor Metals fará o download e o executará no modo nativo.

O SemanticDB é um modelo de dados para informações semânticas, como caracteres e tipos, sobre programas no Scala e em outros idiomas. Após compilar o projeto, o sbt-metais envia as informações para o banco de dados local semanticdb-scala.

Instalação Bloop


Para começar, baixe a versão mais recente :

 $ curl -L https://github.com/scalacenter/bloop/releases/download/v1.3.2/install.py | python 

Em seguida, você precisa criar uma cópia do serviço de bloop para o usuário atual:

 $ cp ~/.bloop/systemd/bloop.service ~/.config/systemd/user/ 

Além disso, para não escrever constantemente o caminho para o script, você pode copiar o bloop para / usr / bin :

 $ sudo cp /.bloop/bloop /usr/bin/ 

Reinicialize o daemon systemctl:

 $ systemctl --user daemon-reload 

Adicionando um bloop à inicialização:

 $ systemctl --user enable bloop 

No entanto, se você não estiver trabalhando com o Scala constantemente, não recomendo remover este serviço da inicialização. Você pode desativar a execução automática com o seguinte comando:

 $ systemctl --user disable bloop 

Correndo bloop:

 $ systemctl --user start bloop 

Exibir informações sobre a conexão atual:



Lançamento do aplicativo


Quando o serviço de bloop está em execução, você pode executar seu programa compilado usando este comando no diretório do projeto:

 $ bloop run <proj-name> 

Você também pode adicionar uma tecla de atalho ao ~ / .config / Code / User / keybindings.json :

  {    "key": "meta+r",    "command": "workbench.action.terminal.sendSequence",    "args": {      "text": "bloop run ${workspaceFolderBasename}\u000D"    } } 

Se você não tiver um serviço de bloop em execução, poderá iniciar o aplicativo diretamente por meio do sbt; no entanto, nesse caso, o aplicativo será recompilado a cada vez, o que afetará o momento em que o programa é iniciado:

 $ sbt run 

Dados de origem


Um pequeno caso de teste de um projeto scala está neste repositório no github. Se você também manter seus projetos, adicione a seguinte lista de exceções ao arquivo .gitignore :

 *.class *.log project/ target/ .bloop/ .metals/ 

Source: https://habr.com/ru/post/pt469707/


All Articles