diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a82d5b42..7c1b62fb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,9 +10,9 @@ jobs: fail-fast: false matrix: node-version: + - 20 - 18 - 16 - - 14 steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 diff --git a/config/plugins.cjs b/config/plugins.cjs index 128b451a..b9f7d6c9 100644 --- a/config/plugins.cjs +++ b/config/plugins.cjs @@ -153,6 +153,9 @@ module.exports = { }, ], + // Temporarily disabled because it's buggy with TypeScript: https://github.com/sindresorhus/eslint-plugin-unicorn/issues/2175 + 'unicorn/no-empty-file': 'off', + // TODO: Disabled for now until it becomes more stable: https://github.com/sindresorhus/eslint-plugin-unicorn/search?q=consistent-destructuring+is:issue&state=open&type=issues 'unicorn/consistent-destructuring': 'off', diff --git a/package.json b/package.json index 85a3941f..2ca86458 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "type": "module", "bin": "./cli.js", "engines": { - "node": ">=14.16" + "node": ">=16" }, "scripts": { "test:clean": "find ./test -type d -name 'node_modules' -prune -not -path ./test/fixtures/project/node_modules -exec rm -rf '{}' +", @@ -52,51 +52,46 @@ "javascript", "typescript" ], - "bundledDependencies": [ - "@typescript-eslint/eslint-plugin", - "@typescript-eslint/parser", - "eslint-config-xo-typescript" - ], "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@typescript-eslint/eslint-plugin": "^5.59.1", - "@typescript-eslint/parser": "^5.59.1", + "@eslint/eslintrc": "^2.1.0", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", "arrify": "^3.0.0", - "cosmiconfig": "^8.1.3", + "cosmiconfig": "^8.2.0", "define-lazy-prop": "^3.0.0", - "eslint": "^8.37.0", + "eslint": "^8.45.0", "eslint-config-prettier": "^8.8.0", "eslint-config-xo": "^0.43.1", - "eslint-config-xo-typescript": "^0.57.0", + "eslint-config-xo-typescript": "^1.0.0", "eslint-formatter-pretty": "^5.0.0", "eslint-import-resolver-webpack": "^0.13.2", "eslint-plugin-ava": "^14.0.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-import": "^2.27.5", - "eslint-plugin-n": "^15.7.0", + "eslint-plugin-n": "^16.0.1", "eslint-plugin-no-use-extend-native": "^0.5.0", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-unicorn": "^46.0.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-unicorn": "^48.0.0", "esm-utils": "^4.1.2", "find-cache-dir": "^4.0.0", "find-up": "^6.3.0", "get-stdin": "^9.0.0", - "get-tsconfig": "^4.5.0", - "globby": "^13.1.2", + "get-tsconfig": "^4.6.2", + "globby": "^13.2.2", "imurmurhash": "^0.1.4", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash-es": "^4.17.21", - "meow": "^11.0.0", + "meow": "^12.0.1", "micromatch": "^4.0.5", "open-editor": "^4.0.0", - "prettier": "^2.8.7", - "semver": "^7.3.8", - "slash": "^5.0.0", + "prettier": "^3.0.0", + "semver": "^7.5.4", + "slash": "^5.1.0", "to-absolute-glob": "^3.0.0", - "typescript": "^5.0.3" + "typescript": "^5.1.6" }, "devDependencies": { - "ava": "^5.1.0", + "ava": "^5.3.1", "eslint-config-xo-react": "^0.27.0", "eslint-plugin-react": "^7.31.10", "eslint-plugin-react-hooks": "^4.6.0", @@ -104,7 +99,7 @@ "nyc": "^15.1.0", "proxyquire": "^2.1.3", "temp-write": "^5.0.0", - "webpack": "^5.77.0" + "webpack": "^5.88.1" }, "xo": { "ignores": [ diff --git a/readme.md b/readme.md index ab1b778f..7c35fdbe 100644 --- a/readme.md +++ b/readme.md @@ -39,8 +39,8 @@ It uses [ESLint](https://eslint.org) underneath, so issues regarding built-in ru ## Install -``` -$ npm install xo --save-dev +```sh +npm install xo --save-dev ``` *You must install XO locally. You can run it directly with `$ npx xo`.* diff --git a/test/options-manager.js b/test/options-manager.js index 3910bc5c..e8aa9be0 100644 --- a/test/options-manager.js +++ b/test/options-manager.js @@ -99,7 +99,7 @@ test('buildConfig: prettier: true', t => { trailingComma: 'all', }]); // eslint-prettier-config must always be last - t.is(config.baseConfig.extends[config.baseConfig.extends.length - 1], 'plugin:prettier/recommended'); + t.is(config.baseConfig.extends.at(-1), 'plugin:prettier/recommended'); // Indent rule is not enabled t.is(config.baseConfig.rules.indent, undefined); // Semi rule is not enabled @@ -125,8 +125,8 @@ test('buildConfig: prettier: true, typescript file', t => { }]); // eslint-prettier-config must always be last - t.is(config.baseConfig.extends[config.baseConfig.extends.length - 1], 'plugin:prettier/recommended'); - t.regex(config.baseConfig.extends[config.baseConfig.extends.length - 2], /xo-typescript/); + t.is(config.baseConfig.extends.at(-1), 'plugin:prettier/recommended'); + t.regex(config.baseConfig.extends.at(-2), /xo-typescript/); // Indent rule is not enabled t.is(config.baseConfig.rules.indent, undefined); @@ -430,7 +430,7 @@ test('buildConfig: extends', t => { test('buildConfig: typescript', t => { const config = manager.buildConfig({ts: true, tsConfigPath: './tsconfig.json'}); - t.regex(config.baseConfig.extends[config.baseConfig.extends.length - 1], /xo-typescript/); + t.regex(config.baseConfig.extends.at(-1), /xo-typescript/); t.is(config.baseConfig.parser, require.resolve('@typescript-eslint/parser')); t.deepEqual(config.baseConfig.parserOptions, { warnOnUnsupportedTypeScriptVersion: false,