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" ] } }
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": true
from tslint.json and then add "allowUnusedLabels": false
to the compilerOptions section of your tsconfig.json"no-constructor-vars"
to "no-parameter-properties"
in your tslint.json"no-duplicate-key": true
altogether b/c typescript now handles it (won't compile if dup keys)."no-unreachable": true
from tslint.json and then add "noImplicitReturns": true
to the compilerOptions section of your tsconfig.json"use-strict"
rule altogether b/c typescript now parses all module bodies in strict mode.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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With