From 57990c4215b79cc95bdf17d34ba57648b375013b Mon Sep 17 00:00:00 2001 From: tcdejong Date: Mon, 3 Feb 2020 18:41:29 +0100 Subject: [PATCH 1/5] Migrate from TSLint to ESLint --- .eslintrc.js | 155 +++++++++++++++++++++++++++++++++ .vscode/settings.json | 47 +++++----- package.json | 16 ++-- src/main.ts | 2 +- tsconfig.test-integration.json | 20 ----- tslint.json | 21 ----- 6 files changed, 192 insertions(+), 69 deletions(-) create mode 100644 .eslintrc.js delete mode 100644 tsconfig.test-integration.json delete mode 100644 tslint.json diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..7cf9063 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,155 @@ +module.exports = { + "env": { + "browser": true, + "es6": true, + "node": true + }, + "extends": [ + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + "prettier/@typescript-eslint", + "plugin:prettier/recommended", + "plugin:import/errors", + "plugin:import/warnings", + "plugin:import/typescript" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "tsconfig.json", + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint", + ], + "rules": { + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": "error", + "@typescript-eslint/ban-types": "error", + "@typescript-eslint/class-name-casing": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/consistent-type-definitions": "error", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-member-accessibility": [ + "error", + { + "accessibility": "explicit" + } + ], + "@typescript-eslint/indent": "off", + "@typescript-eslint/interface-name-prefix": "error", + "@typescript-eslint/member-delimiter-style": [ + "off", + { + "multiline": { + "delimiter": "none", + "requireLast": true + }, + "singleline": { + "delimiter": "semi", + "requireLast": false + } + } + ], + "@typescript-eslint/member-ordering": "off", + "@typescript-eslint/no-empty-function": "error", + "@typescript-eslint/no-empty-interface": "error", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-parameter-properties": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/no-var-requires": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/quotes": "off", + "@typescript-eslint/semi": [ + "off", + null + ], + "@typescript-eslint/space-within-parens": [ + "off", + "never" + ], + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/type-annotation-spacing": "off", + "@typescript-eslint/unified-signatures": "error", + "arrow-body-style": "error", + "arrow-parens": [ + "off", + "as-needed" + ], + "camelcase": "error", + "comma-dangle": "off", + "complexity": "off", + "constructor-super": "error", + "curly": "error", + "dot-notation": "error", + "eol-last": "off", + "eqeqeq": [ + "error", + "smart" + ], + "guard-for-in": "off", + "id-blacklist": [ + "error", + "any", + "Number", + "number", + "String", + "string", + "Boolean", + "boolean", + "Undefined" + ], + "id-match": "error", + "linebreak-style": "off", + "max-classes-per-file": [ + "error", + 1 + ], + "max-len": "off", + "new-parens": "off", + "newline-per-chained-call": "off", + "no-bitwise": "error", + "no-caller": "error", + "no-cond-assign": "error", + "no-console": "off", + "no-debugger": "error", + "no-empty": "error", + "no-eval": "error", + "no-extra-semi": "off", + "no-fallthrough": "off", + "no-invalid-this": "off", + "no-irregular-whitespace": "off", + "no-multiple-empty-lines": "off", + "no-new-wrappers": "error", + "no-shadow": [ + "error", + { + "hoist": "all" + } + ], + "no-throw-literal": "error", + "no-trailing-spaces": "off", + "no-undef-init": "error", + "no-underscore-dangle": "warn", + "no-unsafe-finally": "error", + "no-unused-expressions": "error", + "no-unused-labels": "error", + "no-var": "error", + "object-shorthand": "error", + "one-var": [ + "error", + "never" + ], + "prefer-const": "error", + "quote-props": "off", + "radix": "error", + "sort-imports": "warn", + "space-before-function-paren": "off", + "spaced-comment": "error", + "use-isnan": "error", + "valid-typeof": "off", + } +}; diff --git a/.vscode/settings.json b/.vscode/settings.json index 0b1a7d9..c122d94 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,23 +1,28 @@ { - "editor.renderWhitespace": "boundary", - "files.encoding": "utf8", - "files.trimTrailingWhitespace": true, - "files.insertFinalNewline": true, - "search.exclude": { - "_book/**": true, - ".rpt2_cache/**": true, - "dist/**": true, - "node_modules/**": true, - "typings/**": true - }, - "typescript.tsdk": "./node_modules/typescript/lib", - "[json]": { - "editor.formatOnSave": true - }, - "[javascript]": { - "editor.formatOnSave": true - }, - "[typescript]": { - "editor.formatOnSave": true - } + "[javascript]": { + "editor.formatOnSave": false + }, + "[json]": { + "editor.formatOnSave": true + }, + "[typescript]": { + "editor.formatOnSave": false + }, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + }, + "editor.formatOnSave": true, + "editor.renderWhitespace": "boundary", + "files.encoding": "utf8", + "files.insertFinalNewline": true, + "files.trimTrailingWhitespace": true, + "search.exclude": { + "_book/**": true, + ".rpt2_cache/**": true, + "dist/**": true, + "node_modules/**": true, + "typings/**": true + }, + "typescript.tsdk": "./node_modules/typescript/lib", + "eslint.enable": true } diff --git a/package.json b/package.json index 9f61cab..ef04529 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "//": "If you add or change the names of destinations in screeps.json, make sure you update these scripts to reflect the changes", "scripts": { - "lint": "tslint -p tsconfig.json \"src/**/*.ts\"", + "lint": "eslint \"src/**/*.ts\"", "build": "rollup -c", "push-main": "rollup -c --environment DEST:main", "push-pserver": "rollup -c --environment DEST:pserver", @@ -35,10 +35,17 @@ "@types/screeps": "^3.0.0", "@types/sinon": "^5.0.5", "@types/sinon-chai": "^3.2.0", + "@typescript-eslint/eslint-plugin": "^2.6.1", + "@typescript-eslint/parser": "^2.6.1", + "@typescript-eslint/typescript-estree": "^2.6.1", "chai": "^4.2.0", + "eslint": "^6.6.0", + "eslint-config-prettier": "^6.5.0", + "eslint-plugin-import": "^2.20.0", + "eslint-plugin-prettier": "^3.1.1", "lodash": "^3.10.1", "mocha": "^5.2.0", - "prettier": "^1.14.0", + "prettier": "^1.19.1", "rollup": "^0.63.4", "rollup-plugin-buble": "^0.19.4", "rollup-plugin-clear": "^2.0.7", @@ -51,10 +58,7 @@ "sinon": "^6.3.5", "sinon-chai": "^3.2.0", "ts-node": "^7.0.1", - "tslint": "^5.9.1", - "tslint-config-prettier": "^1.14.0", - "tslint-plugin-prettier": "^1.3.0", - "typescript": "^2.9.2" + "typescript": "^3.7.5" }, "dependencies": { "source-map": "~0.6.1" diff --git a/src/main.ts b/src/main.ts index bd762c4..4e1144a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,4 +1,4 @@ -import { ErrorMapper } from "utils/ErrorMapper"; +import { ErrorMapper } from "./utils/ErrorMapper"; // When compiling TS to JS and bundling with rollup, the line numbers and file names in error messages change // This utility uses source maps to get the line numbers and file names of the original, TS source code diff --git a/tsconfig.test-integration.json b/tsconfig.test-integration.json deleted file mode 100644 index 875a94b..0000000 --- a/tsconfig.test-integration.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "module": "esnext", - "lib": ["esnext"], - "target": "es5", - "moduleResolution": "Node", - "outDir": "dist", - "baseUrl": "src/", - "sourceMap": true, - "strict": true, - "experimentalDecorators": true, - "noImplicitReturns": true, - "noImplicitAny": false, - "allowSyntheticDefaultImports": true, - "allowUnreachableCode": false - }, - "exclude": [ - "node_modules" - ] -} diff --git a/tslint.json b/tslint.json deleted file mode 100644 index adbf116..0000000 --- a/tslint.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "rulesDirectory": "tslint-plugin-prettier", - "extends" : [ - "tslint:recommended", - "tslint-config-prettier" - ], - "rules": { - "forin": false, - "interface-name": [true, "never-prefix"], - "member-ordering": [false], - "no-console": [false], - "no-namespace": [true, "allow-declarations"], - "variable-name": [ - true, - "ban-keywords", - "check-format", - "allow-pascal-case", - "allow-leading-underscore" - ] - } -} From 519a4830eef38564487f01fa37725188b8dbf1b6 Mon Sep 17 00:00:00 2001 From: tcdejong Date: Mon, 3 Feb 2020 18:56:33 +0100 Subject: [PATCH 2/5] restored accidental deleted file --- tsconfig.test-integration.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tsconfig.test-integration.json diff --git a/tsconfig.test-integration.json b/tsconfig.test-integration.json new file mode 100644 index 0000000..875a94b --- /dev/null +++ b/tsconfig.test-integration.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "module": "esnext", + "lib": ["esnext"], + "target": "es5", + "moduleResolution": "Node", + "outDir": "dist", + "baseUrl": "src/", + "sourceMap": true, + "strict": true, + "experimentalDecorators": true, + "noImplicitReturns": true, + "noImplicitAny": false, + "allowSyntheticDefaultImports": true, + "allowUnreachableCode": false + }, + "exclude": [ + "node_modules" + ] +} From e1ad00045a1290d3bd0ca65a0147b9ac77eb9edd Mon Sep 17 00:00:00 2001 From: Resi Respati Date: Wed, 15 Jul 2020 12:56:05 +0700 Subject: [PATCH 3/5] fixed incorrect package versions --- package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index e9b5cef..d82ad28 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/screepers/screeps-typescript-starter#readme", "engines": { - "node": "10.x" + "node": "10.x || 12.x" }, "devDependencies": { "@rollup/plugin-commonjs": "^11.1.0", @@ -51,17 +51,17 @@ "eslint-plugin-prettier": "^3.1.1", "lodash": "^3.10.1", "mocha": "^5.2.0", - "prettier": "^1.19.1", - "rollup": "^0.63.4", - "rollup-plugin-buble": "^0.19.4", + "prettier": "^2.0.4", + "rollup": "^2.6.1", + "rollup-plugin-buble": "^0.19.8", "rollup-plugin-clear": "^2.0.7", "rollup-plugin-nodent": "^0.2.2", "rollup-plugin-screeps": "^1.0.0", "rollup-plugin-typescript2": "^0.27.0", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", - "ts-node": "^7.0.1", - "typescript": "^3.7.5" + "ts-node": "^8.8.2", + "typescript": "^3.8.3" }, "dependencies": { "source-map": "~0.6.1" From f70f624dec294f22bbb2ec97c0366830f5d74b52 Mon Sep 17 00:00:00 2001 From: Resi Respati Date: Wed, 15 Jul 2020 13:07:28 +0700 Subject: [PATCH 4/5] updated eslint config + reformat files --- .eslintrc.js | 278 +++++++++++++++++++++++---------------------------- .prettierrc | 4 +- package.json | 9 +- src/main.ts | 2 +- 4 files changed, 136 insertions(+), 157 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 7cf9063..f1cc6c0 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,155 +1,131 @@ module.exports = { - "env": { - "browser": true, - "es6": true, - "node": true + env: { + browser: true, + es6: true, + node: true + }, + extends: [ + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + "prettier/@typescript-eslint", + "plugin:prettier/recommended", + "plugin:import/errors", + "plugin:import/warnings", + "plugin:import/typescript" + ], + parser: "@typescript-eslint/parser", + parserOptions: { + project: "tsconfig.json", + sourceType: "module" + }, + plugins: ["@typescript-eslint", "import"], + settings: { + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"] }, - "extends": [ - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking", - "prettier/@typescript-eslint", - "plugin:prettier/recommended", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "tsconfig.json", - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint", - ], - "rules": { - "@typescript-eslint/adjacent-overload-signatures": "error", - "@typescript-eslint/array-type": "error", - "@typescript-eslint/ban-types": "error", - "@typescript-eslint/class-name-casing": "error", - "@typescript-eslint/consistent-type-assertions": "error", - "@typescript-eslint/consistent-type-definitions": "error", - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/explicit-member-accessibility": [ - "error", - { - "accessibility": "explicit" - } - ], - "@typescript-eslint/indent": "off", - "@typescript-eslint/interface-name-prefix": "error", - "@typescript-eslint/member-delimiter-style": [ - "off", - { - "multiline": { - "delimiter": "none", - "requireLast": true - }, - "singleline": { - "delimiter": "semi", - "requireLast": false - } - } - ], - "@typescript-eslint/member-ordering": "off", - "@typescript-eslint/no-empty-function": "error", - "@typescript-eslint/no-empty-interface": "error", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-misused-new": "error", - "@typescript-eslint/no-namespace": "error", - "@typescript-eslint/no-parameter-properties": "off", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/no-var-requires": "error", - "@typescript-eslint/prefer-for-of": "error", - "@typescript-eslint/prefer-function-type": "error", - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/quotes": "off", - "@typescript-eslint/semi": [ - "off", - null - ], - "@typescript-eslint/space-within-parens": [ - "off", - "never" - ], - "@typescript-eslint/triple-slash-reference": "error", - "@typescript-eslint/type-annotation-spacing": "off", - "@typescript-eslint/unified-signatures": "error", - "arrow-body-style": "error", - "arrow-parens": [ - "off", - "as-needed" - ], - "camelcase": "error", - "comma-dangle": "off", - "complexity": "off", - "constructor-super": "error", - "curly": "error", - "dot-notation": "error", - "eol-last": "off", - "eqeqeq": [ - "error", - "smart" - ], - "guard-for-in": "off", - "id-blacklist": [ - "error", - "any", - "Number", - "number", - "String", - "string", - "Boolean", - "boolean", - "Undefined" - ], - "id-match": "error", - "linebreak-style": "off", - "max-classes-per-file": [ - "error", - 1 - ], - "max-len": "off", - "new-parens": "off", - "newline-per-chained-call": "off", - "no-bitwise": "error", - "no-caller": "error", - "no-cond-assign": "error", - "no-console": "off", - "no-debugger": "error", - "no-empty": "error", - "no-eval": "error", - "no-extra-semi": "off", - "no-fallthrough": "off", - "no-invalid-this": "off", - "no-irregular-whitespace": "off", - "no-multiple-empty-lines": "off", - "no-new-wrappers": "error", - "no-shadow": [ - "error", - { - "hoist": "all" - } - ], - "no-throw-literal": "error", - "no-trailing-spaces": "off", - "no-undef-init": "error", - "no-underscore-dangle": "warn", - "no-unsafe-finally": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "no-var": "error", - "object-shorthand": "error", - "one-var": [ - "error", - "never" - ], - "prefer-const": "error", - "quote-props": "off", - "radix": "error", - "sort-imports": "warn", - "space-before-function-paren": "off", - "spaced-comment": "error", - "use-isnan": "error", - "valid-typeof": "off", + "import/resolver": { + typescript: {} } + }, + rules: { + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": "error", + "@typescript-eslint/ban-types": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/consistent-type-definitions": "error", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-member-accessibility": [ + "error", + { + accessibility: "explicit" + } + ], + "@typescript-eslint/indent": "off", + "@typescript-eslint/member-delimiter-style": [ + "off", + { + multiline: { + delimiter: "none", + requireLast: true + }, + singleline: { + delimiter: "semi", + requireLast: false + } + } + ], + "@typescript-eslint/member-ordering": "off", + "@typescript-eslint/no-empty-function": "error", + "@typescript-eslint/no-empty-interface": "error", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-parameter-properties": "off", + "@typescript-eslint/no-use-before-define": ["error", { functions: false }], + "@typescript-eslint/no-var-requires": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/quotes": "off", + "@typescript-eslint/semi": ["off", null], + "@typescript-eslint/space-within-parens": ["off", "never"], + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/type-annotation-spacing": "off", + "@typescript-eslint/unified-signatures": "error", + "arrow-body-style": "error", + "arrow-parens": ["off", "as-needed"], + camelcase: "error", + "comma-dangle": "off", + complexity: "off", + "constructor-super": "error", + curly: "error", + "dot-notation": "error", + "eol-last": "off", + eqeqeq: ["error", "smart"], + "guard-for-in": "off", + "id-blacklist": ["error", "any", "Number", "number", "String", "string", "Boolean", "boolean", "Undefined"], + "id-match": "error", + "linebreak-style": "off", + "max-classes-per-file": ["error", 1], + "max-len": "off", + "new-parens": "off", + "newline-per-chained-call": "off", + "no-bitwise": "error", + "no-caller": "error", + "no-cond-assign": "error", + "no-console": "off", + "no-debugger": "error", + "no-empty": "error", + "no-eval": "error", + "no-extra-semi": "off", + "no-fallthrough": "off", + "no-invalid-this": "off", + "no-irregular-whitespace": "off", + "no-multiple-empty-lines": "off", + "no-new-wrappers": "error", + "no-shadow": [ + "error", + { + hoist: "all" + } + ], + "no-throw-literal": "error", + "no-trailing-spaces": "off", + "no-undef-init": "error", + "no-underscore-dangle": "warn", + "no-unsafe-finally": "error", + "no-unused-expressions": "error", + "no-unused-labels": "error", + "no-var": "error", + "object-shorthand": "error", + "one-var": ["error", "never"], + "prefer-const": "error", + "quote-props": "off", + radix: "error", + "sort-imports": "warn", + "space-before-function-paren": "off", + "spaced-comment": "error", + "use-isnan": "error", + "valid-typeof": "off" + } }; diff --git a/.prettierrc b/.prettierrc index 226b3a8..f554efe 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,5 +3,7 @@ "tabWidth": 2, "printWidth": 120, "singleQuote": false, - "trailingComma": "none" + "trailingComma": "none", + "arrowParens": "avoid", + "endOfLine": "auto" } diff --git a/package.json b/package.json index d82ad28..c9e372e 100644 --- a/package.json +++ b/package.json @@ -41,13 +41,14 @@ "@types/screeps": "^3.1.0", "@types/sinon": "^5.0.5", "@types/sinon-chai": "^3.2.0", - "@typescript-eslint/eslint-plugin": "^2.6.1", - "@typescript-eslint/parser": "^2.6.1", - "@typescript-eslint/typescript-estree": "^2.6.1", + "@typescript-eslint/eslint-plugin": "^3.6.1", + "@typescript-eslint/parser": "^3.6.1", + "@typescript-eslint/typescript-estree": "^3.6.1", "chai": "^4.2.0", "eslint": "^6.6.0", "eslint-config-prettier": "^6.5.0", - "eslint-plugin-import": "^2.20.0", + "eslint-import-resolver-typescript": "^2.0.0", + "eslint-plugin-import": "^2.22.0", "eslint-plugin-prettier": "^3.1.1", "lodash": "^3.10.1", "mocha": "^5.2.0", diff --git a/src/main.ts b/src/main.ts index 4e1144a..bd762c4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,4 +1,4 @@ -import { ErrorMapper } from "./utils/ErrorMapper"; +import { ErrorMapper } from "utils/ErrorMapper"; // When compiling TS to JS and bundling with rollup, the line numbers and file names in error messages change // This utility uses source maps to get the line numbers and file names of the original, TS source code From e293892cd6155d2c1247373dcab95b509769efd2 Mon Sep 17 00:00:00 2001 From: Resi Respati Date: Tue, 21 Jul 2020 10:29:28 +0700 Subject: [PATCH 5/5] use `@typescript-eslint/no-unused-expressions` instead --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index f1cc6c0..a676e46 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -61,6 +61,7 @@ module.exports = { "@typescript-eslint/no-misused-new": "error", "@typescript-eslint/no-namespace": "error", "@typescript-eslint/no-parameter-properties": "off", + "@typescript-eslint/no-unused-expressions": "error", "@typescript-eslint/no-use-before-define": ["error", { functions: false }], "@typescript-eslint/no-var-requires": "error", "@typescript-eslint/prefer-for-of": "error", @@ -114,7 +115,6 @@ module.exports = { "no-undef-init": "error", "no-underscore-dangle": "warn", "no-unsafe-finally": "error", - "no-unused-expressions": "error", "no-unused-labels": "error", "no-var": "error", "object-shorthand": "error",