Skip to content

Commit a59b442

Browse files
committed
feat: add comprehensive code style guide documentation
- Introduced guidelines for file structure, naming conventions, and exports. - Included best practices for components, services, schemas, and testing. - Added detailed examples and anti-patterns for common pitfalls.
1 parent 3374993 commit a59b442

1 file changed

Lines changed: 23 additions & 23 deletions

File tree

docs/code-style-guide.md

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,15 @@ userCard/
9797

9898
```typescript
9999
// UserCard.tsx
100-
import { formatUserName } from './UserCard.utils';
101-
import type { User } from './UserCard.types';
100+
import {formatUserName} from './UserCard.utils';
101+
import type {User} from './UserCard.types';
102102

103103
type Props = { // Never export Props
104104
user: User;
105105
onSelect: (id: string) => void;
106106
};
107107

108-
export function UserCard({ user, onSelect }: Props) {
108+
export function UserCard({user, onSelect}: Props) {
109109
return <div onClick={() => onSelect(user.id)}>{formatUserName(user.name)}</div>;
110110
}
111111
```
@@ -124,7 +124,7 @@ export type User = {
124124
export const maxNameLength = 30;
125125

126126
// UserCard.utils.ts
127-
import { maxNameLength } from './UserCard.constants';
127+
import {maxNameLength} from './UserCard.constants';
128128

129129
export function formatUserName(name: string): string {
130130
return name.length > maxNameLength ? `${name.slice(0, maxNameLength)}...` : name;
@@ -141,11 +141,11 @@ Services have three files: main functions, schemas, and constants.
141141

142142
```typescript
143143
// services/hyperion/users/users.ts
144-
import { useMutation, useQuery } from '@tanstack/react-query';
145-
import { http } from '@/utils/httpClient/httpClient';
146-
import { api } from '@/utils/httpClient/httpClient.constants';
147-
import { getUsersKey } from './users.constants';
148-
import { GetUsersResponseSchema } from './users.schemas';
144+
import {useQuery} from '@tanstack/react-query';
145+
import {http} from '@/utils/httpClient/httpClient';
146+
import {api} from '@/utils/httpClient/httpClient.constants';
147+
import {getUsersKey} from './users.constants';
148+
import {GetUsersResponseSchema} from './users.schemas';
149149

150150
/* POST /api/v1/users */
151151
export async function getUsers() {
@@ -166,7 +166,7 @@ export function useGetUsers() {
166166

167167
```typescript
168168
// services/hyperion/users/users.schemas.ts
169-
import { z } from 'zod';
169+
import {z} from 'zod';
170170

171171
export const GetUsersResponseSchema = z.object({
172172
users: z.array(
@@ -194,22 +194,22 @@ export const getUsersKey = 'getUsers';
194194
Use `test.each` with array of objects:
195195

196196
```typescript
197-
import { describe, expect, test } from 'bun:test';
198-
import { formatUserName } from './user';
197+
import {describe, expect, test} from 'bun:test';
198+
import {formatUserName} from './user';
199199

200200
describe('formatUserName', () => {
201201
test.each([
202202
{
203203
description: 'full name with all parts',
204204
input: 'Smith, John David',
205-
expected: { lastName: 'Smith', firstName: 'John', middleName: 'David' },
205+
expected: {lastName: 'Smith', firstName: 'John', middleName: 'David'},
206206
},
207207
{
208208
description: 'name without middle',
209209
input: 'Smith, John',
210-
expected: { lastName: 'Smith', firstName: 'John', middleName: undefined },
210+
expected: {lastName: 'Smith', firstName: 'John', middleName: undefined},
211211
},
212-
])('should handle $description', ({ input, expected }) => {
212+
])('should handle $description', ({input, expected}) => {
213213
expect(formatUserName(input)).toEqual(expected);
214214
});
215215
});
@@ -271,20 +271,20 @@ Barrel files are files that only re-export from other modules. They cause proble
271271

272272
```typescript
273273
// components/ui/index.ts
274-
export { Button } from './button/Button';
275-
export { Input } from './input/Input';
276-
export { Card } from './card/Card';
274+
export {Button} from './button/Button';
275+
export {Input} from './input/Input';
276+
export {Card} from './card/Card';
277277

278278
// Usage creates circular import risk
279-
import { Button } from '@/components/ui';
279+
import {Button} from '@/components/ui';
280280
```
281281

282282
### Right
283283

284284
```typescript
285285
// Import directly from the module
286-
import { Button } from '@/components/ui/button/Button';
287-
import { Input } from '@/components/ui/input/Input';
286+
import {Button} from '@/components/ui/button/Button';
287+
import {Input} from '@/components/ui/input/Input';
288288
```
289289

290290
### Exception: NPM Libraries
@@ -293,8 +293,8 @@ Barrel files are **only** acceptable as the single entry point for npm packages:
293293

294294
```typescript
295295
// packages/my-library/index.ts (package.json "main" field)
296-
export { Button } from './components/Button';
297-
export { useTheme } from './hooks/useTheme';
296+
export {Button} from './components/Button';
297+
export {useTheme} from './hooks/useTheme';
298298
```
299299

300300
**Reference**: [Please Stop Using Barrel Files](https://tkdodo.eu/blog/please-stop-using-barrel-files#what-barrels-are-good-for)

0 commit comments

Comments
 (0)