David Cruwys
David Cruwys

Reputation: 6842

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

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"
    ]
  }
}

Upvotes: 34

Views: 35809

Answers (6)

lance-p
lance-p

Reputation: 1070

I had the same issue after upgrading an Angular project. Removing this rule resolved the issue for me:

"no-misused-new"

Upvotes: 0

skiabox
skiabox

Reputation: 3507

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.

Upvotes: 1

Anvesh Reddy
Anvesh Reddy

Reputation: 131

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

Upvotes: 6

Matthew Marichiba
Matthew Marichiba

Reputation: 2092

I had this same issue with Could not find implementations for the following rules... warnings showing up in my IDE, WebStorm 2016.x. In my case, the rule implementations were provided by the IDE, because upgrading my WebStorm fixed the issue.

I upgraded Typescript, TSLint & Codelyzer to no avail. I inspected the contents of my tslint.json file and found nothing. Upgrading WebStorm fixed the issue.

Upvotes: 0

B Diehl
B Diehl

Reputation: 696

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.

Upvotes: 54

basarat
basarat

Reputation: 275867

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.

Upvotes: 3

Related Questions