Emacs als Perl-IDE: Stand Oktober 2018

Einleitung

Ich entwickle seit mehr als 25 Jahren Perl. Den Code habe ich über die Jahre in vielen Editoren geschrieben. Nach mehreren Jahren mit Sublime bin ich wieder beim Emacs gelandet (siehe dazu auch meinen Gründungsbeitrag in meinem Blog emacs-lernen). Über die Jahre habe ich mir diverse Konfigurationsschnipsel zusammengesucht, die meine IDE für Perl formen. Ich beschreibe hier meinen Stand, mit dem ich schon ganz gut arbeiten kann. Andere mögen andere Einstellungen nutzen (s. LanX-Folien).

Grundlage: cperl-mode

Die Basis für alles ist der cperl-mode. Er kümmert sich um all die netten Kleinigkeiten, die so grundlegend sind, dass ich fast vergessen hätte, ihn aufzuführen. Die für mich wichtigsten sind diese:

  • Syntax-Highlighting: Einfärbung des Code je nach syntaktischer Einheit
  • automatische Einrückung
  • Anzeigen des entsprechenden Gegenstücks bei Klammerungen

Wir schreiben 2018. Standard für Perl ist im Emacs immer noch der Perl-Mode – warum auch immer. Jeder, den ich kenne, nutzt den cperl-mode; dieser sollte der Standard sein.

Übernahme der Umgebungsvariable PATH

Ich bin auf dem Mac unterwegs. Im Emacs rufe ich gelegentlich externe Programme auf, z.B. perltidy. Damit diese korrekt gefunden werden, muss der Suchpfad aus der Umgebung der Shell korrekt übernommen werden. Dafür sorgt exec-path-from-shell.

Prüfung des Quelltextes während des Schreibens mit flycheck

Flycheck prüft den Text während des Schreibens auf Fehler. Aus Textverarbeitungen kennen wir die Schlangenlinien unter Worten oder Phrasen, die Fehler in der Rechtschreibung oder Grammatik anzeigen. Flycheck macht das im Emacs für beliebigen Text. Und wenn ich den cperl-mode angeschaltet habe, prüft er den Perl-Quelltext.

Flycheck ist vielleicht der wichtigste Baustein meiner Konfiguration, der mich schneller entwickeln lässt. Wie macht er das?

Es gibt hier zwei Befehle, die nacheinander ausgeführt werden. Mit perl -c wird die Syntax geprüft. Fehler werden durch rote Schlangenlinien angezeigt. Wenn ich mit dem Cursor zu der entsprechenden Stelle gehe, wird mir der Fehler im Minibuffer angezeigt (oder als Tooltip, wenn ich mit der Maus unterwegs bin). (Bild)

Ein häufiger Fehler, den mir perl bei dieser Prüfung anzeigt, betrifft fehlende Module. Damit perl auch meinen gesamten Code kennt, ergänze ich den Modulsuchpfad für die Prüfung durch eine Angabe in .dir-locals.el.

Den Stil meines Codes prüft Emacs anschließend mit perlcritic. Etwaige Funde werden mir durch eine gelbe Schlangenlinie angezeigt. Der passende Text zum Fund wird mir auch hier im Minibuffer und als Tooltip angezeigt. (Bild)

Und warum macht mich das jetzt schneller? Ohne Flycheck finde ich meine Fehler erst viel später heraus – frühestens dann, wenn meine Tests sie aufdecken; mit Glück während der Ausführung des Programms; mit Pech gar nicht. Dank Flycheck sehe ich die Fehler viel eher und kann sie gleich korrigieren. Ich muss dann auch nicht gedanklich zwischen den Kontexten hin- und herspringen.

Code-Formatierung mit perltidy

Dank perltidy mache ich mir über Code-Formatierung keine Gedanken mehr. Ich habe mir perltidy.el aus dem Emacs-Wiki (Link) installiert und auf C-c t gelegt. Mein Arbeitsablauf sieht mittlerweile so aus, dass ich mich auf die automatische Einrückung vom Cperl-Mode verlasse, und alles andere von Perltidy machen lasse.

Auch dies macht mich schneller. Früher habe ich von Hand Klammern gesetzt, Variablenzuweisungen von Hand am Gleichheitszeichen ausgerichtet, Einrückungen repariert und diversen anderen Kleinkram am Layout des Quelltextes geschraubt.

Heute schreibe ich den Code hin und drücke anschließend C-c t. Ich verschwende keinen Gedanken mehr an die Formatierung. Dadurch schleppe ich im Geiste weniger Ballast mit.

Ich bin allerdings noch nicht soweit, dass ich das Formatieren automatisch beim Speichern der Datei erledigen lasse.

Demnächst ausprobieren

Ich habe buchstäblich seit Jahren vor, automatische Vervollständigung von Bezeichnern mit perl-complete (Link) auszuprobieren. Das Werkzeug soll angeblich Bezeichner kontextabhängig vervollständige und meinen Code so weit verstehen, dass passend zum Inhalt einer Variablen die Methoden ergänzt werden.

Aus irgendeinem Grunde habe ich dieses Werkzeug noch nicht zum Laufen bekommen. Ich vermute, dass diese zusätzliche Eigenschaft meiner Entwicklungsumgebung ganz praktisch wäre, wirklich vermisst habe ich sie noch nicht. Wahnsinnig schneller werden würde ich vermutlich auch nicht.

Außerdem habe ich noch PerlySense (Link) auf dem Radar. Dieses eine Tool ist ein IDE-Backend für Perl und bietet Schnittstellen zu Editoren. Da ich mich sehr fürs Testen interessiere, ist das für mich spannendste Feature von PerlySense das Herstellen der Verbindung zwischen Test und Code.

Wenn ich die Dokumentation richtig deute, dann nimmt sich PerlySense nach Messung der Testabdeckung durch cover (Link) die angelegte Datenbank und ermittelt daraus, welche Subroutine in welchem Test getestet wird. Im Emacs kann ich dann zwischen Test und dem getesteten Code hin- und herspringen. Das würde noch einen kleinen Geschwindigkeitsschub bringen.

Was für mich nicht funktioniert hat

Vor Jahren habe ich mal mit parametrisierten Vorlagen herumgespielt. Das einzige, wofür ich die Vorlagen ersthaft genutzt habe, war das Schreiben von POD bei Erstellung einer Subroutine. Und das hat für mich nicht funktioniert, weil es meinem Arbeitsablauf zuwiderläuft: Dokumentation schreibe ich zuletzt – und zwar für den Code, der am Ende meiner Arbeit übrig geblieben ist.

Ausblick

Wie alles beim Emacs ist dies nur der momentane Stand. Ich werde auf diesem Blog gelegentlich darüber berichten, wie meine Entwicklungsumgebung aussieht. Wer mich grundsätzlich bei meiner Reise mit dem Emacs begleiten möchte, kann das in meinem anderen Blog machen. (link) Meine Emacs-Konfiguration liegt auf Gitlab. (link)

comments powered by Disqus