The magic of abapLint

Aus der Feder von Lars Hvam, dem Erfinder von abapGit, gibt es seit einiger Zeit ein weiteres geniales Tool. Es heißt abapLint. Mit diesem Tool ist es möglich, statische Syntaxprüfungen von ABAP-Quelltexten durchzuführen – und zwar ohne SAP-System! Aber der Reihe nach… Was ist ein Linter? Die SAP-Programmier-Welt ist ein eigenes Multiversum, in dem so einiges anders gemacht wird als in anderen Programmiersprachen und Entwicklungsumgebungen. Da ich mich seit Beendigung meiner Ausbildung als Fachberater Softwaretechniken fast ausschließlich mit SAP beschäftigt habe, sind mir viele Begriffe aus der „normalen“ Entwicklungswelt gar kein Begriff. Als ich im Zusammenhang mit abapLint das erste Mal den Begriff „Linter“ hörte, musste ich nachschlagen, was das wohl sein könnte. Für alle diejenigen, die dem Begriff Linter ebenso ratlos gegenüberstehen, ein kurzer Ausflug in die Vergangenheit: Linter wurden erfunden, um die Schwächen der damaligen Compiler auszugleichen. Die Compiler verlangten einerseits fehlerfreies Coding, erkannten andererseits jedoch wichtige Abhängigkeiten nicht. Zudem war es dem Compiler egal, wie der Quelltext aussah. Ursprünglich für C wurde das Programm lint entwickelt, das erweiterte Programmprüfungen vornahm. Der Begriff wurde dann auch für andere Programmiersprachen verwendet. Ein Linter führt statische Analysen durch und erkennt formale Fehler. Also genau das, was auch die ABAP-Syntaxprüfung tut. Die Prüfungen des ABAP-Compilers reichen aus, um zu gewährleisten, dass ein Programm frei von Syntaxfehlern ist. Allerdings benötigt man dafür immer ein SAP-System. Da viele wichtige Dinge jedoch von der Syntaxprüfung nicht erkannt werden, stellt SAP weitere Tools zur Verfügung, wie zum Beispiel: Die erweiterte Programmprüfung SLIN Den Code-Inspector Paketprüfungen Typische Fehler, die dem Syntaxcheck egal sind, jedoch zu Problemen bei der Programmausführung führen, sind beispielsweise: Falscher Parametername beim Aufruf von Funktionsbausteinen Verwendete Meldungsnummer ist nicht vorhanden oder hat eine abweichende Parameteranzahl Was leistet abapLint? Wenn SAP bereits jede Menge Hilfen zur Verfügung stellt, um Programme und Klassen umfassend zu prüfen, wozu benötige ich dann abapLint? abapLint ist ein Open-Source-Projekt. Das bedeutet, dass sich jeder beteiligen und weitere Prüfungen beitragen kann. Während die SAP-Tools sich in erster Linie auf funktionale Prüfungen beschränken, bietet abapLint eine Vielzahl von Regeln, die sich auf die Lesbarkeit und Standardisierung von Quelltext konzentrieren. Verschiedene Prüfungen weisen darauf hin, wenn standardisierte Code-Formatierungen nicht eingehalten wurden. Die Regeln orientieren sich eng am Clean-ABAP-Styleguide der SAP. Genau das sind die Prüfungen, die man in den SAP-Tools vergeblich sucht. Beispiele für Prüfungen, die abapLint bezüglich Clean-Code durchführt: Hinweis, wenn das EXPORTING-Schlüsselwort beim Aufruf einer Methode entfallen kann (EXPORTING can be omitted) Sicherstellen, dass sich zwischen dem letzten Befehl und dem abschließenden Punkt keine Leerzeichen befinden (Space before dot) NEW-Konstrukt gegenüber CREATE OBJECT bevorzugen (Use NEW) Andere hilfreiche Regeln: Vermeidung von Yoda-Ausdrücken (No Yoda Conditions): IF 0 = sy-subrc Sicherstellen, dass vor einem Call Transaction eine Berechtigungsprüfung erfolgt (Call Transaction Authority-Check) Inline-Deklarationen bevorzugen (Prefer Inline Declarations) Unerwünschte Anweisungen finden (Avoid use of certain statements). Beispielsweise kann die Prüfung eingeschaltet werden, damit Tabellendeklarationen WITH DEFAULT KEY gefunden werden. Die Anweisung ist bei Standardtabellen unsinnig. Es sollte besser WITH EMPTY KEY verwendet werden, wenn der Schlüssel nicht benötigt wird. Die verfügbaren Regeln (aktuell sind es 163) sind dokumentiert und können online auf dem abapLint-Spielplatz ausprobiert werden. Verwendung auf github abapLint integriert sich in die Oberfläche von github. Ein kleines unscheinbares „X“ zeigt an, wenn Prüfungen fehlgeschlagen sind: Sie können auf das X klicken und erhalten daraufhin eine Liste mit Details zu den fehlgeschlagenen Prüfungen: Über die Datei abaplint.json, welche im Hauptverzeichnis des Repositories liegen muss, kann eingestellt werden, welche Prüfungen ausgeführt werden sollen. Abgrenzung zu ABAP-Cleaner Das Open-Source-Projekt ABAP-Cleaner schlägt teilweise in die gleiche Kerbe wie abapLint. Es findet Konstrukte, die hinsichtlich des Clean-Code-Leitfadens nicht gewünscht sind und behebt diese auch gleich. Der ABAP-Cleaner ist ein reines Eclipse-Plugin und verfolgt damit einen anderen Ansatz als abapLint. Abgrenzung zu SAP-Code-Pal Das Open-Source-Projekt SAP-Code-Pal hat ebenfalls zum Ziel, die Code-Qualität zu verbessern. Das Projekt ist in Github verfügbar und importiert zusätzliche Prüfregeln in den Code-Inspector, die dort aktiviert werden können. abaplint.app Unter der Internetadresse https://abaplint.app/stats sind alle öffentlich verfügbaren ABAP-Repositories von github.com aufgelistet. Die App zeigt, welche zusätzlichen Möglichkeiten abapLint bietet. Zu jedem Repository werden die Issues aufgelistet, die apapLint gefunden hat. Der Zugriff mit der abapLint-App ist auf öffentliche Repositories kostenfrei. Wenn Sie die App für private Repositories nutzen möchten, ist eine Gebühr von derzeit $19 pro Benutzer und Monat notwendig, die über den Github-Account bezahlt werden muss. Zu den Repositories gibt es interessante Kennzahlen wie: Methodenlänge Methodenkomplexität Die Methodenlänge zeigt übersichtlich, wie viele Methoden es mit wie vielen Anweisungen gibt. Unter der Grafik werden die Methoden aufgelistet, absteigend nach der Anzahl der Zeilen. Das folgende Beispiel stammt aus dem Projekt ABAP2UI5: Es bietet sich bei Refaktorierungen an, bei den Methoden mit vielen Anweisungen zu beginnen, da hier die Wahrscheinlichkeit sehr hoch ist, dass einzelne Anweisungsblöcke ausgelagert werden können. Sehr interessant finde ich die Kompatibilitäts-Sicht. Hier wird dargestellt, mit welchen SAP-Releases der Quelltext kompatibel ist. Hier ein Beispiel vom : Unter dem Diagramm werden die jeweils zum Release inkompatiblen Anweisungen aufgeführt. Ebenfalls hilfreich finde ich die Übersicht Void Types, in der die verwendeten Datentypen aufgelistet werden. Zusätzlich werden hier Informationen darüber aufgezeigt, ob die Datentypen für Cloud freigegeben oder als veraltet gekennzeichnet sind. Wenn es einen offiziellen Nachfolger gibt, wird dieser ebenfalls aufgelistet. Hier ein Beispiel vom Coding unseres ABAP-Kochbuchs: Ebenfalls sehr aufschlussreich und ein guter Indikator, wie sich ein Projekt entwickelt, sind die Kennzahlen durchschnittliche Komplexität und durchschnittliche Methodenlänge. Der folgende Screenshot aus dem ABAP2XLSX-Projekt zeigt sehr schön, dass sich die durchschnittliche Methodenlänge im Laufe der Zeit verringert hat: Ein Indikator dafür, dass sich die Code-Qualität verbessert hat. Relativ neu hinzugekommen ist der Intra Class Call Graph, der ein Sequenzdiagramm innerhalb einer Methode aufzeigt. Hier erneut ein Beispiel aus dem ABAP2XLSX-Projekt: War das etwa schon alles? Mitnichten. Eigentlich fängt es hier erst an. Mit der abapLint-Initiative hat Lars ein eigenes Universum mit vielen Möglichkeiten geschaffen. So geht es weiter: Einbindung abapLint in VSCode ABAP-Anweisungsdiagramme zu jedem Befehl abapLint Transpiler: Ausführung von ABAP-Code im Browser mittels Javascript Der abapLint-Transpiler ermöglicht es, ABAP auf einem Raspberry Pi laufen zu lassen, oder dass ABAP als Sprache bei Exercism verfügbar ist. Wer sich für die weiteren Entwicklungen interessiert, sollte Lars auf LinkedIn folgen. Er postet hier in unregelmäßigen Abständen interessantes rund um ABAP-Programmierung.

zum Artikel gehen

Was bringt das neue Herr der Ringe: Geschichten aus Mittelerde Magic Set?

Neben der umfangreichen Welt von Magic: The Gathering mit den vielen Planes, gibt es immer mal wieder Produkte im sogenannten Universes Beyond (Jenseits des Multiversums). Diesmal ist es Der Herr der Ringe: Geschichten aus Mittelerde. In diesem neuen groß

zum Artikel gehen

Lohnt sich das Phyrexia: Alles wird eins Magic: The Gathering Set?

Mit Phyrexia: Alles wird eins (Phyrexia: All Will Be One) geht die große Story in Magic: The Gathering weiter, die mit Dominarias Bund begonnen und mit Krieg der Brüder fortgesetzt wurde. Und natürlich bringt das neue Magic-Set wieder viele neue spannende

zum Artikel gehen

Honor Magic Vs2: Vorstellung des neuen Foldables am 12. Oktober 2023

Honor hat mit dem Magic V2 bereits 2023 ein neues Foldable veröffentlicht. Doch am 12. Oktober 2023 soll bereits ein neueres Modell folgen: das Honor Magic Vs2. Dies hat der chinesische Hersteller bereits über das soziale Netzwerk Weibo bestätigt. Ebenfal

zum Artikel gehen

Lohnt sich das Marsch der Maschine Magic: The Gathering Set?

Mit Marsch der Maschine erscheint heute der Abschluss der großen Magic: The Gathering Story rund um die Invasion der Phyrexianer. Was mit Dominarias Bund vor mehr als einem halben Jahr begann und mit Krieg der Brüder und Phyrexia: Alles wird eins fortgese

zum Artikel gehen

Lohnen sich die Magic Commander Starter Decks 2022 für Einsteiger?

Am 9. Dezember 2022 sind die 5 neuen Magic: The Gathering Commander-Start Decks erschienen. Diese richten sich vor allem an Einsteiger in das Commander-Format. Was diese 5 Decks genau mitbringen, welche Farbidentitäten diese besitzen, wie der Wert der Dec

zum Artikel gehen