Skripts für erweiterte Linter-Prüfung

  • Freigeben Version: Zurich
  • Aktualisiert 31. Juli 2025
  • 3 Minuten Lesedauer
  • Linter-Prüfungsskripts helfen Ihnen beim Schreiben von Prüfungen, die nach Problemen in Skripts suchen. Wenn eine Linter-Prüfung für einen Datensatz ausgeführt wird, stellt sie eine abstrakte Syntaxstruktur für seinen Code bereit. Sie können diese abstrakte Syntaxstruktur verwenden, um Probleme mit dem Code zu analysieren, z. B. zu viele geschachtelte IF-Anweisungen oder Verwendungen der langsamen API in einer while-Schleife.

    Linter-Überprüfungsnutzung

    Linter-Prüfungen haben ein eindeutiges Objekt namens Rootknoten . Dies ist der Stammknoten der analysierten abstrakten Syntaxstruktur (AST) für das Skript des aktuellen Datensatzes. Dieses Objekt hat viele Funktionen, aber die Besuchen Funktion ist am wichtigsten. Die Besuchen Die Funktion verwendet eine Rückruffunktion als Parameter, der auf jedem Knoten der Struktur aufgerufen wird. Die Rückruffunktion verwendet dann einen Knoten als Parameter, der den aktuellen Knoten während der Iteration darstellt. Sie können „falsch“ von der Rückruffunktion zurückgeben, um die Iteration der Struktur vorzeitig zu beenden, andernfalls wird jeder Unterknoten in der Struktur des von Ihnen angerufenen Knotens besucht Besuchen Ein.

    Beispiel: Wenn Sie nach einer veralteten API suchen möchten, die aufgerufen wird BadFunction() . Im folgenden Beispiel können Sie einen Linter-Check mit einem Skript schreiben:
    (function(engine) {
    	engine.rootNode.visit(function(node) {
    		if (node.getTypeName() === "NAME" &&
    				node.getNameIdentifier() === "badFunction" &&
    				node.getParent().getTypeName() === "CALL") {
    			engine.finding.incrementWithNode(node);
    		}
    	});
    })(engine);
    Wenn Sie einen Scan mit dieser Linter-Prüfung ausführen, wird jeder Datensatz im Scan mit einem Skriptfeld überprüft. Wenn beispielsweise ein Datensatz in diesem Scan ein Skript hat, das wie folgt aussieht, greift der Scan ein Ergebnis für diesen Datensatz auf.
    /*
    badFunction()
    */
    // badFunction()
    function badFunction() {
    	return;
    }
    var GoodClass = Class.create();
    GoodClass.prototype = Object.extendsObject(Object, {
    	badFunction: function() {
    		// actually good
    	}
    });
    var badFunction = ["badFunction", "badFunction()"];
    badFunctionButSometimesGood();
    
    badFunction();

    Knotenfunktionen

    Im Folgenden finden Sie eine Liste der verfügbaren Funktionen, die für das Knotenobjekt aufgerufen werden können.
    • GetRootNode() : Ruft den Stammknoten der Struktur für diesen Knoten ab
    • GetParent() : Übergeordnetes Element dieses Knotens abrufen
    • GetLineNo() : Ruft den Standort der Leitungsnummer für diesen Knoten ab
    • GetColumnNo() : Ruft die Position der Spaltennummer für diesen Knoten ab
    • Zu Quelle () : Ruft die Quelle für diesen Knoten ab. Die Quelle basiert auf diesem Knoten und seinen untergeordneten Elementen
    • GetTypeName() : Ruft den Knotentypnamen dieses Knotens ab. Beispielsweise wird ein Funktionsaufruf in der Quelle als Knoten mit dem Typnamen „CALL“ tokenisiert.
      Hinweis:
      Die Werte von Node.getTypeName() Stammen aus verschiedenen Arten von Knoten in einer abstrakten Syntaxstruktur (AST). Die möglichen Werte stammen aus dem AST-Parser von Rhino selbst.
    • GetNameIdentifier() : Wenn der Knotentyp dieses Knotens „NAME“ ist, geben Sie den Bezeichner zurück, der der Zeichenfolgenwert des Namens selbst ist. Ein „NAME“-Knoten stellt einen einfachen Namen dar, der kein Stichwort ist, z. B. ein Funktionsname oder ein Variablenname.
      Hinweis:
      Wenn dieser Knoten kein NAMENKNOTEN ist, ist das Ergebnis null.
    • GetAbsolutePosition() : Ruft die absolute Position dieses Knotens ab. Die absolute Position ist die Anzahl der Zeichen vom Beginn des Skripts bis zu diesem Knoten
    • CompareTo(Sonstiges) : Vergleichen Sie diesen Knoten mit einem anderen Knoten. Der Knoten mit einer größeren absoluten Position und Länge ist im Vergleich größer. Sonstiges Ist ein Knoten, der mit diesem Knoten verglichen werden soll
    • Besuch (callbackFunction) : Besuchen Sie jeden Knoten in der Unterstruktur ab diesem Knoten, und führen Sie die angegebene Rückruffunktion auf jedem Knoten aus. CallbackFunction Ist eine Funktion, die auf jedem Knoten in der Unterstruktur dieses Knotens ausgeführt wird. Diese Rückruffunktion verwendet einen LinterCheckAstNode als Parameter, der der aufgerufene Knoten ist
    • DebugPrint() : Gibt eine Zeichenfolgendarstellung der abstrakten Syntaxstruktur ab diesem Knoten zurück. Jede Zeile enthält Informationen zu einem Knoten, und die Einrückung stellt die Hierarchiebeziehung zwischen den Knoten dar. Die Informationen in jeder Zeile sind wie folgt angeordnet
      1. Absolute Position
      2. Knotentypname
      3. Position relativ zum übergeordneten Element
      4. Länge
      5. Namensbezeichner (wenn ein NAMENSKNOTEN)
    Weitere Informationen finden Sie unter LinterCheckAstNode-API: Bereichsbezogen, Global .