Welcome, Guest. Please login or register.
Did you miss your activation email?

Author Topic: [DE] Kate und Perl-Languageserver  (Read 1336 times)

Offline orinoco

  • User
  • Posts: 284
  • Bullshit artist
[DE] Kate und Perl-Languageserver
« on: 2025/10/21, 16:40:12 »
Hallo,

ich denke ich stehe wieder mal vor einer Herausforderung, die ich hier im Forum exklusiv haben werde. Ich bleibe aber optimistisch.

Ich möchte meine Perl-Skripte in Kate komfortabler programmieren und habe mir dafür den Perl-Languageserver (Paket libperl-languageserver-perl) installiert und in Kate entsprechend eingerichtet.

In Kate habe ich die Module "Kate-Debugger", "LSP-Client" und "Symbolansicht" aktiviert.

Der Languageserver wird gestartet:
Code: [Select]
[15:51:07  LSP-Client Protokoll] Server perl@/home/orinoco gestartet: /usr/bin/perl -MPerl::LanguageServer -e Perl::LanguageServer::run --
[15:51:08  LSP-Server Protokoll] perl@/home/orinoco
LS: apply_all_roles (Perl::LanguageServer=HASH(0x55a8230cc870), Perl::LanguageServer::Methods, Perl/LanguageServer/Methods.pm)
[15:51:08  LSP-Server Protokoll] perl@/home/orinoco
LS: apply_all_roles (Moose::Meta::Class::__ANON__::SERIAL::1=HASH(0x55a8230cc870), Perl::LanguageServer::Methods::textDocument, Perl/LanguageServer/Methods/textDocument.pm)
[15:51:08  LSP-Server Protokoll] perl@/home/orinoco
LS: ERROR: Unknown perlmethod _rpcreq_documentHighlight at /usr/share/perl5/Perl/LanguageServer.pm line 224.

Die Fehlermeldung wird auf der Projektseite (https://metacpan.org/pod/Perl::LanguageServer) wie folgt erklärt:
Code: [Select]
ERROR: Unknown perlmethod rpcnotsetTraceNotification

This is not an issue, that just means that not all features of the debugging protocol are implemented. Also it says ERROR, it's just a warning and you can safely ignore it.

Wenn ich jetzt in den Einstellungen des Debug-Fensters mein Skript als Programmdatei auswähle, kann ich den Debugger starten (Menü Debuggen->Debuggen starten). Der Cursor springt im Kate-Editorfenster an die erste Stelle mit dem Programmcode.
Code: [Select]
{
    "command": [
        "perl",
        "-MPerl::LanguageServer",
        "-e",
        "Perl::LanguageServer::run",
        "--",
        "--port",
        "63709"
    ],
    "port": 63709,
    "redirectStderr": false,
    "redirectStdout": true,
    "request": {
        "args": [
        ],
        "command": "launch",
        "program": "/home/orinoco/Sources/Backup/backup.pl",
        "stopOnEntry": true
    },
    "runInTerminal": true,
    "supportsSourceRequest": false
}


Server-Eigenschaften:
* Bedingte Haltepunkte: unterstützt
* Funktionshaltepunkte: nicht unterstützt
* Bedingte Haltepunkte getroffen: nicht unterstützt
* Punkte protokollieren: nicht unterstützt
* Anfrage von Modulen: unterstützt
* „Gehe zu den Zielen“-Anfrage: nicht unterstützt
* Anfrage beenden: unterstützt
* den untersuchten Prozess beenden: unterstützt

--> debugge Prozess [1377520] /home/orinoco/Sources/Backup/backup.pl (Methode starten: launch)
--> gestoppt (entry). Aktiver Thread: 1 (alle Threads gestoppt).
*** auf Benutzeraktionen wartend ***
--> (Wird ausgeführt)
Aktueller Frame [0]: /home/orinoco/Sources/Backup/backup.pl:22 (<main>)

Leider kann ich mit dem Button "Einzelschritt" (alternativ F10) nicht zur nächsten Programmzeile springen. Es passiert nichts - Kein Sprung zur nächsten Programmzeile, keine Fehlermeldung.

Was funktioniert, ist der Button "Debuggen beenden/abbrechen" (alternativ Alt+F7). Ebenso kann ich Breakpoints setzen und löschen. Am Rande erwähnt, sieht die Markierung des Breakpoints sehr bescheiden aus. Tut hier aber nichts zur Sache.

Ich rechne nicht damit, das hier sonst noch wer Perl programmiert, geschweige denn dies mit Kate praktiziert. Aber vielleicht hat jemand Erfahrung damit, einen Languageserver mit Kate zu benutzen Insbesondere bin ich mir bei den Standard-Einstellungen des Debug-Adapters nicht sicher:
Code: [Select]
        "perl-ls": {
            "url": "https://github.com/richterger/Perl-LanguageServer",
            "run": {
                "command": ["perl", "-MPerl::LanguageServer", "-e", "Perl::LanguageServer::run", "--", "--port", "${#run.port}"],
                "port": 0,
                "redirectStderr": false,
                "redirectStdout": true,
                "supportsSourceRequest": false
            },
            "configurations": {
                "launch": {
                    "request": {
                        "command": "launch",
                        "program": "${file}",
                        "args": "${args|list}",
                        "stopOnEntry": true
                    }
                },
                "launch locallib": {
                    "request": {
                        "command": "launch",
                        "program": "${file}",
                        "args": "${args|list}",
                        "stopOnEntry": true,
                        "env": {
                            "PERL5LIB": "${locallib}"
                        }
                    }
                }
            }
        }

Die Dokumentation Languagesavers befasst sich mit der Einbindung in VSCode, was ich aber bewusst (inkl. codium) nicht benutzen möchte.

Ich finde das Konzept des Languageserver-Protokolls sehr spannend, weil ich mir davon hohe Flexibilität bei der Wahl der (kompatiblen) Editoren/IDEs verspreche.