diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..a676e46 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,131 @@ +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", "import"], + settings: { + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"] + }, + "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-unused-expressions": "error", + "@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-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/.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 336d922..c9e372e 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", @@ -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", @@ -41,7 +41,15 @@ "@types/screeps": "^3.1.0", "@types/sinon": "^5.0.5", "@types/sinon-chai": "^3.2.0", + "@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-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", "prettier": "^2.0.4", @@ -54,9 +62,6 @@ "sinon": "^6.3.5", "sinon-chai": "^3.2.0", "ts-node": "^8.8.2", - "tslint": "^6.1.1", - "tslint-config-prettier": "^1.18.0", - "tslint-plugin-prettier": "^2.3.0", "typescript": "^3.8.3" }, "dependencies": { 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" - ] - } -}