Skip to content

Commit

Permalink
feat: Flat Config (#5)
Browse files Browse the repository at this point in the history
close #4
  • Loading branch information
lvjiaxuan committed Mar 6, 2023
1 parent 7f39c87 commit c2e7459
Show file tree
Hide file tree
Showing 30 changed files with 617 additions and 257 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
with:
node-version: 16
registry-url: 'https://registry.npmjs.org'
registry-url: "https://registry.npmjs.org"

- uses: pnpm/action-setup@v2
with:
Expand All @@ -55,4 +55,4 @@ jobs:

- run: npm install -g cnpm --registry=https://registry.npmmirror.com

- run: cnpm sync @lvjiaxuan/eslint-config @lvjiaxuan/eslint-config-js @lvjiaxuan/eslint-config-ts @lvjiaxuan/eslint-config-vue @lvjiaxuan/eslint-plugin --sync-publish
- run: cnpm sync @lvjiaxuan/eslint-config @lvjiaxuan/eslint-config-js @lvjiaxuan/eslint-config-ts @lvjiaxuan/eslint-config-vue @lvjiaxuan/eslint-plugin --sync-publish
3 changes: 3 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"recommendations": ["dbaeumer.vscode-eslint"]
}
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"eslint.experimental.useFlatConfig": true
}
10 changes: 5 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Tag ranges `v0.0.2...v0.7.0`. [All GitHub Releases](https://github.com/lvjiaxuan/eslint-config/releases).

## v0.7.0 <sub>(2023-03-02)</sub>
[Compare changes](https://github.com/lvjiaxuan/eslint-config/compare/v0.6.0...main)
[Compare changes](https://github.com/lvjiaxuan/eslint-config/compare/v0.6.0...v0.7.0)

### &nbsp;&nbsp;&nbsp;✨ Enhancements

Expand All @@ -14,28 +14,28 @@ Tag ranges `v0.0.2...v0.7.0`. [All GitHub Releases](https://github.com/lvjiaxuan

### &nbsp;&nbsp;&nbsp;✨ Enhancements

- **vue**: add a config &nbsp;-&nbsp; by @lvjiaxuan [<samp>(53be3)</samp>](https://github.com/lvjiaxuan/eslint-config/commit/53be33f)
- **vue**: add a config &nbsp;-&nbsp; by **lvjiaxuan** [<samp>(53be3)</samp>](https://github.com/lvjiaxuan/eslint-config/commit/53be33f)

## v0.5.3 <sub>(2023-03-01)</sub>
[Compare changes](https://github.com/lvjiaxuan/eslint-config/compare/v0.5.2...v0.5.3)

### &nbsp;&nbsp;&nbsp;🐛 Fixes

- export compat problem from tsup &nbsp;-&nbsp; by @lvjiaxuan [<samp>(f615d)</samp>](https://github.com/lvjiaxuan/eslint-config/commit/f615da3)
- export compat problem from tsup &nbsp;-&nbsp; by **lvjiaxuan** [<samp>(f615d)</samp>](https://github.com/lvjiaxuan/eslint-config/commit/f615da3)

## v0.5.2 <sub>(2023-02-21)</sub>
[Compare changes](https://github.com/lvjiaxuan/eslint-config/compare/v0.5.1...v0.5.2)

### &nbsp;&nbsp;&nbsp;🐛 Fixes

- config error. &nbsp;-&nbsp; by @lvjiaxuan [<samp>(e3f0f)</samp>](https://github.com/lvjiaxuan/eslint-config/commit/e3f0f32)
- config error. &nbsp;-&nbsp; by **lvjiaxuan 吕嘉轩** [<samp>(e3f0f)</samp>](https://github.com/lvjiaxuan/eslint-config/commit/e3f0f32)

## v0.5.1 <sub>(2023-02-20)</sub>
[Compare changes](https://github.com/lvjiaxuan/eslint-config/compare/v0.5.0...v0.5.1)

### &nbsp;&nbsp;&nbsp;🐛 Fixes

- set dist to files. &nbsp;-&nbsp; by @lvjiaxuan [<samp>(bdfd2)</samp>](https://github.com/lvjiaxuan/eslint-config/commit/bdfd23d)
- set dist to files. &nbsp;-&nbsp; by **lvjiaxuan 吕嘉轩** [<samp>(bdfd2)</samp>](https://github.com/lvjiaxuan/eslint-config/commit/bdfd23d)

## v0.5.0 <sub>(2023-02-20)</sub>
[Compare changes](https://github.com/lvjiaxuan/eslint-config/compare/v0.4.2...v0.5.0)
Expand Down
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@

# Features

- Sync `js` rules to `ts` rules. [Refer](./packages/typescript/sync-rules.js).
- Support **Flat Config**.
- `vue` package includes `ts` package which includes `js` package. It means that if you code vue with ts, you should install vue package only instead of ts package in company.
- The base rules for ts are automatically disabled.

## [My custom rules](./packages/eslint-plugin/README.md)

Expand Down Expand Up @@ -33,6 +35,13 @@ Fix on save. VScode settings as below:
}
```

# Flat Config

1. shortcut: `nix @lvjiaxuan/eslint-plugin --flat` .
2. Setting `settings.json` to let ESLint extension supports flat config: `"eslint.experimental.useFlatConfig": true` .

> All packages have its flat config export like `pkg/flat` .
# Refer

- https://github.com/antfu/eslint-config
Expand Down
3 changes: 3 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import lvjiaxuan from '@lvjiaxuan/eslint-plugin/flat'

export default lvjiaxuan.configs.recommended
18 changes: 8 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
{
"name": "@lvjiaxuan/eslint-config-monorepo",
"type": "module",
"version": "0.7.0",
"private": true,
"author": "lvjiaxuan <471501748@qq.com> (https://github.com/lvjiaxuan)",
"license": "MIT",
"homepage": "https://github.com/lvjiaxuan/@lvjiaxuan/eslint-config-monorepo#README.md",
"scripts": {
"lint": "eslint .",
"lint": "nix cross-env ESLINT_USE_FLAT_CONFIG=false eslint -c=.eslintrc.json .",
"lint:flat": "nix cross-env ESLINT_USE_FLAT_CONFIG=true eslint .",
"test": "nr -r test",
"prepare": "nr -r stub"
"build": "nr -r build",
"prepare": "nr build"
},
"dependencies": {
},
"devDependencies": {
"@lvjiaxuan/eslint-plugin": "workspace:*",
"@types/eslint": "^8.21.1",
"eslint": "^8.35.0",
"execa": "^7.0.0",
"tsup": "^6.6.3",
"typescript": "^4.9.5",
"unbuild": "^1.1.2"
},
"eslintConfig": {
"root": true,
"extends": "plugin:@lvjiaxuan/recommended"
}
}
47 changes: 27 additions & 20 deletions packages/all/add.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,44 @@ import { execaSync } from 'execa'
import path from 'node:path'
import fs from 'node:fs'

const flat = process.argv.slice(2).includes('--flat')

try {

const cwd = process.cwd()

// Install
execaSync('ni', [ '@lvjiaxuan/eslint-config', 'eslint', '-D', '--workspace-root=true' ], { stdio: 'inherit', cwd })

// Setup
const pkgPath = path.resolve(cwd, 'package.json')
const pkgInfo = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) as {
scripts?: { [x: string]: string }
eslintConfig?: {
extends?: string | string[]
if (flat) {
fs.writeFileSync(path.resolve(cwd, 'eslint.config.js'), 'import lvjiaxuan from \'@lvjiaxuan/eslint-config/flat\'\n\nexport default lvjiaxuan', { encoding: 'utf-8' })
} else {
// Setup
const pkgPath = path.resolve(cwd, 'package.json')
const pkgInfo = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) as {
scripts?: { [x: string]: string }
eslintConfig?: {
extends?: string | string[]
}
}
pkgInfo.eslintConfig = pkgInfo.eslintConfig ?? {}

if (typeof pkgInfo.eslintConfig.extends === 'string') {
pkgInfo.eslintConfig.extends = [ pkgInfo.eslintConfig.extends, '@lvjiaxuan' ]
} else if (Array.isArray(pkgInfo.eslintConfig.extends)) {
pkgInfo.eslintConfig.extends = [ ...pkgInfo.eslintConfig.extends, '@lvjiaxuan' ]
} else {
pkgInfo.eslintConfig = { extends: '@lvjiaxuan' }
}
}
pkgInfo.eslintConfig = pkgInfo.eslintConfig ?? {}

if (typeof pkgInfo.eslintConfig.extends === 'string') {
pkgInfo.eslintConfig.extends = [ pkgInfo.eslintConfig.extends, '@lvjiaxuan' ]
} else if (Array.isArray(pkgInfo.eslintConfig.extends)) {
pkgInfo.eslintConfig.extends = [ ...pkgInfo.eslintConfig.extends, '@lvjiaxuan' ]
} else {
pkgInfo.eslintConfig = { extends: '@lvjiaxuan' }
}
pkgInfo.scripts = pkgInfo.scripts ?? {}
!pkgInfo.scripts.lint && (
pkgInfo.scripts.lint = 'eslint .'
)

pkgInfo.scripts = pkgInfo.scripts ?? {}
!pkgInfo.scripts.lint && (
pkgInfo.scripts.lint = 'eslint .'
)
fs.writeFileSync(pkgPath, JSON.stringify(pkgInfo, null, 2) + '\n')
}

fs.writeFileSync(pkgPath, JSON.stringify(pkgInfo, null, 2) + '\n')

process.exit(0)
} catch (error) {
Expand Down
7 changes: 7 additions & 0 deletions packages/all/flat.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import eslint from 'eslint'
import vue from '@lvjiaxuan/eslint-config-vue/flat'

/**
* @type {Array.<eslint.Linter.FlatConfig>}
*/
export default vue
9 changes: 5 additions & 4 deletions packages/all/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@
"keywords": [
"eslint-config"
],
"exports": {
".": "./index.js",
"./flat": "./flat.mjs"
},
"main": "index.js",
"bin": "./bin/add.mjs",
"files": [
"dist",
"!./add.js"
],
"files": ["!./add.ts"],
"scripts": {
"build": "tsup add.ts --target=node16",
"prepublishOnly": "nr build"
Expand Down
47 changes: 27 additions & 20 deletions packages/eslint-plugin/add.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,44 @@ import { execaSync } from 'execa'
import path from 'node:path'
import fs from 'node:fs'

const flat = process.argv.slice(2).includes('--flat')

try {

const cwd = process.cwd()

// Install
execaSync('ni', [ '@lvjiaxuan/eslint-plugin', 'eslint', '-D', '--workspace-root=true' ], { stdio: 'inherit', cwd })

// Setup
const pkgPath = path.resolve(cwd, 'package.json')
const pkgInfo = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) as {
scripts?: { [x: string]: string }
eslintConfig?: {
extends?: string | string[]
if (flat) {
fs.writeFileSync(path.resolve(cwd, 'eslint.config.js'), 'import lvjiaxuan from \'@lvjiaxuan/eslint-plugin/flat\'\n\nexport default lvjiaxuan.configs.recommended', { encoding: 'utf-8' })
} else {
// Setup
const pkgPath = path.resolve(cwd, 'package.json')
const pkgInfo = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) as {
scripts?: { [x: string]: string }
eslintConfig?: {
extends?: string | string[]
}
}
pkgInfo.eslintConfig = pkgInfo.eslintConfig ?? {}

if (typeof pkgInfo.eslintConfig.extends === 'string') {
pkgInfo.eslintConfig.extends = [ pkgInfo.eslintConfig.extends, 'plugin:@lvjiaxuan/recommended' ]
} else if (Array.isArray(pkgInfo.eslintConfig.extends)) {
pkgInfo.eslintConfig.extends = [ ...pkgInfo.eslintConfig.extends, 'plugin:@lvjiaxuan/recommended' ]
} else {
pkgInfo.eslintConfig = { extends: 'plugin:@lvjiaxuan/recommended' }
}
}
pkgInfo.eslintConfig = pkgInfo.eslintConfig ?? {}

if (typeof pkgInfo.eslintConfig.extends === 'string') {
pkgInfo.eslintConfig.extends = [ pkgInfo.eslintConfig.extends, 'plugin:@lvjiaxuan/recommended' ]
} else if (Array.isArray(pkgInfo.eslintConfig.extends)) {
pkgInfo.eslintConfig.extends = [ ...pkgInfo.eslintConfig.extends, 'plugin:@lvjiaxuan/recommended' ]
} else {
pkgInfo.eslintConfig = { extends: 'plugin:@lvjiaxuan/recommended' }
}
pkgInfo.scripts = pkgInfo.scripts ?? {}
!pkgInfo.scripts.lint && (
pkgInfo.scripts.lint = 'eslint .'
)

pkgInfo.scripts = pkgInfo.scripts ?? {}
!pkgInfo.scripts.lint && (
pkgInfo.scripts.lint = 'eslint .'
)
fs.writeFileSync(pkgPath, JSON.stringify(pkgInfo, null, 2) + '\n')
}

fs.writeFileSync(pkgPath, JSON.stringify(pkgInfo, null, 2) + '\n')

process.exit(0)
} catch (error) {
Expand Down
2 changes: 1 addition & 1 deletion packages/eslint-plugin/bin/add.mjs
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/usr/bin/env node
'use strict'
import '../dist/add.mjs'
import '../dist/add.mjs'
5 changes: 2 additions & 3 deletions packages/eslint-plugin/build.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@ import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
entries: [
'./src/index',
'./src/flat',
'./add',
],
clean: true,
// declaration: true,
failOnWarn: false,
'rollup': {
'emitCJS': true
}
rollup: { emitCJS: true },
})
13 changes: 6 additions & 7 deletions packages/eslint-plugin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,17 @@
"author": "lvjiaxuan <471501748@qq.com> (https://github.com/lvjiaxuan)",
"keywords": [
"eslint",
"eslintplugin",
"eslint-plugin"
],
"exports": {
".": "./dist/index.cjs",
"./flat": "./dist/flat.mjs"
},
"main": "./dist/index.cjs",
"bin": "./bin/add.mjs",
"files": [
"dist",
"!src",
"!./add.ts"
],
"files": ["!./add.ts", "!src"],
"scripts": {
"stub": "unbuild --stub",
"dev": "unbuild --stub",
"test": "vitest run",
"build": "unbuild",
"prepublishOnly": "nr build"
Expand Down
20 changes: 20 additions & 0 deletions packages/eslint-plugin/src/flat.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import eslint from 'eslint'
import lvjiaxuan from '@lvjiaxuan/eslint-config/flat'
import index from './index'

const pluginRules = index.rules

/** @type {eslint.ESLint.Plugin} */
export default {
configs: {
recommended: [
...lvjiaxuan,
{
files: [ '**/*.js', '**/*.cjs', '**/*.mjs', '**/*.ts', '**/*.d.ts', '**/*.tsx', '**/*.mts', '**/*.cts' ],
plugins: { '@lvjiaxuan': { rules: pluginRules } },
rules: index.configs.recommended.rules,
},
],
},
rules: pluginRules,
}

0 comments on commit c2e7459

Please sign in to comment.