AutoIt Syntax Checker (Au3Check)

Проверяется весь синтаксис языка.
Проверяются все символы:

Сообщается об ошибке при использовании макросов неизвестных интерпретатору.

Au3Check выдаёт предупреждение если переменные используются до их объявления.
Вполне возможно, что программа при этом работает корректно, как в следующем примере:

For $i = 1 To 2
    If $i = 2 Then MsgBox(0, "OK", $sHello)
    Global $sHello = "До свидания"
Next

Однако, это плохой стиль программирования, и Au3Check будет выдавать предупреждения что $sHello возможно используется до своего объявления.
Кроме того, глобальные переменные никогда не должны объявляться внутри функции, а должны быть объявленными в начале скрипта.
Если переменная используется в коде выше своего объявления, то выдается предупреждение.
Au3Check выдаёт ошибку если переменная использовалась, но никогда не объявлялась, явно или неявно.

Функции могут находится в скрипте ниже или выше точки их вызова. Au3Check проверяет чтобы все функции были вызваны с верным количеством параметров.
Проверяет, чтобы параметры с ByRef были использованы только с переменными (не явные значения или выражения).
Также сообщается об отсутствии вызываемой функции.

Определённые директивы могут содержаться в скрипте для управления некоторыми предупреждениями/ошибками, которых нельзя избежать.

Директивы

#ignorefunc funcname [, ...]

Может быть использовано для пользовательской функции, как в следующем примере:

#ignoreFunc PluginFunc
Local $hPluginDLL = PluginOpen("example.dll")
PluginFunc(0.1, 0.2) ; вызывается пользовательская функция "PluginFunc" с двумя параметрами
PluginClose($hPluginDLL)



#forceref $varname [, ...]

#forceref может использоваться внутри функции:

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(0, "Пример для @NumParams", "@NumParams = " & @NumParams & @CRLF & @CRLF & $iVal)
EndFunc   ;==>Test_NumParams



#forcedef $varname [, ...]

#forcedef может использоваться для игнорирования переменных, объявленных с помощью функции Assign():

Local $n = Assign("y", 3) ; объявление переменной $y = 3
#forcedef $y
$n = $y ;===> $y = 3


Эта утилита с поддержкой командной строки и может быть вызвана как дополнение к редактору скриптов. Расположено в той же директории что и AutoIt3.exe.
SciTE4AutoIt3 редактор предоставляет такую среду.


Применение

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

-q : тихий режим (только ошибки/предупреждения)
-d : как Opt("MustDeclareVars", 1)
-w 1: файл уже включён (on)
-w 2: отсутствует #comments-end (on)
-w 3: переменная уже объявлена (off)
-w 4: локальная переменная используется в глобальной области видимости (off)
-w 5: локальная переменная объявлена, но не используется (off)
-w 6: предупреждение при использовании Dim (off)
-w 7: предупреждение при вводе Const или выражения в ByRef параметре(ах) (on)
-I dir: дополнительные каталоги для поиска включаемых файлов

-v 1: показать включаемые директории/файлы (off)
-v 2: показать лексические маркеры (off)
-v 3: показать неиспользуемые пользовательские функции и глобальные переменные (off)

Код завершения:
0: успешно: нет ошибок или предупреждений
1: только предупреждения
2: ошибки синтаксиса
3: ошибка использования или ввода

Что не проверяется?
В основном не проверяется информация выполнения:
- Не проверяется размерность массива, или индексов. Это может быть сделано только во время выполнения.
- Не проверяется логические ошибки, неверные параметры функций и деление на ноль.