@layerzerolabs/eslint-config-next
Version:
LayerZero Eslint Config
125 lines (122 loc) • 4.38 kB
JavaScript
// @ts-check
/** @type {import('eslint').ESLint.ConfigData} */
const eslintConfig = {
env: {
node: true,
browser: true,
es6: true,
jest: true,
},
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint', 'unused-imports', 'jest-extended'],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:import/recommended',
'plugin:import/typescript',
'plugin:json/recommended-with-comments-legacy',
'plugin:prettier/recommended',
],
ignorePatterns: [
'**/__tests__/*.test.ts',
'**/dist/**',
'**/node_modules/**',
'**/generated/**',
'**/typechain/**',
'**/typechain-types/**',
'**/coverage/**',
'**/exports/**',
],
settings: {
'import/internal-regex': '^@layerzerolabs/',
'import/external-module-folders': ['node_modules', '.yarn'],
'import/parsers': {
'@typescript-eslint/parser': ['.ts', '.tsx'],
},
'import/resolver': {
[require.resolve('eslint-import-resolver-typescript')]: {
alwaysTryTypes: true,
project: [
'apps/**/tsconfig.json',
'config/**/tsconfig.json',
'packages/**/tsconfig.json',
'setting/**/tsconfig.json',
],
},
},
},
rules: {
'unused-imports/no-unused-imports': 'warn',
'unused-imports/no-unused-vars': 'off',
'no-unused-vars': 'off',
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/no-unused-vars': [
'warn',
{
args: 'none',
argsIgnorePattern: '^_|^(args|argv)$',
caughtErrors: 'all',
caughtErrorsIgnorePattern: '^_|^(e|err|error)$',
destructuredArrayIgnorePattern: '^_',
varsIgnorePattern: '^_',
ignoreRestSiblings: true,
},
],
'@typescript-eslint/no-non-null-assertion': 'warn',
'@typescript-eslint/ban-ts-comment': 'warn',
'@typescript-eslint/no-empty-function': 'warn',
'@typescript-eslint/no-non-null-asserted-optional-chain': 'warn',
'@typescript-eslint/no-empty-interface': 'warn',
'@typescript-eslint/no-inferrable-types': 'warn',
'@typescript-eslint/no-var-requires': 'off',
'import/no-unresolved': 'error',
'sort-imports': [
'error',
{
ignoreCase: false,
ignoreDeclarationSort: true,
ignoreMemberSort: false,
memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
allowSeparatedGroups: true,
},
],
'import/order': [
'error',
{
groups: [
'builtin', // Node "builtin" modules (e.g., fs, path)
'external', // "external" modules (e.g., lodash, react)
'internal', // "internal" modules (e.g., modules within the project)
['parent', 'sibling', 'index'], // Parent, sibling, and index modules
'object', // "object" imports (e.g., import { foo } from 'bar')
'type', // "type" imports (e.g., import type { Foo } from 'bar')
],
pathGroups: [
{
pattern: '@layerzerolabs/**',
group: 'internal',
position: 'before',
},
{
pattern: '@/**', // alias for the module itself which is defined in tsconfig.json
group: 'parent',
position: 'before',
}
],
distinctGroup: true,
'newlines-between': 'always',
alphabetize: {
order: 'asc',
caseInsensitive: false,
},
},
],
},
overrides: [
{
files: ['**/*.json'],
extends: ['plugin:json/recommended-with-comments-legacy'],
},
]
};
module.exports = eslintConfig;