Variablendeklaration automatisiert - Opt("MustDeclareVars", 1)

  • Hi,
    beim Skriptschreiben geht es mir immer so, dass ich mit einem Grundgerüst anfange und es dann nach und nach immer mehr wird :)
    Somit ist es oft nicht richtig überschaubar, ob ich die erforderlichen Variablen deklariert habe (was ich versuche immer zu machen).
    Ich habe jetzt ein Skript geschrieben, dass alle Skriptvariablen, die keine Funktionsparameter oder Lokale Funktionsvariablen sind und nicht zu den AutoIt-Konstanten gehören, als Globale Variablen deklariert werden.
    Variablen in Kommentarzeilen oder -blöcken werden ignoriert.
    Es werden wahlweise die Beta- oder Prod-Definitionen herangezogen.
    Bestehende Deklarationen (Dim / Global) bleiben erhalten.
    Es wird nach den Includes und Opt (sofern vorhanden) "Opt("MustDeclareVars", 1)" eingefügt und anschließend werden alle gefundenen, bisher nicht deklarierten Variablen als Global eingeschrieben.
    Das Skript ist somit eine Hilfe um im Nachgang, ohne selbst suchen zu müssen, noch fehlende Variablen zu deklarieren.


    Edit: Zählervariablen in For-Schleifen sind zwar von Haus aus Lokale Variablen - aber eine Globale Deklaration schadet nicht :D und der Aufwand um diese nicht zu deklarieren, wäre extrem hoch - deshalb sind sie hier mit vorhanden.


    Edit 13.09.2008
    Einen Fehler in der Konstantenermittlung korrigiert.


  • Hi,
    diese Version ist speziell dafür, um während des Skriptens in SciTE mal schnell per HotKey die Variablendeklaration zu überprüfen/auszuführen.
    Kopiert die Datei SetVarsDeclaredCurrentFile.au3 an einen Ort eurer Wahl (ich hab dafür extra einen Ordner in SciTE angelegt).
    Nun in der SciTEUser.properties(in SciTE: <Optionen> <Benutzer-Einstellungen öffnen>) einen Eintrag erstellen.
    Der Eintrag muß unbedingt vor diesem Block erfolgen:

    Code
    1. #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
    2. # START: DO NOT CHANGE ANYTHING AFTER THIS LINE #-#-#-#-#
    3. # Created by SciTEConfig
    4. #------------------------------------------------------------


    Wenn ihr noch keinen Eintrag dort habt, beginnt mit der Nummer 36 statt wie hier 42. Ansonsten einfach fortlaufend nummerieren.

    Code
    1. # 42 DeclareVars
    2. command.42.*.au3="$(autoit3dir)\AutoIt3.exe" "$(SciteDefaultHome)\OtherTools\SetVarsDeclaredCurrentFile.au3" "$(FilePath)" "Prod"
    3. command.name.42.*.au3=Declare Vars
    4. command.save.before.42.*.au3=1
    5. command.is.filter.42.*.au3=1
    6. command.shortcut.42.*.au3=Ctrl+Shift+V


    In der ersten command-Zeile muß nach dem AutoIt-Pfad der Pfad der Datei SetVarsDeclaredCurrentFile.au3 folgen.
    Der erste Parameter "$(FilePath)" übergibt den Dateipfad der au3-Datei, von der aus in SciTE der Aufruf erfolgt.
    Der zweite Parameter "Prod" ist nicht erforderlich, wenn die Prod benutzt wird. Verwendet euer Skript aber die Beta, so muß der Parameter "Beta" übergeben werden!
    Den ShortCut könnt ihr natürlich frei wählen (solang er noch nicht belegt ist ;) ).


    Nun nur in einem beliebigen au3-Skript per Shortcut aufrufen und die Variablendeklaration erfolgt. :rolleyes:



    Edit 13.09.08:
    Hatte einen Schleifenfehler und dadurch nicht alle Konstanten erfaßt - aber nun korrigiert. ;-)

  • Hi


    Sehr schön :rock:
    sowas hab ich schon gesucht (und leider damals übersehen ;))


    Ich hab das jetzt nicht extra überprüft, aber ich nehme mal an, daß du alle Variablen, welche in einer Global/Local/Dim-Zeile stehen als schon deklariert betrachtest...
    In folgender Zeile wird jedoch nur $AccelKeys deklariert:
    Dim $AccelKeys[5][2]=[["{UP}", $AccUp], ["{DOWN}", $AccDown], ["{TAB}", $AccTab], ["+{TAB}", $AccSTab], ["{Enter}", $AccEnter]]
    alle weiteren nicht, trotzdem von deinem Script übersprungen.


    Solche Fälle sollten aber eher die Ausnahme sein;
    Aber wenn du Lust und Zeit hast, dann könntest du dieses Feature noch hinzufügen... ^^


    lgE