Coding Convention - withPet-team/withPet-client GitHub Wiki

βœ… Coding Convention

React

  • ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ μž‘μ—…ν•œλ‹€.
  • ν™”μ‚΄ν‘œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€.
  • varλ₯Ό μ“°μ§€ μ•Šκ³ , const와 let으둜 κ΅¬μ„±ν•œλ‹€. 그리고 μ΄λ•Œ constλ₯Ό let보닀 μœ„μ— μ„ μ–Έν•œλ‹€.
  • λ³€μˆ˜λͺ…은 camelCase둜 μž‘μ„±ν•œλ‹€.
  • λ°°μ—΄κ³Ό κ°μ²΄λŠ” λ°˜λ“œμ‹œ λ¦¬ν„°λŸ΄λ‘œ μ„ μ–Έν•œλ‹€.
  • λ³€μˆ˜ 등을 μ‘°ν•©ν•΄μ„œ λ¬Έμžμ—΄μ„ μƒμ„±ν•˜λŠ” 경우 ν…œν”Œλ¦Ώ λ¬Έμžμ—΄μ„ μ΄μš©ν•œλ‹€.
  • 쑰건을 확인할 λ•ŒλŠ” 삼쀑 λ“±ν˜Έ μ—°μ‚°μžμΈ === ν˜Ήμ€ !== 만 μ‚¬μš©ν•œλ‹€.

TailWind

  • 클래슀λͺ…은 μΌ€λ°₯μΌ€μ΄μŠ€λ‘œ μ‚¬μš©
  • μž¬μ‚¬μš© κ°€λŠ₯ν•œ 뢀뢄은 클래슀둜 λ§Œλ“€κΈ°

prettier

{
  "printWidth": 80,
  "tabWidth": 2,
  "useTabs": false,
  "semi": false,
  "singleQuote": false,
  "trailingComma": "all",
  "bracketSpacing": true,
  "arrowParens": "avoid",
  "endOfLine": "auto",
  "editor.formatOnSave": false,
  "editor.wordWrap": "on"
}

esLint

rules: {
    // varλŠ” μ‚¬μš©ν•  수 μ—†λ‹€
    'no-var': ['error'],
    // μ„Έλ―Έμ½œλ‘ μ€ μ‚¬μš©ν•˜μ§€ μ•Šκ² λ‹€(νƒ€μž…μŠ€ν¬λ¦½νŠΈ ν”„λ‘œμ νŠΈμ—μ„œ ꢌμž₯)
    semi: ['error', 'never'],
    // Function.prototype.apply() λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” spread μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€
    'prefer-spread': ['error'],
    // μ„ μ–Έν•œ ν‘œν˜„μ‹μ€ λ°˜λ“œμ‹œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€
    'no-unused-expressions': ['error'],
    // Function 객체에 new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€
    'no-new-func': ['error'],
    // μƒμ„±μž ν•¨μˆ˜λŠ” return을 ν•  수 μ—†λ‹€
    'no-constructor-return': ['error'],
    // if λ¬Έμ—μ„œ return을 ν•˜λ©΄ else λ¬Έμ—μ„œ return을 ν•  수 μ—†λ‹€
    'no-else-return': ['error'],
    // μ•ˆμ „ν•˜μ§€ λͺ»ν•œ μ˜΅μ…”λ„ 체이닝을 ν•  수 μ—†λ‹€
    'no-unsafe-optional-chaining': ['error'],
    // λΆˆν•„μš”ν•œ λ°˜λ³΅λ¬Έμ€ μ‚¬μš©ν•  수 μ—†λ‹€
    'no-unreachable-loop': ['error'],
    // νŒŒλΌλ―Έν„°λŠ” 읽기 μ „μš©μ΄λ‹€
    'no-param-reassign': ['error'],
    // μ„ μ–Έν•˜μ§€ μ•Šμ€ μ½”λ“œλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€
    'no-use-before-define': ['error'],
    // if ~ else 쀑첩은 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€
    'max-depth': [
      'error',
      {
        max: 3,
      },
    ],
    // return λ¬Έ μ΄μ „μ—λŠ” λ°˜λ“œμ‹œ 빈 쀄이 μžˆμ–΄μ•Ό ν•œλ‹€
    'padding-line-between-statements': [
      'error',
      {
        blankLine: 'always',
        prev: '*',
        next: 'return',
      },
    ],
    // λ¬Έμžμ—΄ μ„ μ–Έμ—λŠ” ν™‘λ”°μ˜΄ν‘œλ₯Ό μ‚¬μš©ν•œλ‹€
    quotes: [
      'error',
      'single',
      {
        avoidEscape: true,
      },
    ],
    // μ€‘μ²©λœ object μ•žλ’€μ—λŠ” 곡백이 μžˆμ–΄μ•Ό ν•œλ‹€.
    'object-curly-spacing': ['error', 'always'],
    // μ€‘μ²©λœ λ°°μ—΄ μ•žλ’€μ—λŠ” 곡백이 있으면 μ•ˆλœλ‹€
    'array-bracket-spacing': ['error', 'never'],
    // μ€‘κ΄„ν˜Έμ˜ μŠ€νƒ€μΌμ„ 톡일
    'brace-style': ['error'],
    // no-alert λ£°κ³Ό μΆ©λŒν•˜λ―€λ‘œ 끔
    'no-restricted-globals': ['off'],
    // alert, confirm, prompt λŠ” μ‚¬μš©μ„ ꢌμž₯ν•˜μ§€ μ•ŠλŠ”λ‹€
    'no-alert': ['warn'],
    // console.log λŠ” μ‚¬μš©ν•  수 μ—†λ‹€
    'no-console': [
      'warn',
      {
        allow: ['warn', 'error'],
      },
    ],
    // jsxμ—λŠ” 쌍 λ”°μ˜΄ν‘œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
    'jsx-quotes': ['error', 'prefer-double'],
    // λ¬Έμžμ—΄ μ—°κ²°μ—λŠ” ν…œν”Œλ¦Ώ λ¬Έμžμ—΄μ„ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€
    'prefer-template': ['error'],
    // 객체의 ν”„λ‘œνΌν‹° 이름은 ν•„μš”ν•  λ•Œλ§Œ λ”°μ˜΄ν‘œλ‘œ 감싸야 ν•œλ‹€
    'quote-props': ['error', 'as-needed'],
 }