J'ai mis à jour mon tslint à 4.0.2 et maintenant je reçois beaucoup d'erreurs comme celle-ci
Could not find implementations for the following rules specified in the configuration:
directive-selector-name
component-selector-name
directive-selector-type
component-selector-type
directive-selector-prefix
component-selector-prefix
label-undefined
no-constructor-vars
no-duplicate-key
no-unreachable
use-strict
Je pense que le problème peut être que mon tslint.json est peut-être obsolète et que je dois le mettre à jour, mais je n'ai trouvé aucune information sur la manière de le faire ni même si mon hypothèse est correcte.
tslint.json
{
"rulesDirectory": [
"node_modules/codelyzer"
],
"rules": {
"directive-selector-name": [true, "camelCase"],
"component-selector-name": [true, "kebab-case"],
"directive-selector-type": [true, "attribute"],
"component-selector-type": [true, "element"],
"directive-selector-prefix": [true, "my"],
"component-selector-prefix": [true, "my"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-Host-property-decorator": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-forward-ref" :true,
"use-life-cycle-interface": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "my"],
"component-class-suffix": true,
"directive-class-suffix": true,
"ban": [true,
["_", "extend"],
["_", "isNull"],
["_", "isDefined"]
],
"class-name": true,
"comment-format": [false,
"check-space",
"check-lowercase"
],
"curly": true,
"eofline": true,
"forin": true,
"indent": [true, 2],
"interface-name": true,
"jsdoc-format": true,
"label-position": true,
"label-undefined": true,
"max-line-length": [false, 140],
"member-ordering": [true,
"public-before-private",
"static-before-instance",
"variables-before-functions"
],
"no-arg": true,
"no-bitwise": true,
"no-console": [true,
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"no-construct": true,
"no-constructor-vars": false,
"no-debugger": true,
"no-duplicate-key": true,
"no-duplicate-variable": true,
"no-empty": true,
"no-eval": true,
"no-string-literal": true,
"no-switch-case-fall-through": true,
"trailing-comma": true,
"no-trailing-whitespace": true,
"no-unused-expression": true,
"no-unused-variable": true,
"no-unreachable": true,
"no-use-before-declare": true,
"no-var-requires": true,
"one-line": [true,
"check-open-brace",
"check-catch",
"check-else",
"check-whitespace"
],
"quotemark": [true, "single"],
"radix": true,
"semicolon": true,
"triple-equals": [true, "allow-null-check"],
"typedef": [true,
"callSignature",
"indexSignature",
"parameter",
"propertySignature",
"variableDeclarator"
],
"typedef-whitespace": [true,
["callSignature", "noSpace"],
["catchClause", "noSpace"],
["indexSignature", "space"]
],
"use-strict": false,
"variable-name": false,
"whitespace": [true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
]
}
}
packages.json
{
"dependencies": {
"@angular/common": "^2.2.4",
"@angular/compiler": "^2.2.4",
"@angular/core": "^2.2.4",
"@angular/forms": "^2.2.4",
"@angular/http": "^2.2.4",
"@angular/platform-browser": "^2.2.4",
"@angular/platform-browser-dynamic": "^2.2.4",
"@angular/router": "^3.2.4",
"@ng-bootstrap/ng-bootstrap": "^1.0.0-alpha.14",
"ag-grid": "^7.0.0",
"angularfire2": "^2.0.0-beta.5",
"core-js": "^2.4.1",
"firebase": "^3.6.2",
"rxjs": "5.0.0-rc.4",
"zone.js": "^0.7.2"
},
"devDependencies": {
"del": "^2.0.2",
"gulp": "gulpjs/gulp#4ed9a4a3275559c73a396eff7e1fde3824951ebb",
"gulp-hub": "frankwallis/gulp-hub#d461b9c700df9010d0a8694e4af1fb96d9f38bf4",
"gulp-filter": "^4.0.0",
"gulp-util": "^3.0.7",
"gulp-sass": "^2.1.1",
"browser-sync": "^2.18.2",
"browser-sync-spa": "^1.0.3",
"karma": "^1.3.0",
"karma-coverage": "^1.1.1",
"karma-jasmine": "^1.0.2",
"karma-junit-reporter": "^1.1.0",
"jasmine": "^2.4.1",
"es6-shim": "^0.35.0",
"karma-chrome-launcher": "^2.0.0",
"babel-plugin-istanbul": "^3.0.0",
"karma-webpack": "^1.7.0",
"webpack": "2.1.0-beta.20",
"html-webpack-plugin": "^2.24.1",
"style-loader": "^0.13.0",
"css-loader": "^0.26.0",
"postcss-loader": "^1.1.1",
"autoprefixer": "^6.5.3",
"json-loader": "^0.5.4",
"extract-text-webpack-plugin": "^2.0.0-beta.3",
"html-loader": "^0.4.3",
"ts-loader": "^1.2.2",
"sass-loader": "^4.0.2",
"node-sass": "^3.13.0",
"eslint": "^3.11.1",
"eslint-config-xo-space": "^0.15.0",
"eslint-loader": "^1.6.1",
"babel-loader": "^6.2.8",
"babel-eslint": "^7.1.1",
"eslint-plugin-babel": "^4.0.0",
"tslint": "^4.0.2",
"TypeScript": "^2.0.10",
"typings": "^2.0.0",
"tslint-loader": "^3.2.1",
"codelyzer": "^2.0.0-beta.1"
},
"scripts": {
"build": "gulp",
"serve": "gulp serve",
"serve:dist": "gulp serve:dist",
"test": "gulp test",
"test:auto": "gulp test:auto"
},
"eslintConfig": {
"root": true,
"env": {
"browser": true,
"jasmine": true
},
"extends": [
"xo-space/esnext"
]
}
}
J'étais dans le même bateau. Je ne sais pas quelle était votre version précédente de tslint, mais pour moi, je suis passé de 3.15.1 à 4.0.2 et ma liste de "règles enfreintes" qui en résulte est différente de la vôtre. Néanmoins, je peux vous proposer quelques solutions/explications à celles que vous et moi avions en commun.
Je suis simplement allé dans le journal des modifications de tslint sur GitHub , j'ai trouvé la règle qui était enfreinte, le numéro de question au bout de la ligne et j'ai examiné la question. Le moyen le plus simple de naviguer consistait à ajouter le numéro du problème à la fin de l'URL de leur numéro GitHub. Par exemple, label-non défini était http // github.com/palantir/tslint/issues/877
Voici ceux que je devais comprendre
"label-undefined": true
de tslint.json, puis ajoutez "allowUnusedLabels": false
à la section compilerOptions de votre tsconfig.json."no-constructor-vars"
en "no-parameter-properties"
dans votre fichier tslint.json."no-duplicate-key": true
tout à fait b/c TypeScript le gère maintenant (ne compilera pas les clés dupliquées)."no-unreachable": true
de tslint.json, puis ajoutez "noImplicitReturns": true
à la section compilerOptions de votre tsconfig.json."use-strict"
complètement b/c TypeScript analyse maintenant tous les corps de module en mode strict.Depuis codelyzer 2.0.0-beta.1, il y a eu quelques changements décisifs . Ils ont supprimé nom-sélecteur-directive, nom-sélecteur-composant, type-sélecteur de directive, type-sélecteur de composant préfixe et composant-selector-prefix ne sont plus pris en charge. Au lieu de cela, ils ont ajouté la règle ci-dessous:
"directive-selector": [true, "attribute", "app", "camelCase"],
"component-selector": [true, "element", "app", "kebab-case"],
Veuillez regarder le changelog pour le codelyzer et rechercher toute règle non supportée
tslint v4 a supprimé un ensemble de règles qui n'avaient plus de sens et la vérification de TypeScript s'est améliorée. Vous devez utiliser tslint v3 si vous souhaitez toujours utiliser ces règles.
J'ai eu le même problème après la mise à niveau d'un projet angulaire. Supprimer cette règle a résolu le problème pour moi:
"no-misused-new"
J'ai eu le même problème avec les avertissements Could not find implementations for the following rules...
qui apparaissent dans mon IDE, WebStorm 2016.x. Dans mon cas, les implémentations de règles ont été fournies par l'IDE, car la mise à niveau de WebStorm a résolu le problème.
J'ai mis à jour TypeScript, TSLint & Codelyzer en vain. J'ai inspecté le contenu de mon fichier tslint.json et rien trouvé. La mise à niveau de WebStorm a résolu le problème.
J'ai eu le même problème après avoir copié les règles d'un projet angulaire ..__: créez simplement un nouveau projet TypeScript vide et tout ira bien.