2016-07-31 39 views
0

Ich möchte einige JavaScript-Code für syntaktische Korrektheit validieren, aber ohne eine bestimmte Codierung-Stil für den Benutzer zu erzwingen.Validieren Sie JavaScript-Code, ohne einen bestimmten Stil zu erzwingen

Meine erste Annäherung war, esvalidate zu verwenden, die mit esprima enthalten wird. Dies macht die Arbeit teilweise, da sie unerwartete Token erkennt, wie zum Beispiel:

constx foo = {}; 

Was sie tut nicht erkennen unter anderem Verwendung von Variablen ist, die nie erklärt worden, wie zum Beispiel:

const foox = { 
    bar() {} 
}; 

foo.bar(); 

Ein Tool wie eslint würde dies erkennen, aber es ist sehr schwierig, ESLint so zu konfigurieren, dass kein bestimmter Stil für den Benutzer durchgesetzt wird (ich sage nicht, dass es nicht möglich ist, ich sage nur, dass es seitdem sehr viel Arbeit ist Sie müssen jede einzelne Regel überprüfen und entscheiden, ob sie aktiviert und deaktiviert werden soll, und mit Hunderten von Regeln ist das ... ja, naja, eine Menge Arbeit).

Welche anderen Optionen habe ich? Wie kann ich den Code ohne diesen Aufwand validieren?

Übrigens: Was möchte ich hier validieren? Es ist nicht die Syntax (ich meine, syntaktisch, alles ist in Ordnung, es macht einfach keinen Sinn), aber es ist auch nicht die Semantik. Was wäre der richtige Begriff für diese Art von Schecks?

+0

Es gibt auch [jshint] (http://jshint.com/). Zumindest sind jshint und eslint in hohem Grade konfigurierbar. –

+0

Das stimmt, aber im Grunde habe ich hier das gleiche Problem (okay, es gibt in JSHint weniger Regeln als in ESLint). Aber vielleicht ist die Verwendung eines Linters der völlig falsche Ansatz? Bitte beachten Sie, dass ich nicht nach einem bestimmten Tool suche. Ich wäre eher daran interessiert, wie Sie das nennen, was ich gerne mache, damit ich selbst im Internet suchen kann. (Okay, tbh, wenn jemand mit einem Tool kommt, das genau das tut, was ich brauche, werde ich nicht "nein" sagen ;-)) –

+0

Validatoren wie eslint arbeiten, indem sie Regeln durchsetzen. Sie können entweder mit sehr strengen (Standard), etwas strengen (xo) oder einem benutzerdefinierten Satz von nicht so strengen Regeln gehen. Sie können Code auch mit babel transpilieren und es wird ungültigen Code werfen. –

Antwort

1

Vor Jahren Linters waren nur da, um den Stil Ihres Codes zu überprüfen. Heutzutage machen sie mehr, viel mehr. Sogar statische Analyse. ESLint is such a powerful tool and IMHO it is exactly what you're looking for.

Sie mögen denken, die Anfangskonfiguration kostspielig sein kann, aber als ESLint Seite sagt:

Keine Regeln standardmäßig aktiviert sind.

Außerdem having a consistent coding style across your time is very beneficial und wenn Sie und Ihr Team eine gemeinsame basline gefunden können Sie die .eslintrc Projekten gemeinsam.

Aktivieren der no-undef Regel und ein Plugin für Ihren IDE verwenden, wie one of those sollte Ihr Problem lösen -> statische Code-Analyse zur Entwicklungszeit :)

0

Um Ihre letzte Frage zu beantworten, denke ich, dass was Sie wollen, ist static analysis. Dies wird mit JavaScript im Allgemeinen aufgrund seiner dynamischen Natur und des Mangels an Typen und des relativen Mangels an Reife bei Werkzeugen schwieriger sein. Jahrzehntelange Arbeit hat man beispielsweise in statische Analysatoren für C geschrieben, und diese Arbeit wird sich nicht sofort auf andere Sprachen übertragen.

Etwas wie jshint ist vielleicht das, was Sie wollen, weil es das Ziel ist, Entwicklern zu helfen, "komplexe Programme zu schreiben, ohne sich über Tippfehler und Sprachfehler Gedanken machen zu müssen".

Hoffe, das hilft!

+0

Ich denke, das ist nicht 100% genau. Flow, TypeScript und auch ESLint zeigen, dass eine wirklich gute statische Analyse in JavaScript möglich ist. –

+0

Flow und Typescript sind Sprachen, die in Javascript umgewandelt werden; Sie können Haskell in Javascript umwandeln/kompilieren, aber das macht Javascript nicht zu einer stark typisierten Sprache. Es gibt einige großartige Werkzeuge für Javascript, aber statische Analysatoren sind im Vergleich zu statischen Analysatoren für Sprachen, die Jahrzehnte älter sind, sehr unreif. –

+0

Der Fluss transfert JS nicht, TS tut es. Wenn Sie jedoch während der Entwicklung den Sprachenservice von TypeScript verwenden, erhalten Sie einen statischen Analysator. Und natürlich sind statische Analysatoren, die viel länger auch ausgereifter sind. Auch nicht was ich gesagt habe. Ich wollte nur darauf hinweisen, dass es möglich ist, hilfreiche/gute statische Analysen in JavaScript durchzuführen. –

0

ESLint Für Sie zusammengestellt: Recommended rules have checkmark next to them keine stilistischen Regeln beinhalten. Sie können damit die Gültigkeit des Skripts überprüfen, ohne einen bestimmten Stil durchzusetzen. Zumindest ist es ein guter Ausgangspunkt, und Sie können die Regeln immer abstellen, die Sie nicht mögen.