web-dev-qa-db-fra.com

Pourquoi les nouvelles erreurs JSLint "utiliser des espaces, pas des tabulations" et "caractère dangereux" ont-elles été introduites?

Je valide mon JavaScript en utilisant JSLint depuis environ 2 ans maintenant et de temps en temps il y a des règles qui changent. En général, lorsque JSLint introduit une nouvelle règle, il y a une case à cocher pour ignorer cette règle lors de l'analyse, ou si vous choisissez de ne pas l'ignorer, puis de rendre votre code conforme.

Cependant, comme j'exécutais ma validation JSLint aujourd'hui, je rencontre ces deux nouvelles erreurs:

Utilisez des espaces, pas des tabulations.

Ce n'est pas l'erreur de "mélange de tabulations et d'espaces". J'utilise uniquement des onglets. Il s'agit d'une version récemment modifiée du "mélange d'onglets et d'espaces" qui interdit désormais les onglets en général.

Et:

Caractère dangereux.

* /

Caractère dangereux.

_const: {

Il n'y a pas de nouvelles options à ignorer. Je ne peux pas comprendre ce qui n'est pas sûr de fermer un commentaire de bloc, pourquoi il considère _const: {comme dangereux quand j'ai nomen: true, (balançant _ dans les identifiants) ou pourquoi devrais-je passer soudainement des espaces aux tabulations, alors que j'ai toujours la configuration de l'indentation de 4 espaces en tabulation.

Quelqu'un at-il une idée pourquoi ceux-ci ont été introduits au moins comment faire en sorte que JSLint ignore ces nouvelles règles?

Mise à jour: Le Messy White Space l'option contourne le problème, mais cela provoquerait un autre comportement inattendu:

if (condition) { 
  //            ^-- there is a space but it won't indicate an error
56
Konstantin Dinev

Eh bien, il semble que Douglas Crockford ait incité beaucoup plus de gens à passer à JSHint. Jetez un oeil à ce commit .

L'erreur "Espaces et tabulations mixtes" a été supprimée et une nouvelle erreur "Utiliser des espaces, pas des tabulations" a été ajoutée à sa place. En dehors de cela, il y a un petit changement dans ce diff qui montre la cause de cela. La ligne suivante (commentaire ajouté):

at = source_row.search(/ \t/);
//                      ^ Space

a été remplacé par ceci:

at = source_row.search(/\t/);
//                      ^ No space!

Après cette recherche, il y a une instruction if. Si la condition est évaluée à true, l'avertissement "Utiliser des espaces, pas des tabulations" est émis. Voici cette déclaration:

if (at >= 0) {
    warn_at('use_spaces', line, at + 1);
}

J'espère que ce n'est qu'un petit oubli de Crockford. Comme vous pouvez le voir, JSLint va maintenant déclencher cet avertissement si vous utilisez un caractère de tabulation n'importe où . Malheureusement, ses messages de validation sont complètement inutiles et la documentation ne semble pas avoir été mise à jour, donc je ne peux rien faire d'autre que spéculer sur les raisons de ce changement.

Je vous suggère d'abandonner JSLint et de passer à JSHint pour le moment.

72
James Allardice

Vous pouvez supprimer l'erreur en cliquant sur l'option "espace blanc en désordre".

12
mathius1

Pour répondre pourquoi JSLint donne maintenant une erreur sur les onglets, http://www.jslint.com/help.html donne cette justification:

Les tabulations et les espaces ne doivent pas être mélangés. Nous devons en choisir un seul pour éviter les problèmes qui découlent des deux. La préférence personnelle est un critère extrêmement peu fiable. Aucun des deux n'offre un puissant avantage sur l'autre. Il y a cinquante ans, tab avait l'avantage de consommer moins de mémoire, mais la loi de Moore a supprimé cet avantage. L'espace a un avantage évident sur l'onglet: il n'y a pas de norme fiable pour le nombre d'espaces qu'un onglet représente, mais il est universellement admis qu'un espace occupe un espace. Utilisez donc des espaces. Vous pouvez modifier avec des tabulations si vous le devez, mais assurez-vous qu'il s'agit à nouveau d'espaces avant de vous engager. Peut-être qu'un jour nous obtiendrons enfin une norme universelle pour les onglets, mais jusqu'à ce jour, le meilleur choix est les espaces.

Essentiellement, il veut que tout le monde parvienne à un consensus sur l'opportunité d'utiliser des tabulations ou des espaces pour éviter qu'ils ne soient mélangés. Il a décidé que la cohérence de la largeur d'un espace en faisait un choix supérieur, nous devrions donc tous l'utiliser. De toute évidence, certaines personnes seront en désaccord avec cette ligne de pensée (moi y compris), mais c'est la raison pour laquelle JSLint jette cette erreur.

7
Kat

Selon votre éditeur/IDE, vous pouvez ajuster le fonctionnement de TAB.

Par exemple, j'utilise Sublime Text. Près du coin inférieur droit se trouve une taille d'onglet: 4.

J'ai cliqué dessus et l'ai défini "Retrait à l'aide d'espaces".

Cela a mis à jour tous mes onglets pour utiliser les espaces et les erreurs JSLint ont disparu. J'essaie d'utiliser le moins d'options possible avec JSLint car je veux que mon code soit bien structuré.

J'utilise également JSFormat, qui sera tabulé en fonction des paramètres de mes éditeurs, donc chaque fois que j'ai terminé, j'exécute mon JSFormat, puis JSLint. Aucune erreur = garçon heureux!

J'espère que ça aide.

6
TyMayn