Could not start tslint-to-eslint - Command failed: tslint --print-config "./tslint.json" - tslint command is available and working
Routhinator opened this issue Β· comments
π Bug Report
tslint-to-eslint-config
version: 2.14.0- ESLint version: 8.44.0
- Node version: 18.16.1
Actual Behavior
tslint-to-eslint acts like the tslint command cannot be found, which is seen in other issues with an actual error with executing tslint, however in my case tslint is installed correctly and running the command manually works as expected.
There are no clues as to why there is an error at all.
routhinator@devbox:~/projects/theden/angular$ npx tslint-to-eslint-config
β Could not start tslint-to-eslint: β
Command failed: tslint --print-config "./tslint.json"
routhinator@devbox:~/projects/theden/angular$ tslint
No files specified. Use --project to lint a project folder.
routhinator@devbox:~/projects/theden/angular$ tslint --print-config "./tslint.json"
{
"extends": [],
"jsRules": {
"class-name": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"forin": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"import-spacing": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"jsdoc-format": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"label-position": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"new-parens": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-arg": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-bitwise": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-conditional-assignment": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-consecutive-blank-lines": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-console": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-construct": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-debugger": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-duplicate-super": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-duplicate-variable": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-empty": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-eval": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-reference": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-shadowed-variable": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-string-literal": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-string-throw": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-switch-case-fall-through": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"no-unused-expression": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-use-before-declare": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"one-variable-per-declaration": {
"ruleArguments": [
"ignore-for-loop"
],
"ruleSeverity": "error"
},
"radix": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"triple-equals": {
"ruleArguments": [
"allow-null-check"
],
"ruleSeverity": "error"
},
"use-isnan": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"variable-name": {
"ruleArguments": [
"allow-leading-underscore",
"ban-keywords",
"check-format",
"allow-pascal-case"
],
"ruleSeverity": "error"
}
},
"linterOptions": {},
"rules": {
"adjacent-overload-signatures": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"array-type": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"ban-types": {
"ruleArguments": [
[
"Object",
"Avoid using the `Object` type. Did you mean `object`?"
],
[
"Function",
"Avoid using the `Function` type. Prefer a specific function type, like `() => void`."
],
[
"Boolean",
"Avoid using the `Boolean` type. Did you mean `boolean`?"
],
[
"Number",
"Avoid using the `Number` type. Did you mean `number`?"
],
[
"String",
"Avoid using the `String` type. Did you mean `string`?"
],
[
"Symbol",
"Avoid using the `Symbol` type. Did you mean `symbol`?"
]
],
"ruleSeverity": "error"
},
"callable-types": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"class-name": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"comment-format": {
"ruleArguments": [
"check-space"
],
"ruleSeverity": "error"
},
"cyclomatic-complexity": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"forin": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"jsdoc-format": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"label-position": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"max-classes-per-file": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"new-parens": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-angle-bracket-type-assertion": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-any": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"no-arg": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-bitwise": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-conditional-assignment": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-console": {
"ruleArguments": [
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"ruleSeverity": "error"
},
"no-construct": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-debugger": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-duplicate-super": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-empty": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"no-empty-interface": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-eval": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-internal-module": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-invalid-this": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"no-misused-new": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-namespace": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-parameter-properties": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"no-reference": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-reference-import": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-shadowed-variable": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-string-literal": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-string-throw": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-switch-case-fall-through": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-trailing-whitespace": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-unnecessary-initializer": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-unsafe-finally": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-unused-expression": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-use-before-declare": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-var-keyword": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-var-requires": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"object-literal-shorthand": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"one-variable-per-declaration": {
"ruleArguments": [
"ignore-for-loop"
],
"ruleSeverity": "error"
},
"only-arrow-functions": {
"ruleArguments": [
"allow-declarations",
"allow-named-functions"
],
"ruleSeverity": "error"
},
"prefer-const": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"prefer-for-of": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"radix": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"triple-equals": {
"ruleArguments": [
"allow-null-check"
],
"ruleSeverity": "error"
},
"typedef": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"typeof-compare": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"unified-signatures": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"use-isnan": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"variable-name": {
"ruleArguments": [
"allow-leading-underscore",
"ban-keywords",
"check-format",
"allow-pascal-case"
],
"ruleSeverity": "error"
},
"arrow-parens": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"deprecation": {
"ruleSeverity": "warning"
},
"component-class-suffix": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"contextual-lifecycle": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"directive-class-suffix": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"directive-selector": {
"ruleArguments": [
"attribute",
"app",
"camelCase"
],
"ruleSeverity": "error"
},
"component-selector": {
"ruleArguments": [
"element",
"app",
"kebab-case"
],
"ruleSeverity": "error"
},
"import-blacklist": {
"ruleArguments": [
"rxjs/Rx"
],
"ruleSeverity": "error"
},
"interface-name": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"max-line-length": {
"ruleArguments": [
140
],
"ruleSeverity": "error"
},
"member-access": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"member-ordering": {
"ruleArguments": [
{
"order": [
"static-field",
"instance-field",
"static-method",
"instance-method"
]
}
],
"ruleSeverity": "error"
},
"no-consecutive-blank-lines": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"no-inferrable-types": {
"ruleArguments": [
"ignore-params"
],
"ruleSeverity": "error"
},
"no-non-null-assertion": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-redundant-jsdoc": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"object-literal-key-quotes": {
"ruleArguments": [
"as-needed"
],
"ruleSeverity": "error"
},
"object-literal-sort-keys": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"ordered-imports": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"quotemark": {
"ruleArguments": [
"single"
],
"ruleSeverity": "error"
},
"trailing-comma": {
"ruleArguments": [],
"ruleSeverity": "off"
},
"no-conflicting-lifecycle": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-host-metadata-property": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-input-rename": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-inputs-metadata-property": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-output-native": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-output-on-prefix": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-output-rename": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"no-outputs-metadata-property": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"template-banana-in-box": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"template-no-negated-async": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"use-lifecycle-interface": {
"ruleArguments": [],
"ruleSeverity": "error"
},
"use-pipe-transform-interface": {
"ruleArguments": [],
"ruleSeverity": "error"
}
},
"rulesDirectory": [
"/home/routhinator/projects/theden/angular/node_modules/codelyzer"
]
}
routhinator@devbox:~/projects/theden/angular$ npx tslint-to-eslint-config
β Could not start tslint-to-eslint: β
Command failed: tslint --print-config "./tslint.json"
Expected Behavior
If it can't run the command, I would expect to have similar trouble running it manually or have some detail from the application on what the problem it's experiencing is. In this case I have nothing to go on.
Reproduction
Not really sure how to reproduce this, but here's my package.json and tslint.json
Package.json
{
"name": "the-den-v5-frontend",
"version": "5.0.0",
"license": "closed",
"scripts": {
"start": "node prebuild.js & ng serve --open",
"build": "node prebuild.js & ng build --configuration development",
"build-stage": "node prebuild.js & ng build --configuration staging",
"build-prod": "node prebuild.js & ng build --configuration production",
"test": "ng test",
"e2e": "ng e2e",
"lint": "ng lint",
"ci": "npm run lint && npm run test && npm run e2e",
"bundle-report": "ng build --prod --stats-json",
"dev:ssr": "node prebuild.js & ng run theden-v5-angular:serve-ssr",
"serve:ssr": "node prebuild.js & node dist/theden-v5-angular/server/main.js",
"prod:build:ssr": "node prebuild.js & ng build --configuration production && ng run theden-v5-angular:server:production",
"prod:prerender": "node prebuild.js & ng run theden-v5-angular:prerender:production",
"staging:build:ssr": "node prebuild.js & ng build --configuration staging && ng run theden-v5-angular:server:staging",
"staging:prerender": "node prebuild.js & ng run theden-v5-angular:prerender:staging",
"dev:build:ssr": "node prebuild.js & ng build --configuration development && ng run theden-v5-angular:server:development",
"dev:prerender": "node prebuild.js & ng run theden-v5-angular:prerender:development"
},
"private": true,
"engines": {
"node": ">= v17.8.0",
"npm": ">= 8.5.5"
},
"dependencies": {
"@angular/animations": "15.2.9",
"@angular/common": "15.2.9",
"@angular/compiler": "15.2.9",
"@angular/core": "15.2.9",
"@angular/forms": "15.2.9",
"@angular/localize": "15.2.9",
"@angular/platform-browser": "15.2.9",
"@angular/platform-browser-dynamic": "15.2.9",
"@angular/platform-server": "15.2.9",
"@angular/router": "15.2.9",
"@angular/service-worker": "15.2.9",
"@nguniversal/express-engine": "15.2.1",
"@popperjs/core": "2.11.6",
"ckeditor5-build-classic-with-extras": "18.1.15",
"colors": "^1.4.0",
"compass.js": "1.3.0",
"config": "3.3.8",
"express": "4.18.2",
"express-prom-bundle": "6.5.0",
"localstorage-polyfill": "1.0.1",
"memory-cache": "0.2.0",
"path": "0.12.7",
"redis": "4.5.0",
"rxjs": "7.5.7",
"sitemap": "7.1.1",
"superagent": "6.1.0",
"tslib": "2.4.1",
"universal-dotenv": "4.0.0",
"zone.js": "0.11.8"
},
"devDependencies": {
"@angular-devkit/build-angular": "15.2.9",
"@angular/cdk": "15.2.9",
"@angular/cli": "15.2.9",
"@angular/compiler-cli": "15.2.9",
"@angular/language-service": "15.2.9",
"@ckeditor/ckeditor5-angular": "4.0.0",
"@ng-bootstrap/ng-bootstrap": "14.1.0",
"@nguniversal/builders": "15.2.1",
"@popperjs/core": "2.11.6",
"@tkrotoff/bootstrap-input-spinner": "0.20.5",
"@types/express": "4.17.14",
"@types/jasmine": "4.3.0",
"@types/jasminewd2": "2.0.10",
"@types/node": "18.11.9",
"@typescript-eslint/eslint-plugin": "^5.61.0",
"@typescript-eslint/parser": "^5.61.0",
"bootstrap": "5.2.2",
"codelyzer": "6.0.2",
"cookieconsent": "3.1.1",
"eslint": "^8.44.0",
"jasmine-core": "4.5.0",
"jasmine-spec-reporter": "7.0.0",
"karma": "6.4.1",
"karma-chrome-launcher": "3.1.1",
"karma-coverage-istanbul-reporter": "3.0.3",
"karma-jasmine": "5.1.0",
"karma-jasmine-html-reporter": "2.0.0",
"line-awesome": "1.3.0",
"ngx-cookieconsent": "4.0.1",
"protractor": "7.0.0",
"stacktrace-js": "2.0.2",
"ts-node": "10.9.1",
"tslint": "6.1.3",
"typescript": "4.8.4"
}
}
tslint.json
{
"extends": "tslint:recommended",
"rules": {
"array-type": false,
"arrow-parens": false,
"deprecation": {
"severity": "warn"
},
"component-class-suffix": true,
"contextual-lifecycle": true,
"directive-class-suffix": true,
"directive-selector": [
true,
"attribute",
"app",
"camelCase"
],
"component-selector": [
true,
"element",
"app",
"kebab-case"
],
"import-blacklist": [
true,
"rxjs/Rx"
],
"interface-name": false,
"max-classes-per-file": false,
"max-line-length": [
true,
140
],
"member-access": false,
"member-ordering": [
true,
{
"order": [
"static-field",
"instance-field",
"static-method",
"instance-method"
]
}
],
"no-consecutive-blank-lines": false,
"no-console": [
true,
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"no-empty": false,
"no-inferrable-types": [
true,
"ignore-params"
],
"no-non-null-assertion": true,
"no-redundant-jsdoc": true,
"no-switch-case-fall-through": true,
"no-use-before-declare": true,
"no-var-requires": false,
"object-literal-key-quotes": [
true,
"as-needed"
],
"object-literal-sort-keys": false,
"ordered-imports": false,
"quotemark": [
true,
"single"
],
"trailing-comma": false,
"no-conflicting-lifecycle": true,
"no-host-metadata-property": true,
"no-input-rename": true,
"no-inputs-metadata-property": true,
"no-output-native": true,
"no-output-on-prefix": true,
"no-output-rename": true,
"no-outputs-metadata-property": true,
"template-banana-in-box": true,
"template-no-negated-async": true,
"use-lifecycle-interface": true,
"use-pipe-transform-interface": true
},
"rulesDirectory": [
"codelyzer"
]
}
Hmm, very interesting! Thanks for posting the package files - can I also ask what package manager you're using to run them, and if you can also post its lockfile?
Just npm and ng (this is an angular project) to manage versions and upgrades, here's the lock file:
https://gist.github.com/Routhinator/62ac49468c64879abf82cf8622707915
Hmm, it works on my machine π. I made a new project directory with your package.json
, package-lock.json
, and tslint.json
. npx tslint-to-eslint-config
failed with:
β Could not start tslint-to-eslint: β
Command failed: tslint --print-config "./tslint.json"
Failed to load /Users/josh/repos/tslinttemp/tslint.json: Could not find custom rule directory: codelyzer
After a mkdir codelyzer
, re-running npx tslint-to-eslint-config
succeeded with:
β¨ 98 rules replaced with their ESLint equivalents. β¨
β 6 ESLint rules behave differently from their TSLint counterparts β
Check ./tslint-to-eslint-config.log for details.
β Prettier plugins are missing from your configuration. β
We highly recommend running tslint-to-eslint-config --prettier to disable formatting ESLint rules.
See https://github.com/typescript-eslint/tslint-to-eslint-config/blob/master/docs/FAQs.md#should-i-use-prettier.
β‘ 8 new packages are required for this ESLint configuration. β‘
npm install @angular-eslint/eslint-plugin @angular-eslint/eslint-plugin-template @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-plugin-import eslint-plugin-jsdoc eslint-plugin-prefer-arrow --save-dev
β» Consider using --comments to replace TSLint comment directives in your source files. β»
β
All is well! β
Created .eslintrc.js
/*
π Hi! This file was autogenerated by tslint-to-eslint-config.
https://github.com/typescript-eslint/tslint-to-eslint-config
It represents the closest reasonable ESLint configuration to this
project's original TSLint configuration.
We recommend eventually switching this configuration to extend from
the recommended rulesets in typescript-eslint.
https://github.com/typescript-eslint/tslint-to-eslint-config/blob/master/docs/FAQs.md
Happy linting! π
*/
module.exports = {
"env": {
"browser": true,
"es6": true
},
"extends": [
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "tsconfig.json",
"sourceType": "module"
},
"plugins": [
"eslint-plugin-import",
"@angular-eslint/eslint-plugin",
"eslint-plugin-jsdoc",
"@angular-eslint/eslint-plugin-template",
"eslint-plugin-prefer-arrow",
"@typescript-eslint"
],
"root": true,
"rules": {
"@angular-eslint/component-class-suffix": "error",
"@angular-eslint/component-selector": [
"error",
{
"type": "element",
"prefix": "app",
"style": "kebab-case"
}
],
"@angular-eslint/contextual-lifecycle": "error",
"@angular-eslint/directive-class-suffix": "error",
"@angular-eslint/directive-selector": [
"error",
{
"type": "attribute",
"prefix": "app",
"style": "camelCase"
}
],
"@angular-eslint/no-conflicting-lifecycle": "error",
"@angular-eslint/no-host-metadata-property": "error",
"@angular-eslint/no-input-rename": "error",
"@angular-eslint/no-inputs-metadata-property": "error",
"@angular-eslint/no-output-native": "error",
"@angular-eslint/no-output-on-prefix": "error",
"@angular-eslint/no-output-rename": "error",
"@angular-eslint/no-outputs-metadata-property": "error",
"@angular-eslint/template/banana-in-box": "error",
"@angular-eslint/template/eqeqeq": "error",
"@angular-eslint/template/no-negated-async": "error",
"@angular-eslint/use-lifecycle-interface": "error",
"@angular-eslint/use-pipe-transform-interface": "error",
"@typescript-eslint/adjacent-overload-signatures": "error",
"@typescript-eslint/array-type": "off",
"@typescript-eslint/ban-types": [
"error",
{
"types": {
"Object": {
"message": "Avoid using the `Object` type. Did you mean `object`?"
},
"Function": {
"message": "Avoid using the `Function` type. Prefer a specific function type, like `() => void`."
},
"Boolean": {
"message": "Avoid using the `Boolean` type. Did you mean `boolean`?"
},
"Number": {
"message": "Avoid using the `Number` type. Did you mean `number`?"
},
"String": {
"message": "Avoid using the `String` type. Did you mean `string`?"
},
"Symbol": {
"message": "Avoid using the `Symbol` type. Did you mean `symbol`?"
}
}
}
],
"@typescript-eslint/consistent-type-assertions": "error",
"@typescript-eslint/dot-notation": "error",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/explicit-member-accessibility": [
"off",
{
"accessibility": "explicit"
}
],
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/member-ordering": "error",
"@typescript-eslint/naming-convention": [
"off",
{
"selector": "variable",
"format": [
"camelCase",
"UPPER_CASE",
"PascalCase"
],
"leadingUnderscore": "allow",
"trailingUnderscore": "forbid"
}
],
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-empty-interface": "error",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-inferrable-types": [
"error",
{
"ignoreParameters": true
}
],
"@typescript-eslint/no-misused-new": "error",
"@typescript-eslint/no-namespace": "error",
"@typescript-eslint/no-non-null-assertion": "error",
"@typescript-eslint/no-parameter-properties": "off",
"@typescript-eslint/no-shadow": [
"error",
{
"hoist": "all"
}
],
"@typescript-eslint/no-unused-expressions": "error",
"@typescript-eslint/no-use-before-define": "error",
"@typescript-eslint/no-var-requires": "off",
"@typescript-eslint/prefer-for-of": "error",
"@typescript-eslint/prefer-function-type": "error",
"@typescript-eslint/prefer-namespace-keyword": "error",
"@typescript-eslint/quotes": [
"error",
"single"
],
"@typescript-eslint/triple-slash-reference": [
"error",
{
"path": "always",
"types": "prefer-import",
"lib": "always"
}
],
"@typescript-eslint/typedef": "off",
"@typescript-eslint/unified-signatures": "error",
"arrow-parens": [
"off",
"always"
],
"comma-dangle": "off",
"complexity": "off",
"constructor-super": "error",
"dot-notation": "off",
"eqeqeq": [
"error",
"smart"
],
"guard-for-in": "error",
"id-denylist": [
"error",
"any",
"Number",
"number",
"String",
"string",
"Boolean",
"boolean",
"Undefined",
"undefined"
],
"id-match": "error",
"import/no-deprecated": "warn",
"import/order": [
"off",
{
"alphabetize": {
"caseInsensitive": true,
"order": "asc"
},
"newlines-between": "ignore",
"groups": [
[
"builtin",
"external",
"internal",
"unknown",
"object",
"type"
],
"parent",
[
"sibling",
"index"
]
],
"distinctGroup": false,
"pathGroupsExcludedImportTypes": [],
"pathGroups": [
{
"pattern": "./",
"patternOptions": {
"nocomment": true,
"dot": true
},
"group": "sibling",
"position": "before"
},
{
"pattern": ".",
"patternOptions": {
"nocomment": true,
"dot": true
},
"group": "sibling",
"position": "before"
},
{
"pattern": "..",
"patternOptions": {
"nocomment": true,
"dot": true
},
"group": "parent",
"position": "before"
},
{
"pattern": "../",
"patternOptions": {
"nocomment": true,
"dot": true
},
"group": "parent",
"position": "before"
}
]
}
],
"jsdoc/check-alignment": "error",
"jsdoc/check-indentation": "error",
"jsdoc/newline-after-description": "error",
"jsdoc/no-types": "error",
"max-classes-per-file": "off",
"max-len": [
"error",
{
"code": 140
}
],
"new-parens": "error",
"no-bitwise": "error",
"no-caller": "error",
"no-cond-assign": "error",
"no-console": [
"error",
{
"allow": [
"log",
"warn",
"dir",
"timeLog",
"assert",
"clear",
"count",
"countReset",
"group",
"groupEnd",
"table",
"dirxml",
"error",
"groupCollapsed",
"Console",
"profile",
"profileEnd",
"timeStamp",
"context",
"createTask"
]
}
],
"no-debugger": "error",
"no-empty": "off",
"no-empty-function": "off",
"no-eval": "error",
"no-fallthrough": "error",
"no-invalid-this": "off",
"no-multiple-empty-lines": "off",
"no-new-wrappers": "error",
"no-restricted-imports": [
"error",
"rxjs/Rx"
],
"no-shadow": "off",
"no-throw-literal": "error",
"no-trailing-spaces": "error",
"no-undef-init": "error",
"no-underscore-dangle": "off",
"no-unsafe-finally": "error",
"no-unused-expressions": "off",
"no-unused-labels": "error",
"no-use-before-define": "off",
"no-var": "error",
"object-shorthand": "error",
"one-var": [
"error",
"never"
],
"prefer-arrow/prefer-arrow-functions": "error",
"prefer-const": "error",
"quote-props": [
"error",
"as-needed"
],
"quotes": "off",
"radix": "error",
"spaced-comment": [
"error",
"always",
{
"markers": [
"/"
]
}
],
"use-isnan": "error",
"valid-typeof": "off"
}
};
If you're interested in getting to the bottom of this, src/input/findReportedConfiguration.js
is where the tslint --print-config
command is run (called by src/input/findTSLintConfiguration.js
). If you put a console.log({ stderr, stdout })
in the execAndCatch
function maybe that'll log something interesting?
Sadly I'm not sure where you mean when you say execAndCatch
section as I do not see that in this file:
import { Exec } from "../adapters/exec";
export type DeepPartial<T> = {
[P in keyof T]?: T[P] extends Record<string, unknown> ? DeepPartial<T[P]> : T[P];
};
export type FindReportedConfigurationDependencies = {
exec: Exec;
platform: string;
};
export declare const findReportedConfiguration: <Configuration>(exec: Exec, command: string, config: string) => Promise<Error | DeepPartial<Configuration>>;
Also I ran a mkdir codelyzer
as you did, and could not repoduce your success either.
routhinator@devbox:~/projects/theden/angular$ mkdir codelyzer
routhinator@devbox:~/projects/theden/angular$ npx tslint-to-eslint-config --comments
β Could not start tslint-to-eslint: β
Command failed: tslint --print-config "./tslint.json"
routhinator@devbox:~/projects/theden/angular$
I'm tempted to just take the eslint config you generated and move on, but also curious as to how this broke this way to begin with.
That's the .d.ts
file. I'm suggesting looking at the .js
equivalent to this source file:
...and yeah I too am very curious π but would understand if you don't have time to go down this investigation.
After some more fiddling I decided to reset and go with the tools/instructions in @angular-eslint/schematics
as it made my life easier and completed the conversion without issues.. even though it used this same tool under the hood.
Not sure what it was but I needed to timebox this :)