L'écriture d'une instanceof incomplète génère Cannot read property 'id' of undefined
.
Le code d'entrée suivant devrait reproduire le problème :
var something = [];
if(something instanceof) {
// Notice the instanceof is missing the class name
}
J'utilise actuellement JSHint 2.9.3
J'ai ce problème via le package atom linter-jshint avec jshint v2.9.3.
Error: C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\jshint\src\jshint.js:5386
throw err;
^
TypeError: Cannot read property 'id' of undefined
at C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\jshint\src\jshint.js:2131:14
at Object.x.led (C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\jshint\src\jshint.js:1155:16)
at expression (C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\jshint\src\jshint.js:926:36)
at C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\jshint\src\jshint.js:2051:18
at Object.x.led (C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\jshint\src\jshint.js:1155:16)
at expression (C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\jshint\src\jshint.js:926:36)
at Object.fud (C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\jshint\src\jshint.js:4423:22)
at expression (C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\jshint\src\jshint.js:885:32)
at statement (C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\jshint\src\jshint.js:1636:9)
at statements (C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\jshint\src\jshint.js:1681:16)
at ChildProcess.<anonymous> (C:\Users\emile.bergeron.CAMINO\.atom\packages\linter-jshint\node_modules\atom-linter\node_modules\sb-exec\lib\index.js:56:20)
at emitTwo (events.js:100:13)
at ChildProcess.emit (events.js:185:7)
at maybeClose (internal/child_process.js:850:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:215:5)
Même erreur lors de l'ouverture d'un commentaire comme celui-ci :
module.exports = {
attributes: {},
/*sth: {},
sth2: function(){}
};
Cela est-il dû à un outil qui s'exécute automatiquement sur le code en cours d'édition ?
Dans atom, j'utilise linter-jshint. Mais aussi lorsque j'enregistre un fichier avec ce contenu et que j'exécute jshint à partir de CLI, j'obtiens la même erreur.
jshint test.js
enregistré
module.exports = {
attributes: {},
/*sth: {}
};
génère une erreur :
/usr/local/lib/node_modules/jshint/src/jshint.js:5386
throw err;
^
TypeError: Cannot read property 'id' of null
at Object.x.nud (/usr/local/lib/node_modules/jshint/src/jshint.js:3240:26)
at expression (/usr/local/lib/node_modules/jshint/src/jshint.js:888:34)
at /usr/local/lib/node_modules/jshint/src/jshint.js:1389:20
at Object.x.led (/usr/local/lib/node_modules/jshint/src/jshint.js:1155:16)
at expression (/usr/local/lib/node_modules/jshint/src/jshint.js:926:36)
at statement (/usr/local/lib/node_modules/jshint/src/jshint.js:1636:9)
at statements (/usr/local/lib/node_modules/jshint/src/jshint.js:1681:16)
at itself (/usr/local/lib/node_modules/jshint/src/jshint.js:5365:9)
at lint (/usr/local/lib/node_modules/jshint/src/cli.js:495:8)
at /usr/local/lib/node_modules/jshint/src/cli.js:656:7
Je pense qu'il devrait y avoir une erreur d'analyse comme "commentaire non fermé".
Semble lié à #2932.
Et pour atom linter-jshint , ils sont toujours sur jshint v2.9.2. Ouverture du numéro AtomLinter/linter-jshint#353 pour mettre à jour jshint.
Il utilise en fait une plage, mais comme la mise à jour nécessite la réinstallation du package pour la plupart des utilisateurs, je vais simplement l'épingler.
Je peux confirmer qu'il génère la même erreur sur la démo JSHint .
Confirmé; merci pour le rapport ! J'ai soumis un correctif pour corriger ce bogue : https://github.com/jshint/jshint/pull/3046.
Commentaire le plus utile
Confirmé; merci pour le rapport ! J'ai soumis un correctif pour corriger ce bogue : https://github.com/jshint/jshint/pull/3046.