diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..c2bc65e --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,2 @@ +pnpm run compile +npx --no-install lint-staged \ No newline at end of file diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 0000000..cedeaa0 --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1,18 @@ +module.exports = { + // 字符串使用单引号 + singleQuote: true, + // 大括号内的首尾需要空格 + bracketSpacing: true, + // 末尾不需要逗号 + trailingComma: 'none', + // 箭头函数参数括号 + arrowParens: 'avoid', + // 在jsx中把'>' 是否单独放一行 + jsxBracketSameLine: true, + // 使用默认的折行标准 + proseWrap: 'preserve', + // 根据显示样式决定 html 要不要折行 + htmlWhitespaceSensitivity: 'css', + // 换行符使用 crlf/lf/auto + endOfLine: 'auto' +} \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..a7be3cf --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,18 @@ +// @ts-check + +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import prettier from 'eslint-plugin-prettier'; + +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + { + plugins: { + prettier, + }, + rules: { + 'prettier/prettier': 'error', + }, + } +); \ No newline at end of file diff --git a/package.json b/package.json index 9d799c6..30b1f40 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "compile": "tsc --noEmit", "tauri": "tauri", "tauri:dev": "tauri dev", - "tauri:build": "tauri build" + "tauri:build": "tauri build", + "format": "prettier --write \"{src,tests}/**/*.{js,jsx,ts,tsx}\"", + "prepare": "husky install" }, "dependencies": { "@emotion/react": "^11.14.0", @@ -42,6 +44,7 @@ "zustand": "^5.0.3" }, "devDependencies": { + "@eslint/js": "^9.23.0", "@tauri-apps/cli": "^2", "@types/node": "^22.13.1", "@types/react": "^18.3.1", @@ -53,8 +56,14 @@ "@unocss/preset-web-fonts": "^65.4.3", "@unocss/reset": "^65.4.3", "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.23.0", + "eslint-plugin-prettier": "^5.2.6", + "husky": "^9.1.7", + "lint-staged": "^15.5.0", + "prettier": "^3.5.3", "tsx": "^4.19.3", - "typescript": "~5.6.2", + "typescript": "~5.6.3", + "typescript-eslint": "^8.29.0", "unocss": "^65.4.3", "vite": "^6.1.0", "vite-plugin-compression": "^0.5.1" @@ -63,5 +72,11 @@ "onlyBuiltDependencies": [ "esbuild" ] + }, + "lint-staged": { + "*.{ts,tsx}": [ + "eslint --fix", + "prettier --write" + ] } -} +} \ No newline at end of file