Skip to content

Commit

Permalink
feat: eslint typescript
Browse files Browse the repository at this point in the history
  • Loading branch information
mouse484 committed Jun 22, 2024
1 parent fbd8721 commit 5a696f2
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 177 deletions.
2 changes: 1 addition & 1 deletion eslint.config.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { mouse } from '@mouse_484/eslint-config'

export default mouse()
export default mouse({})
260 changes: 89 additions & 171 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions packages/eslint/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,8 @@
"main": "src/index.js",
"dependencies": {
"@antfu/eslint-config": "^2.21.1"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^7.13.1"
}
}
50 changes: 45 additions & 5 deletions packages/eslint/src/index.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import antfu, { GLOB_SRC } from '@antfu/eslint-config'
// @ts-check
import antfu, {
GLOB_SRC,
GLOB_TS,
GLOB_TSX,
interopDefault,
renameRules,
resolveSubOptions,
} from '@antfu/eslint-config'

/**
* @typedef {import('@antfu/eslint-config').OptionsConfig} OptionsConfig
* @typedef {import('@antfu/eslint-config').TypedFlatConfigItem} TypedFlatConfigItem
* @typedef {import('@antfu/eslint-config').Awaitable} Awaitable
* @typedef {import('@antfu/eslint-config').TypedFlatConfigItem} TypedFlatConfigItem
*/

/**
Expand All @@ -13,12 +19,12 @@ import antfu, { GLOB_SRC } from '@antfu/eslint-config'
*
* @param {OptionsConfig & TypedFlatConfigItem} options
* The options for generating the ESLint configurations.
* @param {Awaitable<TypedFlatConfigItem | TypedFlatConfigItem[]>[]} userConfigs
* @param {import('@antfu/eslint-config').Awaitable<TypedFlatConfigItem | TypedFlatConfigItem[]>[]} userConfigs
* The user configurations to be merged with the generated configurations.
* @returns {Promise<TypedFlatConfigItem[]>}
* The merged ESLint configurations.
*/
export function mouse(options, ...userConfigs) {
export async function mouse(options, ...userConfigs) {
/** @type {TypedFlatConfigItem[]} */
const configs = []

Expand All @@ -34,5 +40,39 @@ export function mouse(options, ...userConfigs) {
},
})

if (options?.typescript) {
const pluginTs = await interopDefault(
import('@typescript-eslint/eslint-plugin'),
)

/**
* @param {string} key
* @returns {import("eslint").Linter.RulesRecord}
* if tsconfigPath is defined, append '-type-checked' to the key
*/
const getRules = (key) => {
const typescriptOptions = resolveSubOptions(options, 'typescript')
const tsconfigPath = 'tsconfigPath' in typescriptOptions
? typescriptOptions.tsconfigPath
: undefined

return renameRules(
pluginTs.configs[
tsconfigPath ? `${key}-type-checked` : key
]?.rules ?? {},
{ '@typescript-eslint': 'ts' },
)
}

configs.push({
name: 'mouse/typescript',
files: [GLOB_TS, GLOB_TSX],
rules: {
...getRules('strict'),
...getRules('stylistic'),
},
})
}

return antfu(options, ...configs, ...userConfigs)
}

0 comments on commit 5a696f2

Please sign in to comment.