haskou/eslint-config

GitHub: haskou/eslint-config

面向严格 TypeScript 项目的高度规范化共享 ESLint 与 Prettier 配置,通过 type-aware 规则和复杂度约束推动代码走向显式、模块化和类型驱动。

Stars: 0 | Forks: 0

# @haskou/eslint-config [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/haskou/eslint-config/actions/workflows/ci.yml) [![npm version](https://img.shields.io/npm/v/@haskou/eslint-config.svg)](https://www.npmjs.com/package/@haskou/eslint-config) [![Renovate](https://img.shields.io/badge/renovate-enabled-1a1f6c.svg)](https://github.com/haskou/eslint-config/blob/main/renovate.json) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE) 面向 TypeScript 库的共享 ESLint flat config,使用: - ESLint recommended 规则 - TypeScript parser 和 plugin - 通过 `parserOptions.projectService` 实现的 type-aware TypeScript 规则 - Prettier 集成 - SonarJS 规则 - Perfectionist 的 import/object 排序 - unused-imports 清理 ## 安装 使用 npm: ``` npm i -D eslint prettier typescript @haskou/eslint-config ``` 使用 yarn: ``` yarn add -D eslint prettier typescript @haskou/eslint-config ``` 使用 pnpm: ``` pnpm add -D eslint prettier typescript @haskou/eslint-config ``` ESLint plugins 和 parser 是此包的依赖项,因此使用方项目无需手动安装整个 plugin 集合。 ## 代码风格 此配置是具有强烈主观色彩的。它不仅仅是“运行 Prettier 并避免未使用的变量”;它推动项目走向小型、显式、类型驱动的 TypeScript。 整体风格接近后端/服务代码:清晰的模块、每个文件一个核心概念、显式的 public/private 类成员、低认知复杂度,以及极少隐藏在松散类型中的魔法。 在实践中,它鼓励: - 严格的 TypeScript 使用:通过 `parserOptions.projectService` 启用 type-aware linting,floating promises 被视为错误,unsafe returns 被视为错误,而 unsafe calls/arguments 至少被视为警告 - 显式的 API:导出的函数和方法需要边界类型,已知的序列化风格方法(如 `toPrimitives`)除外 - 有纪律的类结构:类成员必须有序排列,需要访问修饰符,文件不应堆积多个顶级 classes/types/interfaces,并且每个文件最多只能有一个类 - 小型方法和简单的控制流:复杂度超过 `8` 会失败,认知复杂度超过 `10` 会失败,嵌套深度超过 `3` 会发出警告,重复或可折叠的分支将由 SonarJS 报告 - 可预测的格式化:2 个空格、分号、单引号、尾随逗号、80 个字符的行宽以及箭头函数括号由 Prettier 处理 - 可预测的排序:imports 必须排序,object keys 排序违规会发出警告,而 unused imports 被视为错误 - 减少重度修改的习惯:参数重新赋值会发出警告,禁止使用 `one-var`,要求使用对象简写,并将旧的 CommonJS `require` imports 视为错误 它有意比普通的前端预设更严格。其目标是让代码读起来像经过维护的应用/领域代码:显式的边界、无趣的 diff、简短的文件、清晰的类 API,以及减少“我以后会记住这个”的假设。 ## ESLint 使用说明 在使用方项目中创建 `eslint.config.mjs`: ``` import haskou from '@haskou/eslint-config'; export default haskou; ``` 然后添加 scripts: ``` { "scripts": { "lint": "eslint .", "lint:fix": "eslint . --fix" } } ``` ## 自定义使用 ``` import { createHaskouConfig } from '@haskou/eslint-config'; export default createHaskouConfig({ ignores: ['generated/**'], }); ``` 可用选项: ``` type HaskouConfigOptions = { files?: string[]; ignores?: string[]; javascriptFiles?: string[]; parserOptions?: Record; testFiles?: string[]; tsconfigRootDir?: string; }; ``` ## Prettier 使用说明 在使用方项目中创建 `prettier.config.mjs`: ``` import prettierConfig from '@haskou/eslint-config/prettier'; export default prettierConfig; ``` ## 发布分支 CI 会根据源分支的前缀,从合并到默认分支的 pull requests 中发布 npm 版本: | 分支前缀 | npm 版本升级 | | --- | --- | | `fix/*` | Patch | | `feat/*` | Minor | | `break/*` | Major | 其他分支名称仅运行验证,不会进行发布。
标签:ESLint, TypeScript, 代码规范, 安全插件, 自定义脚本, 静态检查