Skip to content

Commit 7c2396d

Browse files
authored
build(lint): Update eslint and prettier settings (#23)
* build(deps): Bump eslint and prettier * build(eslint): Move to eslint.config.mjs * build(prettier): update prettier * chore(vs-code): Add settings.json * refactor: run eslint
1 parent d371bbb commit 7c2396d

12 files changed

Lines changed: 1731 additions & 996 deletions

File tree

.eslintrc

Lines changed: 0 additions & 22 deletions
This file was deleted.

.prettierrc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"semi": true,
3-
"trailingComma": "es5",
3+
"trailingComma": "all",
44
"singleQuote": true,
5-
"tabWidth": 2
5+
"tabWidth": 2,
66
}

.vscode/settings.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"editor.formatOnSave": false,
3+
"editor.codeActionsOnSave": {
4+
"source.fixAll.eslint": "explicit"
5+
},
6+
"eslint.validate": [
7+
"javascript",
8+
"javascriptreact",
9+
"typescript",
10+
"typescriptreact"
11+
]
12+
}

eslint.config.mjs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import js from '@eslint/js';
2+
import { defineConfig } from 'eslint/config';
3+
import prettierConfig from 'eslint-config-prettier';
4+
import prettierPlugin from 'eslint-plugin-prettier';
5+
import react from 'eslint-plugin-react';
6+
import reactHooks from 'eslint-plugin-react-hooks';
7+
import reactRefresh from 'eslint-plugin-react-refresh';
8+
import simpleImportSortPlugin from 'eslint-plugin-simple-import-sort';
9+
import globals from 'globals';
10+
import tseslint from 'typescript-eslint';
11+
12+
export default defineConfig([
13+
{
14+
ignores: ['dist'],
15+
},
16+
{
17+
extends: [
18+
js.configs.recommended,
19+
tseslint.configs.recommended,
20+
prettierConfig,
21+
],
22+
files: ['**/*.{ts,tsx,js,jsx,mjs,cjs}'],
23+
languageOptions: {
24+
ecmaVersion: 2020,
25+
globals: globals.browser,
26+
},
27+
plugins: {
28+
react,
29+
'react-hooks': reactHooks,
30+
'react-refresh': reactRefresh,
31+
prettier: prettierPlugin,
32+
'simple-import-sort': simpleImportSortPlugin,
33+
},
34+
rules: {
35+
...reactHooks.configs.recommended.rules,
36+
'react-refresh/only-export-components': [
37+
'warn',
38+
{
39+
allowConstantExport: true,
40+
},
41+
],
42+
'react/react-in-jsx-scope': 'off',
43+
'simple-import-sort/imports': 'warn',
44+
'simple-import-sort/exports': 'warn',
45+
'prettier/prettier': 'error',
46+
},
47+
settings: {
48+
react: {
49+
version: 'detect',
50+
},
51+
},
52+
},
53+
]);

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!DOCTYPE html>
1+
<!doctype html>
22
<html lang="en">
33
<head>
44
<meta charset="UTF-8" />

package.json

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"dev": "vite",
77
"build": "vite build",
88
"preview": "vite preview",
9-
"lint": "eslint --ext .js,.jsx,.ts,.tsx src"
9+
"lint": "eslint ."
1010
},
1111
"dependencies": {
1212
"lodash": "^4.17.21",
@@ -16,21 +16,25 @@
1616
"styled-components": "^5.3.3"
1717
},
1818
"devDependencies": {
19+
"@eslint/js": "^9.39.2",
1920
"@types/node": "^16.4.13",
2021
"@types/react": "^17.0.16",
2122
"@types/react-dom": "^17.0.9",
2223
"@types/styled-components": "^5.1.12",
23-
"@typescript-eslint/eslint-plugin": "^4.29.0",
24-
"@typescript-eslint/parser": "^4.20.0",
2524
"@vitejs/plugin-react": "^5.1.2",
26-
"eslint": "^7.32.0",
27-
"eslint-config-prettier": "^8.3.0",
28-
"eslint-plugin-prettier": "^3.4.0",
29-
"eslint-plugin-react": "^7.24.0",
30-
"eslint-plugin-simple-import-sort": "^7.0.0",
31-
"prettier": "^2.5.1",
25+
"eslint": "^9.39.2",
26+
"eslint-config-prettier": "^10.1.8",
27+
"eslint-import-resolver-typescript": "^4.4.4",
28+
"eslint-plugin-prettier": "^5.5.5",
29+
"eslint-plugin-react": "^7.37.5",
30+
"eslint-plugin-react-hooks": "^7.0.1",
31+
"eslint-plugin-react-refresh": "^0.4.26",
32+
"eslint-plugin-simple-import-sort": "^12.1.1",
33+
"globals": "^17.2.0",
34+
"prettier": "^3.8.1",
3235
"ts-node": "^10.4.0",
33-
"typescript": "4.5.4",
36+
"typescript": "^5.9.3",
37+
"typescript-eslint": "^8.54.0",
3438
"vite": "^7.3.1",
3539
"vite-plugin-svgr": "^4.5.0"
3640
},

src/components/Icon/index.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useCallback, lazy, Suspense } from 'react';
1+
import React, { lazy, Suspense, useCallback } from 'react';
22

33
const Email = lazy(() => import('./components/Email'));
44
const Github = lazy(() => import('./components/Github'));
@@ -32,11 +32,7 @@ const Icon: React.FC<Props> = (props) => {
3232
}
3333
}, [height, name, width]);
3434

35-
return (
36-
<Suspense fallback={null}>
37-
{getIcon()}
38-
</Suspense>
39-
);
35+
return <Suspense fallback={null}>{getIcon()}</Suspense>;
4036
};
4137

4238
export default Icon;

src/components/SEO.tsx

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,10 @@ const SEO: React.FC<Props> = function (props) {
3131
<meta name="og:title" content={`${title} | ${siteMetadata.title}`} />
3232
<meta name="og:description" content={metaDescription} />
3333
<meta name="og:type" content="website" />
34-
<meta
35-
name="og:image"
36-
content={logoUrl}
37-
/>
34+
<meta name="og:image" content={logoUrl} />
3835
<meta name="og:url" content={siteMetadata.siteUrl} />
3936
<meta name="twitter:card" content={metaDescription} />
40-
<meta
41-
name="twitter:image"
42-
content={logoUrl}
43-
/>
37+
<meta name="twitter:image" content={logoUrl} />
4438
<meta name="twitter:creator" content={siteMetadata.author} />
4539
<meta name="twitter:url" content={siteMetadata.siteUrl} />
4640
<meta name="twitter:title" content={`${title} | ${siteMetadata.title}`} />

src/main.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1+
import './styles.css';
2+
13
import React from 'react';
24
import ReactDOM from 'react-dom';
35
import { HelmetProvider } from 'react-helmet-async';
6+
47
import App from './App';
5-
import './styles.css';
68

79
ReactDOM.render(
810
<React.StrictMode>
911
<HelmetProvider>
1012
<App />
1113
</HelmetProvider>
1214
</React.StrictMode>,
13-
document.getElementById('root')
15+
document.getElementById('root'),
1416
);

src/styles.css

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ body {
33
color: #111111;
44

55
margin: 0;
6-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
7-
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
8-
sans-serif;
6+
font-family:
7+
-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',
8+
'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
99
-webkit-font-smoothing: antialiased;
1010
-moz-osx-font-smoothing: grayscale;
1111
}

0 commit comments

Comments
 (0)