Hallo zusammen,
ich möchte euch heute ein neues Open-Source-Projekt von mir vorstellen, das die statische Code- und Scoping-Analyse für AutoIt 3 ergänzt: au3Mythos.
Motivation & Hintergrund
Inspiriert von den aktuellen Diskussionen über statische Codeanalyse und Fehlererkennung in Software, habe ich mich gefragt, wie weit man die klassische statische und heuristische Analyse für AutoIt 3 treiben kann, um typische Laufzeit- und Gültigkeitsfehler bereits vor dem Ausführen des Codes zu finden.
Das Ergebnis ist au3Mythos – ein mächtiges Debug- und Analysewerkzeug, das sich an alle Entwickler richtet, die die Stabilität und Code-Hygiene ihrer AutoIt-Projekte pragmatisch erhöhen möchten.
Was ist au3Mythos?
au3Mythos ist ein statischer Code-Analysator und Compiler-Wrapper. Er lässt sich als Drop-in-Ersatz für die standardmäßige Au3Check.exe konfigurieren und integriert sich nahtlos in Editoren wie SciTE, ISN AutoIt Studio oder VS Code, wenn diese schon die originale au3check.exe unterstützen.
Sobald eine Syntaxprüfung gestartet wird (z. B. per Ctrl+F5 in SciTE), fängt der Wrapper den Aufruf ab. Über ein Regelwerk wird entschieden, ob der Code durch den erweiterten Scoping-Analyzer (mythos) läuft oder direkt an die originale Prüfung (original) übergeben wird.
Was wird zusätzlich geprüft?
Während der originale Au3Check hervorragende Arbeit bei der Syntaxvalidierung leistet, konzentriert sich au3Mythos zusätzlich bis in die Tiefe auf logische Scoping-Probleme und potenzielle Laufzeitfehler:
- Variable Block-Scoping Bugs: Variablen, die innerhalb eines Kontrollblocks (If, For, Select) deklariert, aber außerhalb dieses Blocks referenziert werden.
- Unsafe Return Dereferencing: Direktes Indizieren von Rückgabewerten von Funktionen (z. B. _MyFunc()[0]) ohne vorherige Prüfung (z. B. mit IsArray() oder @error).
- @error- und @extended-Überschreibungen: Erkennung von Zuweisungen oder Funktionsaufrufen, die das @error-Register vor einer Prüfung überschreiben.
- Array-Dimensionen: Plausibilitätsprüfungen bei statisch erkennbaren Array-Dimensionen und Index-Zugriffen.
- Ungebrauchte Variablen & doppelte Deklarationen innerhalb verschachtelter Scopes.
Komponenten
- Settings Manager GUI: Ein Win32-GUI, um Routing-Regeln, Profile und Warnstufen (-w 1 bis -w 7) zu verwalten. Der besondere Clou mit dieser flexiblen Konfigurationsmöglichkeit ist: Der Prüflauf kann mit selbst gewählten Parametern durchgeführt werden, egal welche Einstellungen das aufrufende Programm (wie SciTE) fest einprogrammiert hat – ohne dass man irgendwo eine Zeile Code oder Editor-Konfigurationen ändern muss.
- Installer & Uninstaller: Integriert den Wrapper und sichert die originale Au3Check.exe als Au3Check_Original.exe. Bei der Deinstallation wird der Originalzustand rückstandslos wiederhergestellt.
- Präzises Line-Mapping: Schon mal vor dem Problem gestanden, dass eine AutoIt-Fehlermeldung eine Zeilennummer der zusammengeführten/preprocessed Datei ausgibt und du keine Ahnung hast, welche Zeile in welcher deiner vielen Include-Quelldateien das eigentlich ist? au3Mythos übersetzt diese Zeilenangaben präzise zurück in die Original-Quelldatei und die dortige tatsächliche Zeilennummer.
GitHub & Open Source
Das Projekt ist Open Source unter der MIT-Lizenz:
- GitHub-Repository: Blowcake/mythos-secure-static-and-code-analyzer (Wenn euch das Projekt gefällt, freue ich mich natürlich riesig über einen Stern ⭐ auf GitHub!)
Downloads & Changelog
- Version 1.1.0 (Enthält vorkompilierte Standalone-Dateien – keine Python-Installation erforderlich!)
Hinweis: Dies ist ein unabhängiges Open-Source-Projekt und steht in keiner Verbindung zum offiziellen AutoIt-Entwicklerteam.
Da ich das Ganze bisher alleine im stillen Kämmerlein entwickelt und getestet habe, würde ich mich riesig über euer Feedback freuen! Jede Rückmeldung zu bisher nicht entdeckten Fehlern, Inkompatibilitäten oder Verbesserungsvorschlägen ist extrem willkommen. Ich unterstütze auch gerne jeden dabei, die mächtige JSON-Schnittstelle in eigene Projekte zu integrieren, um das Maximum an Unterstützung aus dem Tool herauszuholen.
Viele Grüße,
Harald Frank