Update TSLint Errors : Could not find implementations for the following rules specified in the configuration
Solution 1
I was in the same boat. I don't know what your previous version of tslint was, but, for me, I upgraded from 3.15.1 to 4.0.2 and my resulting "broken rule" list is different than yours. Still, I can offer you a few fixes/explanations to the ones you and I had in common.
I just went to the tslint's changelog on GitHub, found the rule that was broken, got the issue number at the end of the line, & looked up the issue. Easiest way to navigate was to add the issue number to the end of their GitHub issue URL. For example, label-undefined was http//github.com/palantir/tslint/issues/877
Here's the ones I had to figure out
-
label-undefined -> typescript compiler handles this now, so remove
"label-undefined": true
from tslint.json and then add"allowUnusedLabels": false
to the compilerOptions section of your tsconfig.json -
no-constructor-vars -> renamed the rule, so change
"no-constructor-vars"
to"no-parameter-properties"
in your tslint.json -
no-duplicate-key -> remove
"no-duplicate-key": true
altogether b/c typescript now handles it (won't compile if dup keys). -
no-unreachable -> typescript compiler handles this now, so remove
"no-unreachable": true
from tslint.json and then add"noImplicitReturns": true
to the compilerOptions section of your tsconfig.json -
use-strict -> remove
"use-strict"
rule altogether b/c typescript now parses all module bodies in strict mode.
Solution 2
As of, codelyzer 2.0.0-beta.1 there are some breaking changes. They removed directive-selector-name, component-selector-name, directive-selector-type, component-selector-type, directive-selector-prefix and component-selector-prefix are no longer supported. Instead, they added the below rule:
"directive-selector": [true, "attribute", "app", "camelCase"],
"component-selector": [true, "element", "app", "kebab-case"],
Please look at the changelog for the codelyzer and search for any rule that is not supported
Solution 3
tslint v4 removed a bunch of rules that no longer made sense and TypeScript checking got better. You need to use tslint v3 if you still want to use those rules.
Solution 4
I had the same problem after copying the rules from an angular project. Just create a new empty typescript project and you will be fine.
David Cruwys
I’m a Nerd and a bit of a futurist who loves exploring the interrelationship of human to human connection and AI/machine learning whilst keeping up to date on technology trends, especially those related to online commerce and marketing. ♦ Cloud Application Development expertise that includes Scalable commercial web-sites, Real-time cloud quotation engines, data mining and artificial intelligence systems using .NET, Rails, Python and Angular Technology.
Updated on February 08, 2020Comments
-
David Cruwys over 4 years
I upgraded my tslint to 4.0.2 and now I get a lot of errors like the following
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
I believe the issue may be that my tslint.json may be out of date and I need to update it, but I have not found any information on how to do that or even if my assumption is correct.
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" ] } }