le monde de crabs

JSLint en CLI sous Slackware

07/07/2015

Attention Les fichiers à télécharger sont suffixés avec .txt Attention

Attention Utilise la version 2014-07-08 de jslint.js Attention

Prérequis

Dans votre dossier personnel ($HOME), créer deux dossiers : BIN et ETC.

Faites en sorte que $HOME/BIN soit dans votre PATH.

Un script javascript pour embarquer JSLINT()

Dans un premier temps, vous téléchargez jslint.js jslint.js vous le deposez dans le dossier $HOME/ETC.

Utilisez la version de ce site, car la version du dépot de Douglas Crockford (GITHUB : douglascrockford/JSLint) n'est plus compatible...

Ensuite, vous allez créer, en vous inspirant du script suivant, le fichier javascript $HOME/ETC/run-jslint.js qui va lancer la fonction de vérification incluse dans jslint.js en exploitant la ligne de commande :

/*global load, print, arguments, JSLINT */
/*jslint browser: false, indent: 2, regexp: true */

var data, n, e, err, rep, t, res,
  $JSLINT = 0,
  $SCRIPT = 1;

load(arguments[$JSLINT]);
res = JSLINT(arguments[$SCRIPT]);

if (!res) {
  data =  JSLINT.data();
  n = data.errors.length;
  print("\n\n********************************************************************************");
  print("\n### Errors " + n + "\n");
  for (e = 0; e < n; e += 1) {
    err = data.errors[e];
    if (err) {
      print(err.line + ": " + err.character + ":" + err.reason);
      print("  " + err.evidence);
      rep = "  ";
      for (t = 0; t < (err.character - 1); t += 1) { rep += '-'; }
      rep += '^';
      print(rep);
    }
  }
}

Téléchager run-jslint.js.txt Téléchager run-jslint.js.txt

Un script python pour extraire le javascript embarque dans du html

Je n'ai pas tester avec des inclusions multiples, le python devra surement être modifié.

Utilisons le python pour extraire ce qui est entre les balises scripts et nous pourrons passer le résultat à jslint. Le souci avec le javascript embarqué, c'est la perte du numéro de ligne pour retrouver son erreur.

Ranger ce script dans le dossier $HOME/ETC.

import sys, re

file = sys.argv[1]
f = open(file, "r")
js = re.findall(r'<script\s*[^>]*\s*>(.*?)</script', f.read(), re.I|re.S)
print js[0]

Téléchager extract-embedded-js.py.txt Téléchager extract-embedded-js.py.txt

J'adore l'efficacité du pyhton...

Et le script bash pour lancer tout cela...

Là non plus pas de complexité, le bash trouve l'extension du fichier, et il procède à l'extraction du script si cela s'avère nécessaire...

#!/bin/bash
filename=${1:?"jslint filename"}
ETC="$( cd $(dirname $0)/../ETC && pwd)"
case ${filename##*.} in
    js)
        js $ETC/run-jslint.js $ETC/jslint.js "$(cat $filename)"
        ;;
    html)
        js $ETC/run-jslint.js $ETC/jslint.js \
            "$(python $ETC/extract-embedded-js.py $filename)"
    ;;
    *)
    ;;
esac

Téléchager jslint.sh.txt Téléchager jslint.sh.txt

Après le téléchargement dans le dossier $HOME/BIN, rendre ce fichier exécutable :

# chmod +x $HOME/BIN/jslint.sh

Un petit test ?

Y a plus qu'à faire un test avec le script javascript délivré dans cette page :

# jslint.sh $HOME/ETC/run-jslint.sh

Normalement, les erreurs ont été nettoyées avec la version jslint.js 2014-07-08.