diff --git a/package.json b/package.json index 4e0935c..117a627 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "@types/eslint": "^9.6.1", "@unocss/eslint-plugin": "^0.62.3", "@vitest/eslint-plugin": "^1.1.0", + "eslint-config-flat-gitignore": "^0.3.0", "eslint-flat-config-utils": "^0.3.1", "eslint-plugin-command": "^0.2.3", "eslint-plugin-import-x": "^4.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ea75e38..91bde83 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,9 @@ importers: '@vitest/eslint-plugin': specifier: ^1.1.0 version: 1.1.0(@typescript-eslint/utils@8.4.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + eslint-config-flat-gitignore: + specifier: ^0.3.0 + version: 0.3.0(eslint@9.9.1(jiti@1.21.6)) eslint-flat-config-utils: specifier: ^0.3.1 version: 0.3.1 @@ -326,6 +329,10 @@ packages: resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint/compat@1.1.1': + resolution: {integrity: sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-array@0.18.0': resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -927,6 +934,11 @@ packages: peerDependencies: eslint: '>=6.0.0' + eslint-config-flat-gitignore@0.3.0: + resolution: {integrity: sha512-0Ndxo4qGhcewjTzw52TK06Mc00aDtHNTdeeW2JfONgDcLkRO/n/BteMRzNVpLQYxdCC/dFEilfM9fjjpGIJ9Og==} + peerDependencies: + eslint: ^9.5.0 + eslint-config-prettier@9.1.0: resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true @@ -1146,6 +1158,10 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} + find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2274,6 +2290,8 @@ snapshots: '@eslint-community/regexpp@4.11.0': {} + '@eslint/compat@1.1.1': {} + '@eslint/config-array@0.18.0': dependencies: '@eslint/object-schema': 2.1.4 @@ -2874,6 +2892,12 @@ snapshots: eslint: 9.9.1(jiti@1.21.6) semver: 7.6.3 + eslint-config-flat-gitignore@0.3.0(eslint@9.9.1(jiti@1.21.6)): + dependencies: + '@eslint/compat': 1.1.1 + eslint: 9.9.1(jiti@1.21.6) + find-up-simple: 1.0.0 + eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)): dependencies: eslint: 9.9.1(jiti@1.21.6) @@ -3205,6 +3229,8 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-up-simple@1.0.0: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 diff --git a/scripts/generateType.ts b/scripts/generateType.ts index f2fae33..f5276ac 100644 --- a/scripts/generateType.ts +++ b/scripts/generateType.ts @@ -3,6 +3,7 @@ import { flatConfigsToRulesDTS } from 'eslint-typegen/core' import { command, comments, + gitignore, ignores, imports, javascript, @@ -30,6 +31,7 @@ const configs = [ ...comments(), ...ignores(), ...imports(), + ...gitignore(), ...javascript(), ...jsdoc(), ...jsonc(), diff --git a/src/configs/gitignore.ts b/src/configs/gitignore.ts new file mode 100644 index 0000000..88de3cc --- /dev/null +++ b/src/configs/gitignore.ts @@ -0,0 +1,9 @@ +import createGitIgnore from 'eslint-config-flat-gitignore' +import type { ConfigGitIgnoreOptions, TypedConfigItem } from '../types' + +export const gitignore = (options: ConfigGitIgnoreOptions = {}): TypedConfigItem[] => [ + { + ...createGitIgnore(options), + name: 'ntnyq/gitignore', + }, +] diff --git a/src/configs/index.ts b/src/configs/index.ts index ed7aa98..96350c0 100644 --- a/src/configs/index.ts +++ b/src/configs/index.ts @@ -17,6 +17,8 @@ export * from './perfectionist' export * from './regexp' export * from './unocss' + +export * from './gitignore' export * from './command' export * from './vitest' diff --git a/src/core.ts b/src/core.ts index 7d3883f..3c650de 100644 --- a/src/core.ts +++ b/src/core.ts @@ -14,6 +14,7 @@ import { import { command, comments, + gitignore, ignores, imports, javascript, @@ -41,7 +42,13 @@ import type { Arrayable, ConfigOptions, TypedConfigItem } from './types' * Config factory */ export function ntnyq(options: ConfigOptions = {}, customConfig: Arrayable = []) { - const configs: TypedConfigItem[] = [ + const configs: TypedConfigItem[] = [] + + if (options.gitignore ?? true) { + configs.push(...gitignore(resolveSubOptions(options, 'gitignore'))) + } + + configs.push( /** * Basic */ @@ -57,7 +64,7 @@ export function ntnyq(options: ConfigOptions = {}, customConfig: Arrayable