AutoIt Syntax-Prüf-Tool (Au3check)

Überprüft die Syntax des kompletten Sprachumfangs.
Alle benutzten Symbole werden ebenfalls überprüft:

Die Benutzung undefinierter Makros wird als Fehler gemeldet.

Au3Check gibt eine Warnung aus, wenn Variablen benutzt werden, bevor sie deklariert sind.
Es ist jedoch möglich, dass das Skript korrekt arbeitet, wie im folgenden Beispiel: @@SyntaxHighlighting@@ #include For $i = 1 To 2 If $i = 2 Then MsgBox($MB_OK, "OK", $sHello) Global $sHello = "Goodbye" Next @@End@@ Jedoch ist es schlechter Programmierstil und Au3Check wird eine Warnung erzeugen, falls $sHello vor der Deklaration verwendet wird.
Gleichfalls sollten globale Variablen niemals in Funktionen deklariert werden, sondern immer am Anfang des Skripts.
Wird eine Variable im Code vor der Funktion benutzt, erscheint eine Warnung.
Außerdem meldet Au3Check einen Fehler, wenn eine Variable benutzt wird, aber nie explizit oder implizit deklariert wurde.

Funktionen können aufgerufen werden, obwohl sie erst später definiert werden. Au3Check überprüft, ob alle Funktionen mit der korrekten Anzahl an Parametern aufgerufen werden.
Es überprüft auch, ob ByRef-Parameter mit Variablen aufgerufen werden (also keine Leerwerte oder Ausdrücke).
Schließlich werden undefinierte Funktionen gemeldet.

Es können bestimmte Richtlinien in das Skript eingefügt werden, um einige Warnungen bzw. Fehler zu verhindern.

Richtlinien
--------------
Diese Richtlinien verhindern, dass Au3Check Fehler meldet, wenn der Code korrekt ist, aber zu komplex für den Parser des Werkzeugs ist. Wie in den folgenden Beispielen gezeigt, werden sie üblicherweise verwendet, wenn Variablen implizit deklariert werden - wie z.B. in einer Funktionsdefinition oder durch einen String-Parameter - und sonst nicht erkannt werden. Insbesondere kann #forceref verwendet werden, um Warnungen zu verhindern, wo Parameter obligatorisch sind (z. B. in Windows Message Handler), aber nicht innerhalb der Funktion verwendet werden.

#ignorefunc funcname [, ...]

#ignorefunc kann für Plugin-Funktionen wie die folgenden verwendet werden:
@@SyntaxHighlighting@@ #include #ignorefunc Not_Defined_Func Local $vCallRet = Call('Not_Defined_Func') Local $iError = @error Local $iExtended = @extended MsgBox($MB_OK, 'Beispiel: Nicht definierte Funktion', '$vCallRet = ' & $vCallRet & _ ' @error = 0x' & Hex($iError) & ' @extended = 0x' & Hex($iExtended) & @CRLF) @@End@@

#forceref $varname [, ...]

#forceref kann innerhalb von Funktionen wie folgt verwendet werden:
@@SyntaxHighlighting@@ #include Func Test_NumParams($v1 = 0, $v2 = 0, $v3 = 0, $v4 = 0, $v5 = 0, $v6 = 0, $v7 = 0, $v8 = 0, $v9 = 0) #forceref $v1, $v2, $v3, $v4, $v5, $v6, $v7, $v8, $v9 Local $iVal = 0 For $i = 1 To @NumParams $iVal &= Eval("v" & $i) & " " Next MsgBox($MB_OK, "Beispiel: @NumParams", "@NumParams = " & @NumParams & @CRLF & @CRLF & $iVal) EndFunc ;==>Test_NumParams @@End@@

#forcedef $varname [, ...]

#forcedef kann nach Assign() Funktionen wie folgt verwendet werden:
@@SyntaxHighlighting@@ #include #include Local $n = Assign("y",BitOR($ASSIGN_FORCEGLOBAL, $ASSIGN_FORCELOCAL)) #forcedef $y MsgBox($MB_SYSTEMMODAL, "", "Ist $n gleich $y? " & ($n = $y)) ; $y ist identisch zu 3 @@End@@

Dieses Kommandozeilenprogramm kann durch ein Editor Add-On aktiviert werden. Es liegt im gleichen Verzeichnis wie die AutoIt3.exe.
Der SciTE4AutoIt3 Editor stellt diese Umgebung zur Verfügung.

Benutzung
--------

Au3Check [-q] [-d] [-w[-] n].. [-v[-] n].. [-I Include-Verzeichnis].. file.au3

-q : Still, nur Fehler/Warnungen ausgeben
-d : Wie Opt("MustDeclareVars", 1)
-w 1: Bereits eingebundene Datei {ein)
-w 2: Fehlendes #comments-end bzw. #ce {ein)
-w 3: Bereits deklarierte Variable {aus}
-w 4: Lokale Variablen werden in einem globalen Bereich verwende (aus)
-w 5: Lokale Variablen sind deklariert, werden aber nicht verwendet (aus)
-w 6: Warnung falls Dim verwendet wird (aus)
-w 7: Warnung falls Const oder Ausdrücke an ByRef Parameter übergeben werden (ein)
-I Include-Verzeichnis: zusätzliches Richtlinien in denen nach Include-Dateien gesucht werden soll

-v 1: Zeige Include-Pfade/-Dateien {aus}
-v 2: Zeige Lexer-Token {aus}
-v 3: zeige nicht dokumentierte UDFs und globale Variablen (aus)
Fehlercodes:
0: Erfolg (keine Fehler oder Warnungen)
1: nur Warnungen
2: Syntaxfehler
3: Verwendungs- oder Eingabefehler

Was wird nicht überprüft?
--------------------------
Im Wesentlichen Laufzeit-Informationen:
- Keine Überprüfungen werden fürArray-Dimensionen oder -Indizes durchgeführt. Diese können nur während der Laufzeit überprüft werden.
- Logische Fehler, ungültige Funktionsparameter und Division durch Null.