Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit fa2a2ce

Browse files
feat: add experimental Oxlint integration (#601)
1 parent 120bc2f commit fa2a2ce

File tree

9 files changed

+93
-44
lines changed

9 files changed

+93
-44
lines changed

‎index.ts

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ async function init() {
141141
needsPinia?: boolean
142142
needsVitest?: boolean
143143
needsE2eTesting?: false | 'cypress' | 'nightwatch' | 'playwright'
144-
needsEslint?: boolean
144+
needsEslint?: false | 'eslintOnly' | 'speedUpWithOxlint'
145+
needsOxlint?: boolean
145146
needsPrettier?: boolean
146147
needsDevTools?: boolean
147148
} = {}
@@ -274,11 +275,23 @@ async function init() {
274275
},
275276
{
276277
name: 'needsEslint',
277-
type: () => (isFeatureFlagsUsed ? null : 'toggle'),
278+
type: () => (isFeatureFlagsUsed ? null : 'select'),
278279
message: language.needsEslint.message,
279-
initial: false,
280-
active: language.defaultToggleOptions.active,
281-
inactive: language.defaultToggleOptions.inactive,
280+
initial: 0,
281+
choices: [
282+
{
283+
title: language.needsEslint.selectOptions.negative.title,
284+
value: false,
285+
},
286+
{
287+
title: language.needsEslint.selectOptions.eslintOnly.title,
288+
value: 'eslintOnly',
289+
},
290+
{
291+
title: language.needsEslint.selectOptions.speedUpWithOxlint.title,
292+
value: 'speedUpWithOxlint',
293+
},
294+
],
282295
},
283296
{
284297
name: 'needsPrettier',
@@ -324,11 +337,13 @@ async function init() {
324337
needsRouter = argv.router || argv['vue-router'],
325338
needsPinia = argv.pinia,
326339
needsVitest = argv.vitest || argv.tests,
327-
needsEslint = argv.eslint || argv['eslint-with-prettier'],
328340
needsPrettier = argv['eslint-with-prettier'],
329341
needsDevTools = argv.devtools || argv['vue-devtools'],
330342
} = result
331343

344+
const needsEslint = Boolean(argv.eslint || argv['eslint-with-prettier'] || result.needsEslint)
345+
const needsOxlint = result.needsEslint === 'speedUpWithOxlint'
346+
332347
const { needsE2eTesting } = result
333348
const needsCypress = argv.cypress || argv.tests || needsE2eTesting === 'cypress'
334349
const needsCypressCT = needsCypress && !needsVitest
@@ -459,6 +474,7 @@ async function init() {
459474
if (needsEslint) {
460475
renderEslint(root, {
461476
needsTypeScript,
477+
needsOxlint,
462478
needsVitest,
463479
needsCypress,
464480
needsCypressCT,

‎locales/en-US.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,16 @@
4545
}
4646
},
4747
"needsEslint": {
48-
"message": "Add ESLint for code quality?"
48+
"message": "Add ESLint for code quality?",
49+
"selectOptions": {
50+
"negative": { "title": "No" },
51+
"eslintOnly": {
52+
"title": "Yes"
53+
},
54+
"speedUpWithOxlint": {
55+
"title": "Yes, and speed up with Oxlint (experimental)"
56+
}
57+
}
4958
},
5059
"needsPrettier": {
5160
"message": "Add Prettier for code formatting?"

‎locales/fr-FR.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,16 @@
4545
}
4646
},
4747
"needsEslint": {
48-
"message": "Ajouter ESLint pour la qualité du code\u00a0?"
48+
"message": "Ajouter ESLint pour la qualité du code\u00a0?",
49+
"selectOptions": {
50+
"negative": { "title": "Non" },
51+
"eslintOnly": {
52+
"title": "Oui"
53+
},
54+
"speedUpWithOxlint": {
55+
"title": "Oui, et accélérer avec Oxlint (expérimental)"
56+
}
57+
}
4958
},
5059
"needsPrettier": {
5160
"message": "Ajouter Prettier pour le formatage du code\u00a0?"

‎locales/tr-TR.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,16 @@
4545
}
4646
},
4747
"needsEslint": {
48-
"message": "Kod kalitesi için ESLint eklensin mi?"
48+
"message": "Kod kalitesi için ESLint eklensin mi?",
49+
"selectOptions": {
50+
"negative": { "title": "Hayır" },
51+
"eslintOnly": {
52+
"title": "Evet"
53+
},
54+
"speedUpWithOxlint": {
55+
"title": "Evet ve Oxlint ile hızlanın (deneysel)"
56+
}
57+
}
4958
},
5059
"needsPrettier": {
5160
"message": "Kod formatlama için Prettier eklensin mi?"

‎locales/zh-Hans.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,16 @@
4545
}
4646
},
4747
"needsEslint": {
48-
"message": "是否引入 ESLint 用于代码质量检测?"
48+
"message": "是否引入 ESLint 用于代码质量检测?",
49+
"selectOptions": {
50+
"negative": { "title": "" },
51+
"eslintOnly": {
52+
"title": ""
53+
},
54+
"speedUpWithOxlint": {
55+
"title": "是,并同时引入 Oxlint 以加快检测(试验阶段)"
56+
}
57+
}
4958
},
5059
"needsPrettier": {
5160
"message": "是否引入 Prettier 用于代码格式化?"

‎locales/zh-Hant.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,16 @@
4949
}
5050
},
5151
"needsEslint": {
52-
"message": "是否引入 ESLint 用於程式碼品質檢測?"
52+
"message": "是否引入 ESLint 用於程式碼品質檢測?",
53+
"selectOptions": {
54+
"negative": { "title": "" },
55+
"eslintOnly": {
56+
"title": ""
57+
},
58+
"speedUpWithOxlint": {
59+
"title": "是,並同時引入 Oxlint 以加快檢測(試驗性功能)"
60+
}
61+
}
5362
},
5463
"needsPrettier": {
5564
"message": "是否引入 Prettier 用於程式碼格式化?"

‎package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"@types/eslint": "^9.6.1",
4242
"@types/node": "^20.17.6",
4343
"@types/prompts": "^2.4.9",
44-
"@vue/create-eslint-config": "0.5.0",
44+
"@vue/create-eslint-config": "^0.6.0",
4545
"@vue/tsconfig": "^0.5.1",
4646
"ejs": "^3.1.10",
4747
"esbuild": "^0.24.0",

‎pnpm-lock.yaml

Lines changed: 6 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎utils/renderEslint.ts

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,15 @@ const eslintDeps = eslintTemplatePackage.devDependencies
1111

1212
export default function renderEslint(
1313
rootDir,
14-
{ needsTypeScript, needsVitest, needsCypress, needsCypressCT, needsPrettier, needsPlaywright },
14+
{
15+
needsTypeScript,
16+
needsVitest,
17+
needsCypress,
18+
needsCypressCT,
19+
needsOxlint,
20+
needsPrettier,
21+
needsPlaywright,
22+
},
1523
) {
1624
const additionalConfigs = getAdditionalConfigs({
1725
needsVitest,
@@ -23,32 +31,20 @@ export default function renderEslint(
2331
const { pkg, files } = createESLintConfig({
2432
styleGuide: 'default',
2533
hasTypeScript: needsTypeScript,
34+
needsOxlint,
35+
// Theoretically, we could add Prettier without requring ESLint.
36+
// But it doesn't seem to be a good practice, so we just let createESLintConfig handle it.
2637
needsPrettier,
27-
2838
additionalConfigs,
2939
})
3040

31-
const scripts: Record<string, string> = {
32-
lint: 'eslint . --fix',
33-
}
34-
35-
// Theoretically, we could add Prettier without requring ESLint.
36-
// But it doesn't seem to be a good practice, so we just leave it here.
37-
if (needsPrettier) {
38-
// Default to only format the `src/` directory to avoid too much noise, and
39-
// the need for a `.prettierignore` file.
40-
// Users can still append any paths they'd like to format to the command,
41-
// e.g. `npm run format cypress/`.
42-
scripts.format = 'prettier --write src/'
43-
}
44-
4541
// update package.json
4642
const packageJsonPath = path.resolve(rootDir, 'package.json')
4743
const existingPkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
48-
const updatedPkg = sortDependencies(deepMerge(deepMerge(existingPkg, pkg),{ scripts }))
44+
const updatedPkg = sortDependencies(deepMerge(existingPkg, pkg))
4945
fs.writeFileSync(packageJsonPath, JSON.stringify(updatedPkg, null, 2) + '\n', 'utf8')
5046

51-
// write to eslint.config.mjs, .prettierrc.json, .editorconfig, etc.
47+
// write to eslint.config.js, .prettierrc.json, .editorconfig, etc.
5248
for (const [fileName, content] of Object.entries(files)) {
5349
const fullPath = path.resolve(rootDir, fileName)
5450
fs.writeFileSync(fullPath, content as string, 'utf8')

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /