Gibt es statische JavaScript-Analysetools? [geschlossen]


110

Ich bin es gewohnt, dass sich mein Compiler beschwert, wenn ich etwas Dummes wie einen Tippfehler auf einem Variablennamen mache, aber JavaScript hat die Angewohnheit, dies passieren zu lassen.

Gibt es statische Analysewerkzeuge für JavaScript?


1
Jetzt ist ein Days-Typoskript Ihr Freund - es unterstützt die implizite Javascript-Typprüfung und wenn Sie 100% gehen möchten, können Sie jsdoc3- oder Google-Closure-Annotationen schreiben und daraus werden Typen abgeleitet. Editoren wie vscode oder webstorm unterstützen es sofort: github.com/Microsoft/TypeScript/wiki/…
cancerbero

Antworten:


49

Ich bin damit einverstanden, dass JSLint der beste Ausgangspunkt ist. Beachten Sie, dass sich JavaScript Lint von JSLint unterscheidet . Ich würde auch vorschlagen, JSure auszuprobieren , das in meinen eingeschränkten Tests besser als beide war, wenn auch mit einigen Ecken und Kanten in der Implementierung - die Intel Mac-Version stürzte beim Start für mich ab, obwohl die PowerPC-Version auch unter Intel einwandfrei lief. und die Linux-Version lief auch gut. (Der Entwickler, Berke Durak, sagte, er würde sich bei mir melden, wenn dies behoben war, aber ich habe nichts von ihm gehört.)

Erwarten Sie von der statischen JavaScript-Analyse nicht so viel wie von einem guten C-Checker. Wie Durak mir sagte, "ist jede nicht triviale Analyse aufgrund der Dynamik von Javascript sehr schwierig."

(Ein weiterer, noch unklarerer Fehler nur für Mac, diesmal mit dem Konfabulator-Widget von JSLint: Durch Ziehen eines BBEdit-Dokumentsymbols auf das Widget wird das Dokument in den Papierkorb verschoben. Der Entwickler Douglas Crockford hatte das Widget auf einem Mac nicht ausprobiert.)

10. August 2009: Simon Holm Jensen präsentierte heute auf dem Static Analysis Symposium einen Artikel über TAJS: Type Analyzer für JavaScript , der von Anders Møller und Peter Thiemann verfasst wurde. In der Zeitung werden die oben genannten Tools nicht erwähnt, aber Jensen sagte mir, er habe sich einige davon angesehen und sei nicht beeindruckt. Der Code für TAJS sollte irgendwann in diesem Sommer verfügbar sein.


2
@UpTheCreek: JSLint ist auf GitHub verfügbar.
Dave Swersky

@ Dave oh richtig, das ist großartig :)
UpTheCreek

5
Der Quellcode für TAJS ist jetzt verfügbar.
Rich Dougherty

57

AKTUALISIERTE ANTWORT, 2017: Ja. Verwenden Sie ESLint. http://eslint.org


Neben JSLint (bereits in der Antwort von Flash Sheridan erwähnt ) und dem Closure-Compiler (zuvor in der Antwort von awhyte erwähnt ) habe ich auch viel Nutzen aus der Ausführung von JSHint und PHP CodeSniffer gezogen . Ab 2012 sind alle vier Tools kostenlos Open Source und haben eine große und aktive Entwickler-Community hinter sich. Sie unterscheiden sich jeweils ein bisschen (und ich denke, sie ergänzen sich) in der Art der Überprüfungen, die sie durchführen:

JSLint wurde entwickelt und ist immer noch Douglas Crockfords persönliches Flusenwerkzeug. Es wird mit einem großartigen Standard-Regelsatz geliefert - Crockfords eigenen, der ständig aktualisiert wird, während er weiterhin mehr über JavaScript und seine Fallstricke erfährt . JSLint hat eine hohe Meinung und dies wird allgemein als eine gute Sache angesehen. Daher können Sie (absichtlich) eine begrenzte Menge tun, um einzelne Regeln zu konfigurieren oder zu deaktivieren. Dies kann es jedoch schwierig machen, JSLint auf Legacy-Code anzuwenden.

JSHint ist JSLint sehr ähnlich (tatsächlich begann es als JSLint-Fork), aber es ist einfacher / möglich , alle JSLint-Prüfungen über Befehlszeilenoptionen oder über eine Datei zu konfigurieren oder zu deaktivieren.jshintrc .

Mir gefällt besonders, dass ich JSHint anweisen kann, alle Fehler in einer Datei zu melden , auch wenn es Hunderte von Fehlern gibt. Im Gegensatz dazu wird JSLint, obwohl es über eine maxerrKonfigurationsoption verfügt, im Allgemeinen relativ früh gerettet, wenn versucht wird, Dateien zu verarbeiten, die eine große Anzahl von Fehlern enthalten.

Der Closure Compiler ist äußerst nützlich, dass, wenn der Code nicht mit Closure kompilieren, können Sie sehr sicher fühlen , sagte Code ist tief in irgendeiner Art und Weise grundlegende abgespritzt. Die Closure-Kompilierung ist möglicherweise das, was in der JS-Welt einer "Interpreter" -Syntaxprüfung wie php -loder am nächsten kommtruby -c

Closure warnt Sie auch vor möglichen Problemen wie fehlenden Parametern und nicht deklarierten oder neu definierten Variablen. Wenn Sie die erwarteten Warnungen nicht sehen, erhöhen Sie die Warnstufe, indem Sie Closure mit der Option aufrufen--warning_level VERBOSE

PHP CodeSniffer kann sowohl JavaScript als auch PHP und CSS analysieren . CodeSniffer wird mit verschiedenen Codierungsstandards ausgeliefert (z. B. phpcs -ium sie zu sehen), die viele nützliche Sniffs für JavaScript-Code enthalten, einschließlich Überprüfungen gegen Inline-Kontrollstrukturen und überflüssige Leerzeichen .

Hier ist eine Liste der JavaScript-Sniffs, die in PHP CodeSniffer ab Version 1.3.6 verfügbar sind, und hier ist ein benutzerdefinierter Regelsatz, mit dem Sie alle auf einmal ausführen können. Mit benutzerdefinierten Regelsätzen können Sie ganz einfach die Regeln auswählen, die Sie anwenden möchten. Und Sie können sogar Ihre eigenen Sniffs schreiben, wenn Sie einen bestimmten "Hausstil" erzwingen möchten, der nicht sofort unterstützt wird. Afaik CodeSniffer ist das einzige der vier hier genannten Tools, das die Anpassung und Erstellung neuer statischer Analyseregeln unterstützt. Eine Einschränkung: CodeSniffer ist auch das am langsamsten laufende der genannten Tools.


2
Die Copy-Paste-Erkennung für JavaScript-Code ist jetzt über CPD verfügbar. Meines Wissens ist dies das erste robuste Open Source Code-Duplizierungswerkzeug für JavaScript! pmd.sourceforge.net und siehe auch die Frage "Gibt es ein CPD-ähnliches Tool für Javascript?" stackoverflow.com/a/13745190/55478
Noah Sussman

20

Googles JS-Compiler "Closure" erzeugt zur Kompilierungszeit konfigurierbare Warnungen und Fehler. Es findet definitiv falsch geschriebene Variablen und Methoden sowie Aritätsfehler. Wenn Sie bereit sind, JsDoc nach Closure-Art zu schreiben, kann dies auch viel mit Typinformationen zu tun haben.

Das YUI-Tool "Compressor" kann ebenfalls Warnungen erzeugen, hat es jedoch noch nicht ausprobiert.

Ich hatte nicht viel Glück mit der Aptana IDE, die auf Eclipse basiert, aber andere Leute mögen es. Siehe Diskussion über Stapelüberlauf von JS-IDEs.

Die IntelliJ IDE, die bei meiner letzten Überprüfung nicht kostenlos ist, bietet eine hervorragende JS-Unterstützung. Während der Eingabe werden falsch geschriebene Variablen und Methoden erkannt und hervorgehoben. Es ist auch automatisch vervollständigt.


11

Zusammenfassend sind JSLint, JSHint, Plato, ESLint und Google Closure-Linter die verfügbaren Tools. Beim Ausprobieren von Google Closure-Linter für Windows traten Installationsprobleme auf. Auf der Webseite wird jedoch erwähnt, dass die Unterstützung für Windows experimentell ist. Ich habe ein anderes Tool gefunden und ausprobiert, das gut funktioniert. Hier ist der Link dafür: http://esprima.org/

Dies ist auch der Github-Link für das Tool Esprima: https://github.com/ariya/esprima


7

In diesem Wiki finden Sie einige Tools für die statische JavaScript-Code-Analyse .

Ein Tool im Wiki, das in diesem Beitrag jedoch nicht erwähnt wird, ist DeepScan . Der Fokus liegt darauf, Laufzeitfehler und Qualitätsprobleme zu finden, anstatt Konventionen von Lintern zu codieren. Es umfasst auch TypeScript, React und Vue.js.

Sie können es für Ihr GitHub-Projekt ausprobieren.



4

Mehr Sicherheit als Allzweckliste finden Sie im Mozilla-Wiki unter Sicherheits- / B2G- / JavaScript-Code-Analyse

In diesem Dokument werden JavaScript-Code-Analyse-Tools gesammelt, die für die Aufnahme in kommende Mozilla-Projekte oder für den internen Gebrauch geeignet sind.

Es gibt auch mindestens ein kommerzielles Produkt, das Sicherheitsanalysen durchführt: Burp erhält neue JavaScript-Analysefunktionen

Die neueste Version von Burp enthält eine neue Engine zur statischen Analyse von JavaScript-Code. Auf diese Weise kann Burp Scanner eine Reihe neuer Sicherheitslücken melden, darunter:

  • DOM-basiertes XSS
  • JavaScript-Injektion
  • Clientseitige SQL-Injection
  • WebSocket-Hijacking
  • Lokale Dateipfadmanipulation
  • DOM-basierte offene Umleitung
  • Cookie-Manipulation
  • Manipulation des Ajax-Anforderungsheaders
  • DOM-basierter Denial-of-Service
  • Manipulation von Webnachrichten
  • Manipulation des HTML5-Speichers

4

Im kommerziellen Bereich unterstützt Coverity Static Analysis die Analyse von JavaScript ab Version 7.7 (Mitte 2015). In Bezug auf Ihre spezielle Anfrage zu Tippfehlern findet mein Lieblingsprojekt in der neuesten Version (8.0, Anfang 2016) Tippfehler in den Namen der Programmelemente.

Akzeptieren Sie als Hauptentwickler des Projekts bitte meinen schamlosen Plug: Obwohl noch nicht so ausgereift wie die verehrte C / C ++ - Analyse die JavaScript-Analyse von Coverity , teilt sie weitgehend dieselbe Engine mit dem gleichen Fokus auf das Auffinden hochwertiger Fehler mit einem niedrigen Wert Rate falsch positiver Fehlerberichte. Wir konzentrieren uns verstärkt auf das Auffinden von Sicherheitsmängeln in JavaScript (und anderen Sprachen) sowie auf das Auffinden allgemeiner Programmierfehler.

Hier sind einige Tippfehler (genauer Tippfehler, der als Übung für den Leser übrig bleibt, um zu betonen, wie leicht diese übersehen werden können):

merge.js: (stabiler Link) (letzte Überarbeitung)

befehle-pakete-abfrage.js: (stabiler link) (letzte überarbeitung)

series-pie-tests.js: (stabiler Link) (letzte Überarbeitung)

Outline_case.js: (stabiler Link) (letzte Überarbeitung)


3

Ich mag Jslint für so etwas ...


Cool. Ich fand eine Eclipse - Plugin für JSLint bei rockstarapps.com/joomla-1.5.8/products/... , die auch ganz gut aussieht. Beachten Sie, dass eine Installation von der 'Eclipse Update-Site für die Beta-Version von jsLex 1.2.2' erforderlich ist, um die JSLint-Funktionalität zu erhalten.
Mat


2

JSAnalyse wurde gerade auf Codeplex veröffentlicht. Es ist ein Tool, das die Abhängigkeiten zwischen Javascript-Dateien analysiert. Sie können sogar die zulässigen Abhängigkeiten definieren und JSAnalysis prüft, ob die definierten Regeln erfüllt sind oder nicht. Dies ermöglicht es, die Javascript-Abhängigkeiten auch in großen Projekten im Auge zu behalten und eine saubere Architektur zu haben.

JSAnalyse kann als Befehlszeilentool ausgeführt oder über das Visual Studio-Layer-Diagramm konfiguriert werden. Es ist auch einfach, in den Build zu integrieren. Mit gated check-ins können Sie die Abhängigkeiten unter Kontrolle halten.

http://jsanalyse.codeplex.com/


1

Unser SD ECMAScript CloneDR ist ein Tool zum Auffinden exakter und nahezu fehlerhafter Kopien von dupliziertem Code in großen JavaScript-Quellcodebasen.

Es verwendet die Sprachsyntax, um die Erkennung zu steuern, sodass Klone trotz Formatänderungen, eingefügten / gelöschten Kommentaren, umbenannten Variablen und sogar einiger eingefügter / gelöschter Anweisungen gefunden werden.

Auf der Website wird ein Beispiel für CloneDR in der Closure-Bibliothek von Google ausgeführt.


hat jemand diesen schon ausprobiert? Keine Download- oder Bestellschaltflächen gefunden ...
Sven Hecht

... Seit Januar 2011 ... gibt es einen Download-Link, über den Sie eine Evaluierungskopie von CloneDR für JavaScript (oder eine Reihe anderer Sprachen) zum Spielen erhalten können.
Ira Baxter

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.