Skip to content

Commit eb34993

Browse files
committed
πŸ“ Update docs for jsx a11y rules
1 parent dc8dd07 commit eb34993

File tree

1 file changed

+96
-12
lines changed

1 file changed

+96
-12
lines changed

β€Žpackages/oxc-linter-config/docs/linter-rules.mdβ€Ž

Lines changed: 96 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -354,41 +354,41 @@ TypeScript 파일(`*.ts`, `*.tsx`)μ—λ§Œ μ μš©λ˜λŠ” κ·œμΉ™λ“€μž…λ‹ˆλ‹€.
354354

355355
---
356356

357-
## πŸ”₯ React Rules
357+
## πŸ”₯ FE Rules
358358

359359
`oxlint-react.json`에 μ •μ˜λœ React ν”„λ‘œμ νŠΈ μ „μš© κ·œμΉ™λ“€μž…λ‹ˆλ‹€.
360360

361-
### ν”ŒλŸ¬κ·ΈμΈ
361+
### πŸ“Œ React Rules
362362

363363
- `react`: React κ΄€λ ¨ κ·œμΉ™
364364
- `nextjs`: Next.js κ΄€λ ¨ κ·œμΉ™
365365
- `jsx-a11y`: μ ‘κ·Όμ„±(a11y) κ΄€λ ¨ κ·œμΉ™
366366

367-
### `react/button-has-type`
367+
#### `react/button-has-type`
368368

369369
```json
370370
"warn"
371371
```
372372

373373
**이유**: `<button>` μš”μ†ŒλŠ” λͺ…μ‹œμ μœΌλ‘œ `type` 속성을 μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. 기본값이 `submit`μ΄λ―€λ‘œ μ˜λ„ν•˜μ§€ μ•Šμ€ 폼 제좜이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
374374

375-
### `react/forward-ref-uses-ref`
375+
#### `react/forward-ref-uses-ref`
376376

377377
```json
378378
"error"
379379
```
380380

381381
**이유**: `forwardRef`둜 λž˜ν•‘λœ μ»΄ν¬λ„ŒνŠΈλŠ” μ‹€μ œλ‘œ refλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λΆˆν•„μš”ν•œ λž˜ν•‘μž…λ‹ˆλ‹€.
382382

383-
### `react/jsx-boolean-value`
383+
#### `react/jsx-boolean-value`
384384

385385
```json
386386
["warn", "never", { "assumeUndefinedIsFalse": true }]
387387
```
388388

389389
**이유**: boolean props에 λͺ…μ‹œμ μœΌλ‘œ `={true}`λ₯Ό μž‘μ„±ν•˜λŠ” 것을 μ§€μ–‘ν•©λ‹ˆλ‹€. `<Component isActive />`κ°€ 더 κ°„κ²°ν•©λ‹ˆλ‹€.
390390

391-
### `react/jsx-handler-names`
391+
#### `react/jsx-handler-names`
392392

393393
```json
394394
[
@@ -405,31 +405,31 @@ TypeScript 파일(`*.ts`, `*.tsx`)μ—λ§Œ μ μš©λ˜λŠ” κ·œμΉ™λ“€μž…λ‹ˆλ‹€.
405405
- ν•¨μˆ˜: `handleClick`, `handleChange`
406406
- Props: `onClick`, `onChange`
407407

408-
### `react/jsx-no-useless-fragment`
408+
#### `react/jsx-no-useless-fragment`
409409

410410
```json
411411
["warn", { "allowExpressions": true }]
412412
```
413413

414414
**이유**: λΆˆν•„μš”ν•œ Fragment(`<>...</>`)λ₯Ό μ œκ±°ν•˜μ—¬ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ μœ μ§€ν•©λ‹ˆλ‹€. ν‘œν˜„μ‹μ€ ν—ˆμš©ν•©λ‹ˆλ‹€.
415415

416-
### `react/jsx-pascal-case`
416+
#### `react/jsx-pascal-case`
417417

418418
```json
419419
"error"
420420
```
421421

422422
**이유**: React μ»΄ν¬λ„ŒνŠΈλŠ” PascalCaseλ₯Ό μ‚¬μš©ν•˜μ—¬ HTML μš”μ†Œμ™€ κ΅¬λΆ„ν•©λ‹ˆλ‹€.
423423

424-
### `react/no-namespace`
424+
#### `react/no-namespace`
425425

426426
```json
427427
"error"
428428
```
429429

430430
**이유**: JSXμ—μ„œ namespace(예: `<Namespace.Component>`)λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€. Reactμ—μ„œλŠ” μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
431431

432-
### `react/self-closing-comp`
432+
#### `react/self-closing-comp`
433433

434434
```json
435435
[
@@ -443,22 +443,106 @@ TypeScript 파일(`*.ts`, `*.tsx`)μ—λ§Œ μ μš©λ˜λŠ” κ·œμΉ™λ“€μž…λ‹ˆλ‹€.
443443

444444
**이유**: μžμ‹μ΄ μ—†λŠ” μ»΄ν¬λ„ŒνŠΈμ™€ HTML μš”μ†ŒλŠ” 자체 λ‹«κΈ° νƒœκ·Έ(`<Component />`)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€.
445445

446-
### `react/style-prop-object`
446+
#### `react/style-prop-object`
447447

448448
```json
449449
"error"
450450
```
451451

452452
**이유**: `style` prop은 λ°˜λ“œμ‹œ 객체여야 ν•©λ‹ˆλ‹€. λ¬Έμžμ—΄μ„ ν—ˆμš©ν•˜λ©΄ XSS 취약점이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
453453

454-
### `react/void-dom-elements-no-children`
454+
#### `react/void-dom-elements-no-children`
455455

456456
```json
457457
"error"
458458
```
459459

460460
**이유**: `<img>`, `<br>`, `<input>` λ“±μ˜ void μš”μ†ŒλŠ” μžμ‹μ„ κ°€μ§ˆ 수 μ—†μŠ΅λ‹ˆλ‹€. 이λ₯Ό λ°©μ§€ν•˜μ—¬ HTML ν‘œμ€€μ„ μ€€μˆ˜ν•©λ‹ˆλ‹€.
461461

462+
### πŸ“Œ JSX A11y Rules (μ ‘κ·Όμ„±)
463+
464+
μ ‘κ·Όμ„±(Accessibility)은 λͺ¨λ“  μ‚¬μš©μžκ°€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ 보μž₯ν•˜λŠ” μ€‘μš”ν•œ μš”μ†Œμž…λ‹ˆλ‹€.
465+
466+
#### `jsx-a11y/click-events-have-key-events`
467+
468+
```json
469+
"off"
470+
```
471+
472+
**이유**: 클릭 μ΄λ²€νŠΈμ— λŒ€μ‘ν•˜λŠ” ν‚€λ³΄λ“œ 이벀트λ₯Ό κ°•μ œν•˜λŠ” κ·œμΉ™μž…λ‹ˆλ‹€. ν˜„μž¬λŠ” off둜 μ„€μ •λ˜μ–΄ μžˆμ§€λ§Œ, 접근성을 μœ„ν•΄ ν”„λ‘œμ νŠΈμ— 따라 ν™œμ„±ν™”λ₯Ό κ³ λ €ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
473+
474+
#### `jsx-a11y/img-redundant-alt`
475+
476+
```json
477+
"warn"
478+
```
479+
480+
**이유**: μ΄λ―Έμ§€μ˜ `alt` ν…μŠ€νŠΈμ— "image", "photo", "picture" λ“±μ˜ μ€‘λ³΅λœ 단어λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 κ²½κ³ ν•©λ‹ˆλ‹€. 슀크린 리더가 이미 μ΄λ―Έμ§€μž„μ„ μ•Œλ €μ£Όλ―€λ‘œ λΆˆν•„μš”ν•©λ‹ˆλ‹€.
481+
482+
#### `jsx-a11y/media-has-caption`
483+
484+
```json
485+
"off"
486+
```
487+
488+
**이유**: λΉ„λ””μ˜€λ‚˜ μ˜€λ””μ˜€ μš”μ†Œμ— μžλ§‰μ„ μš”κ΅¬ν•˜λŠ” κ·œμΉ™μž…λ‹ˆλ‹€. ν˜„μž¬λŠ” off둜 μ„€μ •λ˜μ–΄ μžˆμ§€λ§Œ, 접근성을 μœ„ν•΄ ν”„λ‘œμ νŠΈμ— 따라 ν™œμ„±ν™”λ₯Ό κ³ λ €ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
489+
490+
#### `jsx-a11y/mouse-events-have-key-events`
491+
492+
```json
493+
"off"
494+
```
495+
496+
**이유**: 마우슀 μ΄λ²€νŠΈμ— λŒ€μ‘ν•˜λŠ” ν‚€λ³΄λ“œ 이벀트λ₯Ό κ°•μ œν•˜λŠ” κ·œμΉ™μž…λ‹ˆλ‹€. ν˜„μž¬λŠ” off둜 μ„€μ •λ˜μ–΄ μžˆμ§€λ§Œ, 접근성을 μœ„ν•΄ ν”„λ‘œμ νŠΈμ— 따라 ν™œμ„±ν™”λ₯Ό κ³ λ €ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
497+
498+
#### `jsx-a11y/no-noninteractive-tabindex`
499+
500+
```json
501+
"warn"
502+
```
503+
504+
**이유**: μƒν˜Έμž‘μš©ν•˜μ§€ μ•ŠλŠ” μš”μ†Œ(div, span λ“±)에 `tabIndex`λ₯Ό μ„€μ •ν•˜λŠ” 것을 κ²½κ³ ν•©λ‹ˆλ‹€. ν‚€λ³΄λ“œ λ„€λΉ„κ²Œμ΄μ…˜μ˜ ν˜Όλž€μ„ λ°©μ§€ν•©λ‹ˆλ‹€.
505+
506+
#### `jsx-a11y/no-redundant-roles`
507+
508+
```json
509+
"warn"
510+
```
511+
512+
**이유**: HTML μš”μ†Œμ˜ κΈ°λ³Έ μ—­ν• κ³Ό λ™μΌν•œ `role` 속성을 μ€‘λ³΅μœΌλ‘œ μ§€μ •ν•˜λŠ” 것을 κ²½κ³ ν•©λ‹ˆλ‹€. 예: `<button role="button">`
513+
514+
#### `jsx-a11y/role-has-required-aria-props`
515+
516+
```json
517+
"warn"
518+
```
519+
520+
**이유**: νŠΉμ • ARIA `role`을 μ‚¬μš©ν•  λ•Œ ν•„μˆ˜μ μΈ ARIA 속성이 λˆ„λ½λ˜μ§€ μ•Šλ„λ‘ κ²½κ³ ν•©λ‹ˆλ‹€. 슀크린 리더가 μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.
521+
522+
#### `jsx-a11y/role-supports-aria-props`
523+
524+
```json
525+
"warn"
526+
```
527+
528+
**이유**: νŠΉμ • `role`μ—μ„œ μ§€μ›ν•˜μ§€ μ•ŠλŠ” ARIA 속성을 μ‚¬μš©ν•˜λŠ” 것을 κ²½κ³ ν•©λ‹ˆλ‹€. μœ νš¨ν•˜μ§€ μ•Šμ€ ARIA 쑰합을 λ°©μ§€ν•©λ‹ˆλ‹€.
529+
530+
#### `jsx-a11y/tabindex-no-positive`
531+
532+
```json
533+
"warn"
534+
```
535+
536+
**이유**: μ–‘μˆ˜ `tabIndex` κ°’ μ‚¬μš©μ„ κ²½κ³ ν•©λ‹ˆλ‹€. μ–‘μˆ˜ 값은 ν‚€λ³΄λ“œ λ„€λΉ„κ²Œμ΄μ…˜ μˆœμ„œλ₯Ό μ˜ˆμΈ‘ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“€λ―€λ‘œ `0` λ˜λŠ” `-1`만 μ‚¬μš©ν•˜λ„λ‘ ꢌμž₯ν•©λ‹ˆλ‹€.
537+
538+
#### `jsx-a11y/prefer-tag-over-role`
539+
540+
```json
541+
"warn"
542+
```
543+
544+
**이유**: ARIA `role`을 μ‚¬μš©ν•˜λŠ” λŒ€μ‹  의미둠적인 HTML νƒœκ·Έλ₯Ό μš°μ„  μ‚¬μš©ν•˜λ„λ‘ ꢌμž₯ν•©λ‹ˆλ‹€. 예: `<div role="button">` λŒ€μ‹  `<button>` μ‚¬μš©
545+
462546
---
463547

464548
## πŸ”₯ Node Rules

0 commit comments

Comments
Β (0)