Instalación e configuración de LSPs para Kate

Introducción

Durante algún tempo estiven a pagar por IDEs para desenvolver o meu traballo. Algúns baseados en plugins e outros listos para funcionar, co que xa traían de base. Pero dun tempo a esta parte veño considerando mudar a un sistema máis minimalista. Prescindir de executar un software que ocupa en ocasións dende un xiga de memoria ata en ocasións catro. Claro, isto depende do tamaño dos proxectos e do que teñamos aberto. No peor dos casos podía ser ter varios ficheiros de código, con conexións a bases de datos e algunha terminal. Ou mesmo varias instancias da aplicación, con distintos proxectos.

Xa levaba algún tempo en que os programas que utilizaba, tiñaos configurados coas teclas de Vim. Así que de entrada considerei moverme a este editor. Probei con Lazyvim e se ben é certo que en parte cumpría co que precisaba, non era unha experiencia de todo satisfactoria. Complementos que rompían coas actualizacións, continuas actualizacións e cambios, etc. Pensei en xestionar os complementos pola miña conta, pero se ben todo era configurable, levaría o seu tempo. Tamén vin moita xente que se perde en continuas personalizacións do editor, e non quería perder tempo con iso.

Así que a seguinte opción era outro programa, co que teño costume de traballar, Kate. O editor de textos de KDE xa inclúe algunhas ferramentas, que no caso de Vim/Neovim, habería que configurar a man. Por exemplo a árbore do proxecto. De momento o primeiro que boto en falla é o resaltado de sintaxe e algunhas opcións para editar código.
Kate xa inclúe un cliente de LSP, co que o único que precisaba era instalar os servidores de linguaxe e configuralos.

Resumo rápido

Se só queres o resultado final, sen a narrativa:

  1. PHP: descargar o binario de Phpantom (sección releases, x86_64 Linux no meu caso), descomprimilo en ~/.local/bin e darlle permisos de execución:

    chmod +x ~/.local/bin/phpantom_lsp
    
  2. Python: dentro dun entorno virtual de pyenv (ver a sección de Python para o script pylsp_in_env.sh, que vai en ~/.local/bin):

    pyenv activate <nome>
    pip3.13 install basedpyright
    chmod +x ~/.local/bin/pylsp_in_env.sh
    
  3. Kate: en Configuración > Configurar - Kate > Cliente LSP > Configuración do servidor da persoa usuaria, engadir os dous servidores:

    {
      "servers": {
        "php": {
          "command": ["/home/user/.local/bin/phpantom_lsp"],
          "root": ".",
          "highlightingModeRegex": "^PHP \\(HTML\\)$"
        },
        "python": {
          "command": [
            "/home/user/.local/bin/pylsp_in_env.sh",
            "%{Project:NativePath}"
          ],
          "root": ".",
          "url": "https://docs.basedpyright.com/latest/",
          "highlightingModeRegex": "^Python$",
          "settings": {
            "basedpyright": {
              "analysis": {
                "typeCheckingMode": "off"
              }
            }
          }
        }
      }
    }
    
  4. Verificación: abrir un ficheiro .php ou .py e comprobar na lapela de Saída que o servidor arrincou.

A partir de aquí o paso a paso en detalle

Instalación

O normal é que en calquera distribución que veña con KDE Plasma, xa veña Kate instalado. Se non, estará nos repositorios da distribución. Así que para instalalo chegaría con executar o comando apropiado.

No caso de Debian 13 (trixie) ou superior.

sudo apt install kate

No caso de OpenSUSE

sudo zypper install kate

Por aclarar, no momento de escribir este artigo a versión de Kate é a 25.04.3.

Entre as cousas que trae de serie Kate, inclúense algúns LSPs preconfigurados, pero non se adaptan ao que busco. Podémolos ver en Configuración > Configurar - Kate > Cliente de LSP e aí, na lapela de Configuración predeterminada do servidor. Dicir tamén que son configuracións para traballar con algúns LSP, pero se os queremos utilizar precisaremos instalar estes LSPs. Xa que non veñen de serie coa distro que estemos a utilizar.

PHP

O primeiro LSP que quixen instalar era o de PHP. Isto foi porque precisaba facer algúns cambios nun proxecto Symfony, e con KDevelop non remataba de funcionar correctamente. Ao revisar parece que o complemento de PHP, non se estaba a manter ao día e a versión distribuída non remataba de encaixar. Quen sabe, se algún día retomo C++, gustaríame colaborar co proxecto. Podería ser un punto, polo que comezar.

A escolla

Despois de buscar por internet atopei algunhas opcións:

  • Intelephense, que ten un modelo Freemium
  • Phpactor, é un proxecto de software libre. Pero actualmente parece que o mantenedor non ten tempo para correxir algunhas cousas relativas ao rendemento, precision e mantenibilidade. El mesmo advirte que de momento, dará mantemento, pero que non o garante.
  • Phpantom, descoñecía totalmente este proxecto. Parece tratarse dun LSP implementado en Rust, con bastante pulo. No propio repositorio, podemos ver nunha táboa algunhas das opcións que inclúe comparado con outros LSPs e programas.

De entre estes decanteime por Phpantom.

Instalación

Para a súa instalación, chega con ir á sección de releases e buscar a axeitada para o noso sistema. No meu caso descarguei para x86_64 Linux.
Descomprimín o ficheiro e coloquei o binario onde tocaba, no meu caso en /home/user/.local/bin. E xa está esa é toda a instalación. Se acaso non os ten, podemos darlle permisos de execución.

chmod +x phpantom_lsp

A versión neste momento é a 0.11.1.

Configuración co cliente de LSP

Para configurar o LSP iremos ao menú de Configuración > Configurar - Kate > Cliente LSP. Aquí iremos á lapela Configuración do servidor da persoa usuaria. No meu caso estaba baleiro, así que engadín o JSON do servidor.

{
  "servers": {
    "php": {
      "command": ["/home/user/.local/bin/phpantom_lsp"],
      "root": ".",
      "highlightingModeRegex": "^PHP \\(HTML\\)$"
    }
  }
}

Esta configuración dille ao editor onde ten que buscar o comando para lanzar o servidor e para que arquivos. Así cada vez que abramos un ficheiro PHP, na lapela de Saída, poderemos ver unha mensaxe coma esta:

[15:19:08 Cliente de LSP Rexistro] Iniciouse o servidor php@/home/user/Proxectos/git/php/api: /home/user/.local/bin/phpantom_lsp

Con isto xa poderíamos traballar. Cando estemos a editar algo de código, podemos seleccionar código e ao premer alt+intro, veremos o menú contextual coas opcións que nos ofrece o LSP. Por exemplo, extraer función, ou por unha variable en liña en lugar de declarala.

De momento sinalan que non ten compatibilidade con Symfony, pero principalmente o que quería era o autocompletado de PHP. Se ben cousas como importar as rutas dos use automáticamente, si que mo está a facer. E según parece xa están a traballar, para engadir compatibilidade con Symfony, como se pode ver neste commit.

Python

O seguinte foi traballar nun pequeno script en Python, para automatizar unha tarefa recorrente. Non era gran cousa, pero outra vez quería o resaltado de sintaxe.

A escolla

Fai algún tempo lera un artigo de Akseli, sobre a configuración de Basedpyright. Isto facíao como unha evolución dende o uso de python-lsp-server.
Así que non me compliquei moito máis e instalei o mesmo.

Instalación

A diferenza neste caso é que requería de pip para instalar o servidor. Pero non quería metelo directamente no meu sistema.

Así que para telo illado, o que fixen foi metelo nun entorno virtual. Para isto tiven que instalar primeiro pyenv, virtualenv e unha versión de Python nese entorno.

Para instalar pyenv

sudo apt install pyenv

Para obter virtualenv

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

Para instalar unha versión de Python, podemos ver as dispoñibles con pyenv install --list e instalar a escollida con pyenv install -v <versión>.

Para crear un entorno virtual ca versión desexada executaremos pyenv virtualenv <versión> <nome>, onde nome será como lle queremos chamar a ese entorno, por exemplo desenvolvemento.

Xa con isto, para iniciar o entorno executamos pyenv activate <nome> e pyenv deactivate para desactivalo.

Dentro do entorno executaremos pip3.13 install basedpyright para instalar o noso LSP.

A versión de basedpyright instalada é a 1.40.2.

Configuración

Neste caso o servidor precisa dun script para inicialo, non é un binario coma era Phpantom.
Este é o script en cuestión que estou a utilizar para levantar o servidor.

#!/usr/bin/env bash

ENV_NAME="p3.13.2"
source ~/.bashrc

export PYENV_ROOT="${PYENV_ROOT:-$HOME/.pyenv}"
export PATH="$PYENV_ROOT/bin:$PATH"

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

# Se xa estamos nese entorno, non facemos nada
if [ "$(pyenv version-name 2>/dev/null)" != "$ENV_NAME" ]; then
  pyenv activate "$ENV_NAME"
fi

exec basedpyright-langserver --stdio

Como podemos ver, primeiro inicia o entorno virtual e despois lanza o LSP.

Para configurar Kate, é igual ao de antes. Iremos ao menú de Configuración > Configurar - Kate > Cliente LSP. Aquí iremos á lapela Configuración do servidor da persoa usuaria. Despois da configuración do servidor de PHP, engadimos o de Python.

{
  "servers": {
    "php": {...},
    "python": {
      "command": [
        "/home/user/.local/bin/pylsp_in_env.sh",
        "%{Project:NativePath}"
      ],
      "root": ".",
      "url": "https://docs.basedpyright.com/latest/",
      "highlightingModeRegex": "^Python$",
      "settings": {
        "basedpyright": {
          "analysis": {
            "typeCheckingMode": "off"
          }
        }
      }
    }
  }
}

Ao igual ca antes con alt+intro, veremos as opcións que nos ofrece o LSP ao editar código.

Conclusión

Con estes dous servidores de linguaxe, xa teño para comezar a utilizar Kate como o meu editor de código. Con resaltado de sintaxe, autocompletado e funcións de edición. Veremos que tal é traballar con este editor durante algún tempo. De entrada, parece que fornece as principais funcións que preciso para traballar. Cousas como conexións de bases de datos, serán manexadas dende fora do editor. Non é preciso levantar sempre unha conexión, ou ocupar o espazo de memoria, con algo que igual non preciso. Se algún día preciso conexión ca base de datos, cun servidor ssh, etc. Abrirei outra aplicación específica para iso.

O único que preciso son as cousas básicas do día a día para desenvolver. Lapelas, control de versións, dividir pantalla, árbore do proxecto, etc. E iso ven de serie.

Fontes