Update TSLint Errors : Could not find implementations for the following rules specified in the configuration

32,300

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.

Share:
32,300
David Cruwys
Author by

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, 2020

Comments

  • David Cruwys
    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"
        ]
      }
    }