{"id":15024837,"url":"https://github.com/lincenying/eslint-config","last_synced_at":"2025-10-05T01:48:11.751Z","repository":{"id":150111373,"uuid":"622865772","full_name":"lincenying/eslint-config","owner":"lincenying","description":"vue3(2)/ts/react 的eslint 扁平化规则","archived":false,"fork":false,"pushed_at":"2025-09-09T02:06:15.000Z","size":2824,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-19T19:52:02.480Z","etag":null,"topics":["eslint","flat","typescript","vue2","vue3"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lincenying.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-04-03T08:14:41.000Z","updated_at":"2025-09-09T02:06:18.000Z","dependencies_parsed_at":"2023-09-22T17:59:42.431Z","dependency_job_id":"8ab0b574-092d-4287-a761-c1415e99bbdf","html_url":"https://github.com/lincenying/eslint-config","commit_stats":null,"previous_names":["lincenying/eslint-config-lcy"],"tags_count":90,"template":false,"template_full_name":null,"purl":"pkg:github/lincenying/eslint-config","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lincenying%2Feslint-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lincenying%2Feslint-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lincenying%2Feslint-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lincenying%2Feslint-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lincenying","download_url":"https://codeload.github.com/lincenying/eslint-config/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lincenying%2Feslint-config/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278399608,"owners_count":25980331,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eslint","flat","typescript","vue2","vue3"],"created_at":"2024-09-24T20:01:02.707Z","updated_at":"2025-10-05T01:48:11.745Z","avatar_url":"https://github.com/lincenying.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @lincy/eslint-config Eslint扁平化规则\n\n[![npm](https://img.shields.io/npm/v/@lincy/eslint-config?color=444\u0026label=)](https://npmjs.com/package/@lincy/eslint-config)\n\n\u003e Thanks to [sxzz/eslint-config](https://github.com/sxzz/eslint-config) and [antfu/eslint-config](https://github.com/antfu/eslint-config) for the inspiration and reference.\n\n- 单引号，无结尾分号\n- 自动格式化\n- 专为与 TypeScript、Vue(2/3)、React 一起使用而设计，开箱即用\n- 也适用于 json、yaml、markdown\n- import导入排序, 对象字⾯量项尾逗号\n- 合理的默认值，最佳实践，只需一行配置\n- .gitignore默认支持\n- 需要 ESLint v9.5.0+\n- [ESLint Flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new)\n- 使用 [ESLint Stylistic](https://github.com/eslint-stylistic/eslint-stylistic)\n- **风格原则**: 读取最小，差异稳定\n\n## Usage\n\n### Install\n\n```bash\npnpm add -D eslint @lincy/eslint-config\n```\n\n### Create config file\n\n```js\n// eslint.config.mjs\nimport lincy from '@lincy/eslint-config'\n\nexport default lincy()\n```\n\n\u003e 通常您不需要`.eslintignore`，因为它已由预设提供。\n\n### 在 package.json 中添加脚本\n\n```json\n{\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"lint:fix\": \"eslint . --fix\"\n  }\n}\n```\n\n### VS Code support (保存时自动修复)\n\n安装 [VS Code ESLint扩展](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)\n\n将以下设置添加到您的“settings.json”：\n\n```jsonc\n{\n  // 禁用默认的格式化\n  \"prettier.enable\": false,\n  \"editor.formatOnSave\": false,\n\n  // 开启自动修复\n  \"editor.codeActionsOnSave\": {\n    \"source.fixAll.eslint\": \"explicit\",\n    \"source.organizeImports\": \"never\"\n  },\n\n  // 在 IDE 中静默样式规则，但仍会自动修复它们\n  \"eslint.rules.customizations\": [\n    { \"rule\": \"style/*\", \"severity\": \"off\" },\n    { \"rule\": \"format/*\", \"severity\": \"off\" },\n    { \"rule\": \"*-indent\", \"severity\": \"off\" },\n    { \"rule\": \"*-spacing\", \"severity\": \"off\" },\n    { \"rule\": \"*-spaces\", \"severity\": \"off\" },\n    { \"rule\": \"*-order\", \"severity\": \"off\" },\n    { \"rule\": \"*-dangle\", \"severity\": \"off\" },\n    { \"rule\": \"*-newline\", \"severity\": \"off\" },\n    { \"rule\": \"*quotes\", \"severity\": \"off\" },\n    { \"rule\": \"*semi\", \"severity\": \"off\" }\n  ],\n\n  // 为所有支持的语言启用 eslint\n  \"eslint.validate\": [\n    \"javascript\",\n    \"javascriptreact\",\n    \"typescript\",\n    \"typescriptreact\",\n    \"vue\",\n    \"html\",\n    \"markdown\",\n    \"json\",\n    \"jsonc\",\n    \"yaml\",\n    \"toml\",\n    \"xml\",\n    \"gql\",\n    \"graphql\",\n    \"css\",\n    \"less\",\n    \"scss\",\n    \"pcss\",\n    \"postcss\"\n  ]\n}\n```\n\n## 定制化\n\n通常你只需要导入 `lincy` 预设：\n\n#### esm\n\n如果 package.json 中开启了`\"type\": \"module\",`\n\n```js\n// eslint.config.mjs\nimport lincy from '@lincy/eslint-config'\n\n// or\n// import { lincy } from '@lincy/eslint-config'\n\nexport default lincy()\n```\n\n#### cjs\n\n如果 package.json 中没有开启`\"type\": \"module\",`\n\n```js\n// eslint.config.js\nconst lincy = require('@lincy/eslint-config').lincy\n\nmodule.exports = lincy()\n```\n\n您可以单独配置每个功能，例如：\n\n```js\n// eslint.config.js\nimport lincy from '@lincy/eslint-config'\n\nexport default lincy({\n    /**\n     * 是否启用 stylistic 格式化规则\n     * @default 默认值: true\n     * @example 可选: false |\n     * {\n     *   indent?: number | 'tab';\n     *   quotes?: 'single' | 'double';\n     *   jsx?: boolean;\n     *   semi?: boolean;\n     *   lessOpinionated?: boolean;\n     * }\n     */\n    stylistic: true,\n    /**\n     * 是否启用 typescript 规则\n     * @default 默认值: 检测是否安装typescript依赖,\n     * @example 可选: false | true |\n     * {\n     *   files?: string[], // 自定义 glob 覆盖 “files” 选项\n     *   componentExts: string[], // 组件的附加扩展\n     *   parserOptions: {};\n     *   filesTypeAware: string[],\n     *   ignoresTypeAware?: string[],\n     *   tsconfigPath?: string,\n     *   type: 'app' | 'lib'\n     * }\n     */\n    typescript: true,\n    /**\n     * 是否启用 vue 规则\n     * @default 默认值: 检测是否安装vue依赖,\n     * @example 可选: false | true |\n     * {\n     *   files?: string[]; // 自定义 glob 覆盖 “files” 选项\n     *   stylistic: boolean; // 是否开启 stylistic\n     *   sfcBlocks: boolean; // 为 Vue SFC 创建虚拟文件以启用 linting\n     *   typescript: boolean; // 是否开启 typescript\n     * }\n     */\n    vue: true,\n    /**\n     * 是否启用 jsx 规则\n     * @default 默认值: true,\n     * @example 可选: false\n     */\n    jsx: true,\n    /**\n     * 是否启用 pnpm（工作区/目录）支持\n     * @default 默认值: false,\n     * @example 可选: true\n     */\n    pnpm: false,\n    /**\n     * 是否启用 react 规则\n     * @default 默认值: 检测是否安装react依赖,\n     * @example 可选: false | true |\n     * {\n     *   files?: string[], // 自定义 glob 覆盖 “files” 选项\n     *   filesTypeAware?: string[], // 应该识别类型的文件的全局模式.\n     *   ignoresTypeAware?: string[], // 不应具有类型感知的文件的 Glob 模式\n     *   tsconfigPath?: string, // 提供此选项后，将启用类型感知规则\n     * }\n     */\n    react: true,\n    /**\n     * 是否启用 unocss 规则\n     * @default 默认值: false,\n     * @example 可选: true |\n     * {\n     *   attributify?: boolean; // 启用 attributify 支持.\n     *   strict?: boolean; // 启用严格模式，抛出有关阻止列表类的错误\n     * }\n     */\n    unocss: true,\n    /**\n     * 是否启用 jsonc 规则\n     * @default 默认值: true,\n     * @example 可选: false |\n     * {\n     *   files?: string[]; // 自定义 glob 覆盖 “files” 选项\n     *   stylistic: boolean; // 是否开启 stylistic\n     * }\n     */\n    jsonc: false,\n    /**\n     * 是否启用 yaml 规则\n     * @default 默认值: true,\n     * @example 可选: false |\n     * {\n     *   files?: string[]; // 自定义 glob 覆盖 “files” 选项\n     *   stylistic: boolean; // 是否开启 stylistic\n     * }\n     */\n    yaml: false,\n    /**\n     * 是否启用 toml 规则\n     * @default 默认值: false,\n     * @example 可选: true |\n     * {\n     *   files?: string[]; // 自定义 glob 覆盖 “files” 选项\n     *   stylistic: boolean; // 是否开启 stylistic\n     * }\n     */\n    toml: false,\n    /**\n     * 是否启用 .gitignore 文件\n     * @default 默认值: true,\n     * @example 可选: false | { ignores?: string[] }\n     */\n    gitignore: false,\n    /**\n     * 是否启用 test 规则\n     * @default 默认值: true,\n     * @example 可选: false | { files?: string[] }\n     */\n    test: false,\n    /**\n     * 是否启用 markdown 规则\n     * @default 默认值: true,\n     * @example 可选: false | { files?: string[] }\n     */\n    markdown: false,\n    /**\n     * 是否启用 regexp 规则\n     * @default 默认值: true,\n     * @example 可选: false | { level?: 'error' | 'warn' }\n     */\n    regexp: true,\n    /**\n     * 是否启用 formatters 规则\n     * @default 默认值: false,\n     * @example 可选: true |\n     * {\n     *   css?: 'prettier' | boolean;\n     *   html?: 'prettier' | boolean;\n     *   graphql?: 'prettier' | boolean;\n     *   markdown?: 'prettier' | 'dprint' | boolean\n     * }\n     */\n    formatters: false,\n    /**\n     * 覆盖规则\n     */\n    overrides: {\n        comments: {\n            // comments 规则\n        },\n        ignores: [\n            // 忽略的路径/文件\n        ],\n        imports: {\n            // imports 规则\n        },\n        javascript: {\n            // javascript 规则\n        },\n        jsdoc: {\n            // jsdoc 规则\n        },\n        jsonc: {\n            // jsonc 规则\n        },\n        markdown: {\n            // markdown 规则\n        },\n        nextjs: {\n            // nextjs 规则\n        },\n        node: {\n            // node 规则\n        },\n        perfectionist: {\n            // perfectionist 规则\n        },\n        react: {\n            // react 规则\n        },\n        regexp: {\n            // regexp 规则\n        },\n        stylistic: {\n            // stylistic 规则\n        },\n        test: {\n            // test 规则\n        },\n        toml: {\n            // toml 规则\n        },\n        typescript: {\n            // typescript 规则\n        },\n        unicorn: {\n            // unicorn 规则\n        },\n        unocss: {\n            // unocss 规则\n        },\n        vue: {\n            // vue 规则\n        },\n        yaml: {\n            // yaml 规则\n        },\n    },\n\n    // 工厂函数第一个参数默认为各规则的开关, 但是也可以作为追加规则使用, 当包含以下键名将会自动整合到一个规则里\n    languageOptions: {},\n    linterOptions: {},\n    processor: {},\n    plugins: {},\n    rules: [],\n    settings: {}\n})\n```\n\n`lincy` 工厂函数还接受任意数量的自定义配置覆盖\n下面示例为添加`auto-import`生成的全局方法\n\n```js\n// eslint.config.js\nimport { readFileSync } from 'node:fs'\n\nimport lincy from '@lincy/eslint-config'\nimport plugin from '@unocss/eslint-plugin'\n\nconst autoImport = JSON.parse(readFileSync(new URL('./.eslintrc-auto-import.json', import.meta.url)))\n\nexport default lincy(\n    {\n        // 配置, 参考上一个代码块\n        // 启用 unocss\n        unocss: true\n    },\n    // 启用 auto-import 生成的 .eslintrc-auto-import.json\n    {\n        languageOptions: {\n            globals: {\n                ...autoImport.globals,\n                // 其他 globals\n            },\n        },\n    },\n    // 你还可以继续配置多个 ESLint Flat Configs\n    {\n        files: ['**/*.ts'],\n        rules: {\n            'perfectionist/sort-objects': 'error',\n        },\n    },\n)\n```\n\n您还可以导入非常细粒度的配置并根据需要组合它们：\n\n\u003cdetails\u003e\n\u003csummary\u003e点击展开例子\u003c/summary\u003e\n\n```js\n// eslint.config.js\nimport {\n    combine,\n    comments,\n    disables,\n    formatters,\n    ignores,\n    imports,\n    javascript,\n    jsdoc,\n    jsonc,\n    jsx,\n    markdown,\n    node,\n    perfectionist,\n    pnpm,\n    react,\n    regexp,\n    sortPackageJson,\n    sortTsconfig,\n    stylistic,\n    test,\n    toml,\n    typescript,\n    unicorn,\n    unocss,\n    vue,\n    yaml,\n} from '@lincy/eslint-config'\n\nexport default combine(\n    ignores(),\n    javascript(/* Options */),\n    comments(),\n    disables(),\n    formatters(),\n    node(),\n    jsdoc(),\n    imports(),\n    unicorn(),\n    perfectionist(),\n    typescript(/* Options */),\n    stylistic(/* Options */),\n    vue(),\n    pnpm(),\n    react(/* Options */),\n    unocss(/* Options */),\n    jsonc(),\n    jsx(),\n    yaml(),\n    toml(),\n    test(),\n    markdown(),\n    regexp(),\n)\n```\n\n\u003c/details\u003e\n\n查看 [configs](https://github.com/lincenying/eslint-config/blob/main/src/configs) 和 [factory](https://github.com/lincenying/eslint-config/blob/main/src/factory.ts）了解更多详细信息。\n\n### 插件重命名\n\n由于扁平化配置支持显式提供了插件名称，因此我们重命名了一些插件以使它们更加一致并隐藏实现细节。\n\n| New Prefix | Original Prefix        | Source Plugin                                                                                         |\n| ---------- | ---------------------- | ----------------------------------------------------------------------------------------------------- |\n| `import/*` | `import-lite/*`        | [eslint-plugin-import-lite](https://github.com/9romise/eslint-plugin-import-lite)                     |\n| `node/*`   | `n/*`                  | [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n)                                |\n| `yaml/*`   | `yml/*`                | [eslint-plugin-yml](https://github.com/ota-meshi/eslint-plugin-yml)                                   |\n| `ts/*`     | `@typescript-eslint/*` | [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint)            |\n| `style/*`  | `@stylistic/*`         | [@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic)                      |\n| `next/*`   | `@next/next`           | [@next/eslint-plugin-next](https://github.com/vercel/next.js/tree/canary/packages/eslint-plugin-next) |\n\n当您想要覆盖规则或内联禁用它们时，您需要更新到新的前缀：\n\n```diff\n-// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n+// eslint-disable-next-line ts/consistent-type-definitions\ntype foo = { bar: 2 }\n```\n\n### 规则覆盖\n\n某些规则仅在特定文件中启用，例如，“ts/_”规则仅在“.ts”文件中启用，“vue/_”规则仅在“.vue”文件中启用。 如果要覆盖规则，则需要指定文件扩展名：\n\n```js\n// eslint.config.js\nimport lincy from '@lincy/eslint-config'\n\nexport default lincy(\n    {\n        vue: true,\n        jsx: true,\n        react: true,\n        typescript: true,\n        stylistic: true,\n        gitignore: true,\n        test: true,\n        jsonc: true,\n        yaml: true,\n        markdown: true,\n        regexp: true,\n        overrides: {}\n    },\n    {\n        // 记得在这里指定文件 glob，否则可能会导致 vue 插件处理非 vue 文件\n        files: ['**/*.vue'],\n        rules: {\n            'vue/operator-linebreak': ['error', 'before'],\n        },\n    },\n    {\n        // 如果没有 `files`，它们是所有文件的通用规则\n        rules: {\n            'style/semi': ['error', 'never'],\n        },\n    }\n)\n```\n\n还可以使用“overrides”选项以使其更容易：\n\n```js\n// eslint.config.js\nimport lincy from '@lincy/eslint-config'\n\nexport default lincy({\n    stylistic: {\n        indent: 4\n    },\n    overrides: {\n        // 覆盖 vue 规则\n        vue: {\n            'vue/operator-linebreak': ['error', 'before'],\n        },\n        // 覆盖 react 规则\n        react: {\n            'react/forbid-component-props': 'error',\n        },\n        // 覆盖 ts 规则\n        typescript: {\n            'ts/consistent-type-definitions': ['error', 'interface'],\n        },\n        // 覆盖 js 规则\n        javascript: {\n            'no-undef': 'off',\n        },\n        // 覆盖 stylistic 规则\n        stylistic: {\n            'antfu/consistent-list-newline': 'error',\n        },\n        yaml: {},\n        jsonc: {},\n        markdown: {},\n        test: {},\n        regexp: {},\n\n        // 追加自定义排除文件(夹)\n        ignores: [\n            '**/assets',\n            '**/static',\n        ]\n        // ...\n    }\n})\n```\n\n### 可选配置\n\n提供了一些可选配置，默认情况下不包含它们的依赖项\n\n#### Formatters\n\n使用外部格式化程序来格式化 ESLint 无法处理的文件（.css、.html 等）。 由 [eslint-plugin-format](https://github.com/antfu/eslint-plugin-format) 提供支持\n\n```ts\n// eslint.config.js\nimport lincy from '@lincy/eslint-config'\n\nexport default lincy({\n    formatters: {\n        /**\n         * 格式化 CSS、LESS、SCSS 文件，以及 Vue 中的 `\u003cstyle\u003e` 模块\n         * 默认使用 Prettier\n         */\n        css: true,\n        /**\n         * 格式化 graphql 文件\n         * 默认使用 Prettier\n         */\n        graphql: true,\n        /**\n         * 格式化 HTML 文件\n         * 默认使用 Prettier\n         */\n        html: true,\n        /**\n         * 格式化 Markdown 文件\n         * 支持 Prettier 和 dprint\n         * 默认使用 Prettier\n         */\n        markdown: 'prettier',\n        /**\n         * 格式化 svg 文件\n         * 需要安装 @prettier/plugin-xml 插件\n         * 默认使用 Prettier\n         */\n        svg: 'prettier',\n        /**\n         * 格式化 xml 文件\n         * 需要安装 @prettier/plugin-xml 插件\n         * 默认使用 Prettier\n         */\n        xml: 'prettier'\n    }\n})\n```\n\n运行“npx eslint”会提示您安装所需的依赖项，当然，也可以手动安装它们：\n\n```bash\npnpm add eslint-plugin-format -D\n```\n\n#### React\n\n当检测到依赖安装了`react`, 则默认开启\n\n```ts\n// eslint.config.js\nimport lincy from '@lincy/eslint-config'\n\nexport default lincy({\n    react: true\n})\n```\n\n运行“npx eslint”会提示您安装所需的依赖项，当然，也可以手动安装它们：\n\n```bash\npnpm i -D @eslint-react/eslint-plugin eslint-plugin-react-hooks eslint-plugin-react-refresh\n```\n\n#### Next.js\n\n要启用 nextjs 支持，需要显式打开它\n\n```ts\n// eslint.config.js\nimport lincy from '@lincy/eslint-config'\n\nexport default lincy({\n    nextjs: true\n})\n```\n\n运行“npx eslint”会提示您安装所需的依赖项，当然，也可以手动安装它们：\n\n```bash\npnpm i -D @next/eslint-plugin-next\n```\n\n#### UnoCSS\n\n要启用 UnoCSS 支持，需要显式打开它\n\n```js\n// eslint.config.js\nimport lincy from '@lincy/eslint-config'\n\nexport default lincy({\n    unocss: true,\n})\n```\n\n运行“npx eslint”会提示您安装所需的依赖项，当然，也可以手动安装它们：\n\n```bash\npnpm i -D @unocss/eslint-plugin\n```\n\n### 可选规则\n\n#### `perfectionist` (sorting)\n\n这个插件 [`eslint-plugin-perfectionist`](https://github.com/azat-io/eslint-plugin-perfectionist) 允许你排序对象键名，导入，自动修复等。\n\n安装了插件，但默认情况下没有启用任何规则。\n\n建议使用[configuration comments]单独选择每个文件。(https://eslint.org/docs/latest/use/configure/rules#using-configuration-comments-1).\n\n```ts\n/* eslint perfectionist/sort-objects: \"error\" */\nconst objectWantedToSort = {\n    a: 2,\n    b: 1,\n    c: 3,\n}\n/* e slint perfectionist/sort-objects: \"off\" */\n```\n\n### 类型感知规则\n\n您可以选择通过将选项对象传递给“typescript”配置来启用[类型感知规则](https://typescript-eslint.io/linting/typed-linting/)：\n\n```js\n// eslint.config.js\nimport lincy from '@lincy/eslint-config'\n\nexport default lincy({\n    typescript: {\n        tsconfigPath: 'tsconfig.json',\n        // tsconfigPath: ['tsconfig.json'], // 也可以是数组\n    },\n})\n```\n\n### Lint Staged\n\n如果你想在每次提交之前应用 lint 和自动修复，你可以将以下内容添加到你的 `package.json` 中：\n\n```json\n{\n  \"simple-git-hooks\": {\n    \"pre-commit\": \"pnpm lint-staged\"\n  },\n  \"lint-staged\": {\n    \"*\": \"eslint --fix\"\n  }\n}\n```\n\n然后\n\n```bash\nnpm i -D lint-staged simple-git-hooks\n```\n\n## License\n\n[MIT]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flincenying%2Feslint-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flincenying%2Feslint-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flincenying%2Feslint-config/lists"}