From 810a15646ecd5237eeddc1f093c6774286d4e43d Mon Sep 17 00:00:00 2001 From: Nathan Smith Date: Sun, 21 Apr 2024 21:46:33 -0400 Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=A4=96=20ci:=20#109=20Upgrade=20to=20?= =?UTF-8?q?flat=20eslint=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 12 +++ .eslintignore | 3 - .eslintrc | 32 ------ eslint.config.mjs | 45 +++++++++ package-lock.json | 243 ++++++++++++++++++++++++++-------------------- package.json | 10 +- 6 files changed, 201 insertions(+), 144 deletions(-) create mode 100644 .editorconfig delete mode 100644 .eslintignore delete mode 100644 .eslintrc create mode 100644 eslint.config.mjs diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..2593d1a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = tab +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = false \ No newline at end of file diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index e019f3c..0000000 --- a/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ - -main.js diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 5bf6dfc..0000000 --- a/.eslintrc +++ /dev/null @@ -1,32 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "env": { "node": true }, - "plugins": ["@typescript-eslint", "unused-imports"], - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended" - ], - "parserOptions": { - "sourceType": "module" - }, - "rules": { - "@typescript-eslint/no-this-alias": "warn", - "@typescript-eslint/no-empty-function": "warn", - "@typescript-eslint/consistent-type-imports": "error", - // replaced by 'unused-imports/no-unused-vars' - "@typescript-eslint/no-unused-vars": "off", - - "unused-imports/no-unused-imports": "error", - "unused-imports/no-unused-vars": [ - "warn", - { - "vars": "all", - "varsIgnorePattern": "^_", - "args": "after-used", - "argsIgnorePattern": "^_" - } - ] - } -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..ca6e34c --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check + +import eslint from "@eslint/js"; +import tseslint from "typescript-eslint"; +import UnusedImportsPlugin from "eslint-plugin-unused-imports"; +import PrettierConfig from "eslint-config-prettier"; + +export default tseslint.config( + { + ignores: ["node_modules/", "main.js", "eslint.config.mjs"], + }, + eslint.configs.recommended, + tseslint.configs.eslintRecommended, + ...tseslint.configs.recommendedTypeChecked, + { + languageOptions: { + parserOptions: { + project: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + plugins: { + "unused-imports": UnusedImportsPlugin, + }, + rules: { + "@typescript-eslint/no-this-alias": "warn", + "@typescript-eslint/no-empty-function": "warn", + "@typescript-eslint/consistent-type-imports": "error", + + // replaced by 'unused-imports/no-unused-vars' + "@typescript-eslint/no-unused-vars": "off", + "unused-imports/no-unused-imports": "error", + "unused-imports/no-unused-vars": [ + "warn", + { + vars: "all", + varsIgnorePattern: "^_", + args: "after-used", + argsIgnorePattern: "^_", + }, + ], + }, + }, + PrettierConfig, +); diff --git a/package-lock.json b/package-lock.json index 1dd2a26..7b26214 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,19 +18,19 @@ }, "devDependencies": { "@codemirror/view": "^6.23.0", + "@eslint/js": "^9.1.1", "@types/node": "^20.11.19", - "@typescript-eslint/eslint-plugin": "^7.0.1", - "@typescript-eslint/parser": "^7.0.1", "builtin-modules": "3.3.0", "esbuild": "0.20.0", - "eslint": "^8.56.0", + "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-unused-imports": "^3.1.0", "obsidian": "latest", "octokit": "^3.1.2", "prettier": "^3.2.5", "tslib": "2.6.2", - "typescript": "5.3.3" + "typescript": "^5.4.5", + "typescript-eslint": "^7.7.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -497,22 +497,22 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.1.1.tgz", + "integrity": "sha512-5WoDz3Y19Bg2BnErkZTp0en+c/i9PvgFS7MBe1+m60HjFr0hrphlAGp4yzI7pxpt4xShln4ZyYp4neJm8hmOkQ==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -555,9 +555,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@nodelib/fs.scandir": { @@ -992,9 +992,9 @@ } }, "node_modules/@types/semver": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", - "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/tern": { @@ -1007,25 +1007,25 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.1.tgz", - "integrity": "sha512-OLvgeBv3vXlnnJGIAgCLYKjgMEU+wBGj07MQ/nxAaON+3mLzX7mJbhRYrVGiVvFiXtwFlkcBa/TtmglHy0UbzQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz", + "integrity": "sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/type-utils": "7.0.1", - "@typescript-eslint/utils": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/type-utils": "7.7.0", + "@typescript-eslint/utils": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1042,19 +1042,19 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.0.1.tgz", - "integrity": "sha512-8GcRRZNzaHxKzBPU3tKtFNing571/GwPBeCvmAUw0yBtfE2XVd0zFKJIMSWkHJcPQi0ekxjIts6L/rrZq5cxGQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz", + "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/typescript-estree": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1070,16 +1070,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.1.tgz", - "integrity": "sha512-v7/T7As10g3bcWOOPAcbnMDuvctHzCFYCG/8R4bK4iYzdFqsZTbXGln0cZNVcwQcwewsYU2BJLay8j0/4zOk4w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1" + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1087,18 +1087,18 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.0.1.tgz", - "integrity": "sha512-YtT9UcstTG5Yqy4xtLiClm1ZpM/pWVGFnkAa90UfdkkZsR1eP2mR/1jbHeYp8Ay1l1JHPyGvoUYR6o3On5Nhmw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz", + "integrity": "sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.0.1", - "@typescript-eslint/utils": "7.0.1", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/utils": "7.7.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1114,12 +1114,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.1.tgz", - "integrity": "sha512-uJDfmirz4FHib6ENju/7cz9SdMSkeVvJDK3VcMFvf/hAShg8C74FW+06MaQPODHfDJp/z/zHfgawIJRjlu0RLg==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", "dev": true, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1127,22 +1127,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.1.tgz", - "integrity": "sha512-SO9wHb6ph0/FN5OJxH4MiPscGah5wjOd0RRpaLvuBv9g8565Fgu0uMySFEPqwPHiQU90yzJ2FjRYKGrAhS1xig==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/visitor-keys": "7.0.1", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1155,21 +1155,21 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.1.tgz", - "integrity": "sha512-oe4his30JgPbnv+9Vef1h48jm0S6ft4mNwi9wj7bX10joGn07QRfqIqFHoMiajrtoU88cIhXf8ahwgrcbNLgPA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", + "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.0.1", - "@typescript-eslint/types": "7.0.1", - "@typescript-eslint/typescript-estree": "7.0.1", - "semver": "^7.5.4" + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "semver": "^7.6.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1180,16 +1180,16 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.1.tgz", - "integrity": "sha512-hwAgrOyk++RTXrP4KzCg7zB2U0xt7RUU0ZdMSCsqF3eKUwkdXUMyTb0qdCuji7VIbcpG62kKTU9M1J1c9UpFBw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.1", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.7.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -1536,16 +1536,16 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -1660,6 +1660,15 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1851,9 +1860,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/fs.realpath": { @@ -1967,9 +1976,9 @@ } }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -2263,9 +2272,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -2584,9 +2593,9 @@ ] }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2689,9 +2698,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", - "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "engines": { "node": ">=16" @@ -2731,9 +2740,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -2743,6 +2752,32 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.7.0.tgz", + "integrity": "sha512-wZZ+7mTQJCn4mGAvzdERtL4vwKGM/mF9cMSMeKUllz3Hgbd1Mdd5L60Q+nJmCio9RB4OyMMr0EX4Ry2Q7jiAyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "7.7.0", + "@typescript-eslint/parser": "7.7.0", + "@typescript-eslint/utils": "7.7.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", diff --git a/package.json b/package.json index f1c7a17..40bd0e0 100644 --- a/package.json +++ b/package.json @@ -17,19 +17,19 @@ "license": "MIT", "devDependencies": { "@codemirror/view": "^6.23.0", + "@eslint/js": "^9.1.1", "@types/node": "^20.11.19", - "@typescript-eslint/eslint-plugin": "^7.0.1", - "@typescript-eslint/parser": "^7.0.1", "builtin-modules": "3.3.0", "esbuild": "0.20.0", - "eslint": "^8.56.0", + "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-unused-imports": "^3.1.0", "obsidian": "latest", "octokit": "^3.1.2", "prettier": "^3.2.5", "tslib": "2.6.2", - "typescript": "5.3.3" + "typescript": "^5.4.5", + "typescript-eslint": "^7.7.0" }, "dependencies": { "@octokit/auth-oauth-device": "^6.0.1", @@ -39,4 +39,4 @@ "@octokit/request": "^8.2.0", "queue": "^7.0.0" } -} \ No newline at end of file +} From 2600878b0b6b8e0051903674036363954dd434cf Mon Sep 17 00:00:00 2001 From: Nathan Smith Date: Sun, 21 Apr 2024 21:59:58 -0400 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=94=A8=20refactor:=20#109=20Resolve?= =?UTF-8?q?=20new=20eslint=20errors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes: #109 --- eslint.config.mjs | 6 ++++++ src/auth-modal.ts | 2 +- src/github/api.ts | 2 +- src/inline/inline.ts | 2 +- src/plugin.ts | 20 ++++++++++++-------- src/query/output.ts | 8 +++++--- src/query/processor.ts | 2 +- src/settings/account.ts | 12 ++++++------ src/settings/settings-tab.ts | 8 ++++---- 9 files changed, 37 insertions(+), 25 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index ca6e34c..9595e3d 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -23,6 +23,12 @@ export default tseslint.config( "unused-imports": UnusedImportsPlugin, }, rules: { + "@typescript-eslint/restrict-template-expressions": "warn", + "@typescript-eslint/no-unsafe-assignment": "warn", + "@typescript-eslint/no-unsafe-argument": "warn", + "@typescript-eslint/no-unsafe-member-access": "warn", + "@typescript-eslint/no-redundant-type-constituents": "warn", + "@typescript-eslint/unbound-method": "warn", "@typescript-eslint/no-this-alias": "warn", "@typescript-eslint/no-empty-function": "warn", "@typescript-eslint/consistent-type-imports": "error", diff --git a/src/auth-modal.ts b/src/auth-modal.ts index b2e1961..ff66fef 100644 --- a/src/auth-modal.ts +++ b/src/auth-modal.ts @@ -36,6 +36,6 @@ export class AuthModal extends Modal { } private copyToClipboard() { - window.navigator.clipboard.writeText(this.verification.user_code); + void window.navigator.clipboard.writeText(this.verification.user_code); } } diff --git a/src/github/api.ts b/src/github/api.ts index c8f3074..2c0888c 100644 --- a/src/github/api.ts +++ b/src/github/api.ts @@ -114,7 +114,7 @@ export class GitHubApi { { url: `${GitHubApi.baseApi}/${org}/${repo}/commits/${ref}/check-runs` }, token, ); - return result.json; + return result.json as CheckRunListResponse; } private async githubRequest( diff --git a/src/inline/inline.ts b/src/inline/inline.ts index adef149..8ece345 100644 --- a/src/inline/inline.ts +++ b/src/inline/inline.ts @@ -161,7 +161,7 @@ function createErrorSection(config: TagConfig, container: HTMLAnchorElement, err container.appendChild(createTagSection(errorIcon)); } -export async function InlineRenderer(el: HTMLElement) { +export function InlineRenderer(el: HTMLElement) { const githubLinks = el.querySelectorAll(`a.external-link[href^="https://github.com"]`); for (const anchor of Array.from(githubLinks)) { if (anchor.href === anchor.innerText) { diff --git a/src/plugin.ts b/src/plugin.ts index 0839c23..2053a14 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -70,16 +70,20 @@ export class GithubLinkPlugin extends Plugin { * Save cache at regular interval */ public setCacheInterval(): void { + const checkCache = async () => { + logger.debug("Checking if cache needs a save."); + if (cache.cacheUpdated) { + PluginData.cache = cache.toJSON(); + await this.saveData(PluginData); + cache.cacheUpdated = false; + logger.info(`Saved request cache with ${PluginData.cache?.length} items.`); + } + }; + window.clearInterval(this.cacheInterval); this.cacheInterval = this.registerInterval( - window.setInterval(async () => { - logger.debug("Checking if cache needs a save."); - if (cache.cacheUpdated) { - PluginData.cache = cache.toJSON(); - await this.saveData(PluginData); - cache.cacheUpdated = false; - logger.info(`Saved request cache with ${PluginData.cache?.length} items.`); - } + window.setInterval(() => { + void checkCache(); }, PluginSettings.cacheIntervalSeconds * 1000), ); } diff --git a/src/query/output.ts b/src/query/output.ts index 63278c1..fdacdf3 100644 --- a/src/query/output.ts +++ b/src/query/output.ts @@ -14,7 +14,7 @@ const ALL_COLUMNS = { [QueryType.Repo]: RepoColumns, }; -export async function renderTable( +export function renderTable( params: BaseParams, result: T, el: HTMLElement, @@ -39,7 +39,9 @@ export async function renderTable( cls: "clickable-icon", attr: { "aria-label": "Refresh Results" }, }); - refreshButton.addEventListener("click", () => renderFn(el, true)); + refreshButton.addEventListener("click", () => { + void renderFn(el, true); + }); setIcon(refreshButton, "refresh-cw"); } @@ -65,7 +67,7 @@ export async function renderTable( const cell = tr.createEl("td"); const renderer = ALL_COLUMNS[params.queryType][col]; if (renderer) { - renderer.cell(row, cell); + void renderer.cell(row, cell); } else { const cellVal = getProp(row, col); if (cellVal !== null) { diff --git a/src/query/processor.ts b/src/query/processor.ts index 9dc4c35..098eb0f 100644 --- a/src/query/processor.ts +++ b/src/query/processor.ts @@ -43,7 +43,7 @@ export async function QueryProcessor( } } if (response) { - renderTable(params, response, element, renderFn, externalLink); + void renderTable(params, response, element, renderFn, externalLink); } }; await renderFn(el); diff --git a/src/settings/account.ts b/src/settings/account.ts index 146db16..a35b55d 100644 --- a/src/settings/account.ts +++ b/src/settings/account.ts @@ -14,7 +14,7 @@ export class AccountSettings { private readonly container: HTMLElement, private readonly saveCallback: () => Promise, private readonly displayCallback: () => void, - private readonly removeCallback: (account: GithubAccount) => void, + private readonly removeCallback: (account: GithubAccount) => Promise, ) {} public render(accounts: GithubAccount[]): void { @@ -145,14 +145,14 @@ export class AccountSettings { text.setValue(account.name); text.onChange((value) => { account.name = value; - this.saveCallback(); + void this.saveCallback(); }); }) .addButton((button) => { button.setIcon("trash"); button.setTooltip("Delete account"); button.onClick(async () => { - this.removeCallback(account); + await this.removeCallback(account); await this.saveCallback(); this.displayCallback(); }); @@ -165,7 +165,7 @@ export class AccountSettings { text.setValue(account.orgs.join(", ")); text.onChange((value) => { account.orgs = value.split(",").map((org) => org.trim()); - this.saveCallback(); + void this.saveCallback(); }); }); @@ -192,7 +192,7 @@ export class AccountSettings { text.setPlaceholder("Client ID"); text.onChange((value) => { account.clientId = value; - this.saveCallback(); + void this.saveCallback(); }); }); } @@ -224,7 +224,7 @@ export class AccountSettings { text.setValue(account.token); text.onChange((value) => { account.token = value; - this.saveCallback(); + void this.saveCallback(); }); }); } diff --git a/src/settings/settings-tab.ts b/src/settings/settings-tab.ts index 4fe682f..31427ce 100644 --- a/src/settings/settings-tab.ts +++ b/src/settings/settings-tab.ts @@ -91,7 +91,7 @@ export class GithubLinkPluginSettingsTab extends PluginSettingTab { slider.onChange((value) => { displayValue.setText(value.toString()); PluginSettings.defaultPageSize = value; - this.saveSettings(); + void this.saveSettings(); }); }); @@ -102,7 +102,7 @@ export class GithubLinkPluginSettingsTab extends PluginSettingTab { toggle.setValue(PluginSettings.tagTooltips); toggle.onChange((value) => { PluginSettings.tagTooltips = value; - this.saveSettings(); + void this.saveSettings(); }); }); @@ -113,7 +113,7 @@ export class GithubLinkPluginSettingsTab extends PluginSettingTab { toggle.setValue(PluginSettings.tagShowPRMergeable); toggle.onChange((value) => { PluginSettings.tagShowPRMergeable = value; - this.saveSettings(); + void this.saveSettings(); }); }); @@ -241,7 +241,7 @@ export class GithubLinkPluginSettingsTab extends PluginSettingTab { dropdown.setValue(PluginSettings.logLevel.toString()); dropdown.onChange((value) => { PluginSettings.logLevel = Number(value); - this.saveSettings(); + void this.saveSettings(); }); }); } From 5cc35c318d7e9b33ca412b962da4ede72cbb41f8 Mon Sep 17 00:00:00 2001 From: Nathan Smith Date: Sun, 21 Apr 2024 22:05:11 -0400 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=94=A8=20refactor:=20#109=20Remove=20?= =?UTF-8?q?unused=20void=20operator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/query/processor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/query/processor.ts b/src/query/processor.ts index 098eb0f..9dc4c35 100644 --- a/src/query/processor.ts +++ b/src/query/processor.ts @@ -43,7 +43,7 @@ export async function QueryProcessor( } } if (response) { - void renderTable(params, response, element, renderFn, externalLink); + renderTable(params, response, element, renderFn, externalLink); } }; await renderFn(el);