t3static - Tool für TYPO3 Code Qualität

t3static ist ein leistungsstarkes Tool, das speziell für die Verbesserung der Code-Qualität in TYPO3-Projekten entwickelt wurde. Es bietet eine umfassende Sammlung von Tools, um mehrere, projektspezifische TYPO3 Extensions auf einen einheitlichen und aktuellen Stand zu bringen. Dies hilft nicht nur dabei, den Code zu standardisieren und zu verbessern, sondern auch den Aufwand für ein Upgrade besser einzuschätzen.

In vielen TYPO3-Projekten gibt es mehrere sehr spezifische Extensions, die aus verschiedenen Quellen, von verschiedenen Entwicklern oder aus verschiedenen Stadien eines Projektes stammen. Dies führt oft zu einer uneinheitlichen Codebasis, was besonders bei der Zusammenarbeit mehrerer Programmierer problematisch sein kann. Das Ziel von t3static ist es, alle Extensions mit einheitlichen Tools und einer Konfiguration zu testen und zu fixen. Wo immer möglich, wurden auch Möglichkeiten zum automatischen Fixieren des Codes eingebaut, um den Entwicklungsprozess zu beschleunigen.

t3static enthält eine Vielzahl von Standard-Linter wie ESLint, StyleLint, sowie PHP-spezifische Tools wie php-cs-fixer. Darüber hinaus bietet es TYPO3-spezifische Tools wie Rector, Fractor oder TYPO3Scan, die speziell für die Anforderungen von TYPO3-Projekten entwickelt wurden.

Für einzelne TYPO3 Extensions gibt es ein sehr gutes Projekt zum Thema Code Quality und Tests: TYPO3 Tea. Dieses ist besonders empfehlenswert, wenn eine einzelne Erweiterung geprüft und getestet werden soll, um sie im TER zu veröffentlichen.

Architektur und Aufbau

t3static ist so konzipiert, dass es unabhängig vom eigentlichen Projektcode funktioniert. Dies macht es universell einsetzbar. Das Tool enthält eine eigene composer.json und package.json, die nur die für das Tool notwendigen Pakete enthalten. Diese müssen nicht im eigentlichen Projekt geladen werden, was dieses clean hält. Außerdem sind die Toolversionen für alle Extensions identisch.

Die Tools können entweder lokal über PHP und Node oder in einem Docker-Container aufgerufen werden. Die lokale Ausführung ist schneller, während die Ausführung im Docker-Container zuverlässiger ist, da hier die Versionen der Tools unabhängig von den PHP und Node Versionen des Host Rechners oder Projektes benutzt werden können.

Die lokale Ausführung (./t3static/run-local) benötigt auf meinem Rechner etwa 10 Sekunden für alle Tools und die News Extension, während die Ausführung im Docker-Container (./t3static/run-docker)  etwa 17 Sekunden dauert. Beide Optionen bieten jedoch eine hohe Flexibilität und Zuverlässigkeit.

Zusätzlich gibt es noch die Option --rebuild, um alle Tool-Versionen zu aktualisieren oder --list-tests, um alle aktuell verfügbaren Testmöglichkeiten anzuzeigen.

Beispiel für --list-tests

 

./t3static/run-docker --list-tests

 

Die Ausgabe enthält eine Liste aller verfügbaren Tests, darunter:

  • composer: Prüft die Composer-Konfiguration.
  • css, scss: Prüft CSS- und SCSS-Dateien.
  • css-fix, scss-fix: Fixt CSS- und SCSS-Dateien automatisch.
  • fractor, fractor-fix: TYPO3-spezifische Codeanalysen und fixes.
  • js, js-fix: Prüft und fFxt JavaScript-Dateien.
  • json, md, yaml: Prüft JSON-, Markdown- und YAML-Dateien.
  • php-cs, php-cs-fix: Prüft und fixiert PHP-Code nach Coding Standards.
  • rector, rector-fix: Führt Rector-Prüfungen durch und fixiert den Code automatisch.
  • typo3scan: Prüft TYPO3-spezifische Codequalität.
  • typoscript, tsconfig: Prüft Typoscript-Dateien.

Konfiguration und Nutzung

Die Tools sind einfach zu konfigurieren. t3static enthält eine .env.dist Datei, die 1:1 in eine .env Datei kopiert wird. Diese bietet einige Optionen zur Anpassung der Tests und Pakete.

Ohne Anpassung der .env Datei wird der Benutzer gefragt, welches Paket (Extension) er prüfen möchte:

 

./t3static/run-docker
custom .env not found. copy .env.dist to .env

==> PACKAGE_NAME is empty.

==> Please choose a folder:
  1) news_extended
  2) sitepackage
Enter number (1-2):

 

Ohne Angabe des Extension-Namens werden alle Unterordner von PACKAGE_PATH zur Auswahl angeboten. Wenn ein Paket ausgewählt ist, kann der gewünschte Test ausgewählt werden:

 

==> TEST_TYPE is empty.

==> Please choose a test:

  1) composer
  2) css
  3) css-fix
  4) fractor
  5) fractor-fix
  …
  Enter number (1-22): 

 

Beim Aufruf über die Konsole kann der Pfad zur Extension mit der -p Option und die Test(s) -t angegeben werden.

 

./t3static/run-docker -p sitepackage -t php-cs
./t3static/run-docker -p sitepackage -t php-cs, fractor, rector

 

Mit diesen Optionen ist man sehr flexibel und kann t3static auch in eigenen Bash-Skripten verwenden.