@dfinity/eslint-config-oisy-wallet
Version:
Shared ESLint configurations from the Oisy Wallet team
168 lines (149 loc) • 5.03 kB
JavaScript
import localRules from "eslint-plugin-local-rules";
import preferArrow from "eslint-plugin-prefer-arrow";
import { join } from "node:path";
import { existsSync } from "node:fs";
import { includeIgnoreFile } from "@eslint/compat";
import _import from "eslint-plugin-import-x";
import { fileURLToPath } from "node:url";
import { nonNullish } from "@dfinity/utils";
const resolveGitIgnorePath = () => {
const gitIgnore = join(process.cwd(), ".gitignore");
if (existsSync(gitIgnore)) {
return fileURLToPath(new URL(gitIgnore, import.meta.url));
}
return undefined;
};
const gitignorePath = resolveGitIgnorePath();
/**
* The rules below are part of the typescript-eslint `recommended-type-checked` ruleset.
*
* If at some point we have enough of them, we can switch the ruleset on,
* turn off the ones that we don't want, and remove this section.
*
* @link {https://typescript-eslint.io/users/configs/#recommended-type-checked}
* @link {https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/eslintrc/recommended-type-checked.ts}
*/
const partialTypeCheckedRules = {
"@typescript-eslint/no-unnecessary-type-assertion": "error",
"@typescript-eslint/no-unused-vars": [
"warn",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
caughtErrorsIgnorePattern: "^_",
},
],
};
export const eslintRules = [
...(nonNullish(gitignorePath) ? [includeIgnoreFile(gitignorePath)] : []),
{
plugins: {
"local-rules": localRules,
"prefer-arrow": preferArrow,
import: _import,
},
rules: {
...partialTypeCheckedRules,
"@typescript-eslint/consistent-type-definitions": "error",
"@typescript-eslint/consistent-type-imports": "error",
"@typescript-eslint/no-import-type-side-effects": "error",
"@typescript-eslint/no-inferrable-types": "error",
"@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error",
"@typescript-eslint/no-non-null-assertion": "error",
"@typescript-eslint/prefer-nullish-coalescing": "error",
"@typescript-eslint/prefer-reduce-type-parameter": "error",
"arrow-body-style": ["warn", "as-needed"],
curly: "error",
"func-style": "error",
"local-rules/prefer-object-params": "warn",
// We want to enforce ONLY `'newlines-between': 'never'`. The order/sorting is handled elsewhere.
"import/order": [
"error",
{
// disable all default grouping behaviour
groups: [],
// disable alphabetising
alphabetize: {
order: "ignore",
caseInsensitive: false,
},
"newlines-between": "never",
},
],
"import/no-relative-parent-imports": "error",
"object-shorthand": "error",
"prefer-destructuring": "error",
"no-console": ["error", { allow: ["error", "warn"] }],
"no-continue": "warn",
"no-delete-var": "error",
"no-duplicate-imports": "error",
"no-else-return": ["warn", { allowElseIf: false }],
"no-restricted-imports": [
"error",
{
patterns: [
{
group: ["**/dist/**"],
message:
"Do not import directly from a package's /dist/ folder. Use the package's public entry point instead.",
},
],
paths: [
{
name: "@dfinity/ckbtc",
message: "Use @icp-sdk/canisters/ckbtc instead.",
},
{
name: "@dfinity/cketh",
message: "Use @icp-sdk/canisters/cketh instead.",
},
{
name: "@dfinity/cmc",
message: "Use @icp-sdk/canisters/cmc instead.",
},
{
name: "@dfinity/ic-management",
message: "Use @icp-sdk/canisters/ic-management instead.",
},
{
name: "@dfinity/ledger-icp",
message: "Use @icp-sdk/canisters/ledger/icp instead.",
},
{
name: "@dfinity/ledger-icrc",
message: "Use @icp-sdk/canisters/ledger/icrc instead.",
},
{
name: "@dfinity/nns",
message: "Use @icp-sdk/canisters/nns instead.",
},
{
name: "@dfinity/sns",
message: "Use @icp-sdk/canisters/sns instead.",
},
],
},
],
"no-unused-vars": "off",
"no-useless-rename": "error",
"no-useless-return": "error",
"prefer-arrow-callback": "error",
"prefer-arrow/prefer-arrow-functions": [
"error",
{
disallowPrototype: true,
singleReturnOnly: false,
classPropertiesAllowed: false,
},
],
"prefer-template": "error",
"require-await": "error",
},
},
{
files: ["**/*.ts"],
rules: {
"prefer-const": "error",
},
},
];