115 votes

Existe-t-il des outils d'analyse statique JavaScript ?

J'ai l'habitude de voir mon compilateur se plaindre lorsque je fais quelque chose de stupide comme une faute de frappe sur un nom de variable, mais JavaScript a l'habitude de laisser passer cela.

Existe-t-il des outils d'analyse statique pour JavaScript ?

1 votes

Aujourd'hui, typescript est votre ami - il supporte la vérification implicite des types en javascript et si vous voulez aller à 100%, vous pouvez écrire des annotations jsdoc3 ou google closure et il déduira les types à partir de là. Des éditeurs comme vscode ou webstorm le supportent d'emblée : github.com/Microsoft/TypeScript/wiki/

57voto

Noah Sussman Points 2512

RÉPONSE ACTUALISÉE, 2017 : Oui. Utilisez ESLint. http://eslint.org


En plus de JSLint (déjà mentionné dans Réponse de Flash Sheridan ) et le Compilateur de fermetures (précédemment mentionné dans La réponse de awhyte ) J'ai également tiré beaucoup de bénéfices de la course à pied. JSHint y PHP CodeSniffer . Depuis 2012, ces quatre outils sont gratuits et open-source et bénéficient d'une communauté de développeurs importante et active. Ils sont tous un peu différents (et, je pense, complémentaires) dans les types de vérifications qu'ils effectuent :

JSLint a été conçu pour être, et est toujours, l'outil de linting personnel de Douglas Crockford. Il est livré avec un grand default ruleset -- le propre de Crockford, constamment mis à jour comme il continue d'apprendre sur JavaScript et ses pièges. JSLint est très opiniâtre et c'est généralement considéré comme une bonne chose. Il y a donc (intentionnellement) un quantité limitée vous pouvez faire pour configurer ou désactiver les règles individuelles. Mais cela peut rendre difficile l'application de JSLint au code existant.

JSHint est très similaire à JSLint (en fait, il a commencé la vie que JSLint fork) mais il est plus facile/possible de configurer ou désactiver toutes les vérifications de JSLint via des options de ligne de commande ou via un fichier .jshintrc fichier .

J'aime particulièrement le fait que je puisse dire à JSHint de rapporter todo des erreurs dans un fichier, même s'il y a des centaines d'erreurs. En revanche, bien que JSLint dispose d'une fonction maxerr il s'arrête généralement relativement tôt lorsqu'il tente de traiter des fichiers contenant un grand nombre d'erreurs.

Le compilateur Closure est extrêmement utile dans la mesure où, si le code ne le fera pas compiler avec Closure, vous pouvez être certain que ledit code es profondément malmené de manière fondamentale. La compilation des fermetures est probablement ce qui se rapproche le plus, dans le monde des JS, d'un contrôle syntaxique de type "interpréteur". php -l o ruby -c

Fermeture également vous avertit des problèmes potentiels tels que les paramètres manquants et les variables non déclarées ou redéfinies. Si vous ne voyez pas les avertissements auxquels vous vous attendez, essayez d'augmenter le niveau d'avertissement en invoquant Closure avec une option de --warning_level VERBOSE

PHP CodeSniffer peut analyser le JavaScript ainsi que PHP et CSS. CodeSniffer est livré avec plusieurs normes de codage différentes, (par exemple phpcs -i pour les voir) qui comprennent de nombreuses vérifications utiles pour le code JavaScript, y compris des vérifications contre les éléments suivants structures de contrôle en ligne y espaces blancs superflus .

Voici un liste des sniffs JavaScript disponible dans PHP CodeSniffer à partir de la version 1.3.6 et voici une des règles personnalisées qui vous permettraient de les exécuter tous en même temps. En utilisant des jeux de règles personnalisés, il est facile de choisir les règles que vous voulez appliquer. Et vous pouvez même écrivez vos propres sniffs si vous voulez imposer un "style maison" particulier qui n'est pas supporté par la boîte. À ma connaissance, CodeSniffer est le seul des quatre outils mentionnés ici qui prend en charge la personnalisation et la création de nouvelles règles d'analyse statique. Une mise en garde cependant : CodeSniffer est aussi le plus lent de tous les outils mentionnés.

2 votes

La détection du copier-coller pour le code JavaScript est maintenant disponible via CPD. À ma connaissance, il s'agit du premier outil de duplication de code open source robuste pour JavaScript ! pmd.sourceforge.net et voir aussi la question "Existe-t-il un outil de type CPD pour le javascript ? stackoverflow.com/a/13745190/55478

51voto

Flash Sheridan Points 1013

Je suis d'accord pour dire que JSLint est le meilleur endroit pour commencer. Notez que JavaScript Lint est distinct de JSLint . Je vous suggère également de consulter JSure qui, dans mes tests limités, a fait mieux que l'un ou l'autre, bien qu'avec des bords rugueux dans l'implémentation - la version Mac Intel plantait au démarrage pour moi, bien que la version PowerPC fonctionnait bien même sur Intel, et la version Linux fonctionnait bien aussi. (Le développeur, Berke Durak, a dit qu'il me recontacterait lorsque cela serait corrigé, mais je n'ai pas eu de nouvelles de sa part).

N'attendez pas autant d'une analyse statique JavaScript que d'un bon vérificateur C. Comme Durak me l'a dit, "toute analyse non triviale est très difficile en raison de la nature dynamique de JavaScript".

(Un autre bogue encore plus obscur, réservé aux Mac, cette fois avec le widget Konfabulator de JSLint : Faire glisser l'icône d'un document BBEdit sur le widget déplace le document dans la corbeille. Le développeur, Douglas Crockford, n'avait pas essayé le widget sur un Mac).

10 août 2009 : Aujourd'hui, au Symposium sur l'analyse statique Simon Holm Jensen a présenté un document sur le thème suivant TAJS : Analyseur de type pour JavaScript écrit avec Anders Møller et Peter Thiemann. L'article ne mentionne pas les outils ci-dessus, mais Jensen m'a dit qu'il avait regardé certains d'entre eux et n'avait pas été impressionné. Le code de TAJS devrait être disponible cet été.

2 votes

@UpTheCreek : JSLint est disponible sur GitHub.

0 votes

@Dave oh right, that's great :)

5 votes

Le code source de TAJS est désormais disponible.

20voto

awhyte Points 191

Le compilateur JS "Closure" de Google produit des avertissements et des erreurs configurables au moment de la compilation. Il détecte les variables et les méthodes mal orthographiées, ainsi que les erreurs d'arité. Si vous êtes prêt à écrire JsDoc à la manière de Closure, il peut aussi faire beaucoup avec les informations de type.

L'outil YUI "Compressor" peut aussi produire des avertissements, mais je ne l'ai pas encore essayé.

Je n'ai pas eu beaucoup de chance avec l'IDE Aptana, construit sur Eclipse, mais d'autres personnes l'apprécient. Voir la discussion de Stack Overflow sur les IDE JS.

L'IDE IntelliJ, qui n'est pas gratuit aux dernières nouvelles, offre un excellent support JS. Il détecte et met en évidence les variables et méthodes mal orthographiées pendant que vous tapez, et plus encore. Il y a aussi la complétion automatique.

11voto

user_19 Points 186

En résumé, JSLint, JSHint, Plato, ESLint, Google Closure-Linter sont les outils disponibles. J'ai rencontré des problèmes d'installation en essayant Google Closure-Linter pour Windows. Mais, il est mentionné sur la page web que son support pour Windows est expérimental. J'ai trouvé et essayé un autre outil qui fonctionne bien. Voici le lien pour celui-ci : http://esprima.org/

Voici également le lien github pour l'outil Esprima : https://github.com/ariya/esprima

6voto

learner_19 Points 289

J'ai essayé ESlint et je l'ai trouvé bon vous pouvez aussi ajouter des règles personnalisées Voici le repo github : https://github.com/nzakas/eslint et en voici l'introduction : http://www.nczonline.net/blog/2013/07/16/introducing-eslint/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X