Published on

ESLint

린트

배경

린트가 필요한 상황

console.log()(function () {})()
// TypeError 발생
// console.log()(function () {})() 로 읽힘
  • 브라우저는 코드에 세미콜론을 자동으로 넣는 과정 수행(ASI)
  • 하지만 의도치 않는 문법상의 오류로 Human Error 발생

ESLint 등장

  • ECMAScript 코드에서 문제점을 검사하고 더 나은 코드로 정정하는 린트 도구
  • 코드의 가독성을 높이고 잠재적인 오류와 버그를 제거
  • 과거 JSLint, JSHint에 이어 최근에 많이 사용하는 린트 도구

역할

  • 포맷팅
    • 들여쓰기, 줄 길이 등 일련의 규칙을 정할 수 있음
  • 코드품질
    • 잠재적인 오류를 사전에 체크해주는 기능

설치 및 실행

설치

$ npm install eslint

설정 파일 생성

.eslintrc.js

module.export = {}
  • 아무런 설정없이 설정 파일을 먼저 생성(최초 정상 실행 확인)

실행

실행 파일 생성

app.js

console.log()(function () {})()
  • 초기에 썼던 문법 오류 코드로 검증

실행

$ npx eslint app.js
  • 아무런 오류 없이 실행됨을 확인
  • 아직 eslint의 configuration을 하지 않았기 때문에 아무런 로그가 출력되지 않음

설정

규칙

  • ESLint는 검사 규칙을 미리 정해놓았기 때문에 Rule을 환경설정에 추가해야 함
  • 공식 문서 참고
    • 설정하고자 하는 규칙을 정함

no-unexpected-multiline 예제

.eslintrc.js

module.exports = {
  rules: {
    'no-unexpected-multiline': 'error',
  },
}
  • 설정하고자하는 규칙 중에 multiline 관련 오류를 출력하는 규칙을 설정
    • [Error 경로 출력 경로 / 파일명]
      2:1  error  Unexpected newline between function and ( of function call  no-unexpected-multiline
      ✖ 1 problem (1 error, 0 warnings)
      
    • 함수와 괄호 사이에 줄바꿈 오류를 내뱉음

      해당 파일의 문법 오류를 수정한 후 다시 실행하면 오류 로그없이 아무런 출력을 하지 않음(정상 동작)

no-extra-semi

.eslintrc.js

module.exports = {
  rules: {
    'no-extra-semi': 'error',
  },
}

app.js

console.log()
(function () {})()
  • 세미콜론(;)이 여러개인 경우, 오류 사항은 아니지만 no-extra-semi rule을 추가하면 error로 출력할 수 있음
    • [Error 경로 출력 경로 / 파일명]
      1:15  error  Unnecessary semicolon  no-extra-semi
      1:16  error  Unnecessary semicolon  no-extra-semi
      1:17  error  Unnecessary semicolon  no-extra-semi
      1:18  error  Unnecessary semicolon  no-extra-semi
      1:19  error  Unnecessary semicolon  no-extra-semi
      1:20  error  Unnecessary semicolon  no-extra-semi
      ✖ 6 problems (6 errors, 0 warnings)
      6 errors and 0 warnings potentially fixable with the `--fix` option.
      
    • 불필요한 세미콜론 사용을 수정하라는 오류를 출력
    • --fix option 제안
      • 자동으로 수정할 수 있는 규칙 존재
      • 위에서 첨부한 eslint 공식 사이트에서 🔧 아이콘이 붙어있는 경우 자동으로 수정할 수 있음

Extensible Config

.eslintc.js

module.exports = {
  extends: ['eslint:recommended'],
}
  • ESLint의 규칙이 너무 많아서 고르기 어렵다면, fix option을 제공하는 규칙들을 미리 정해놓은 eslint:recommended 설정을 추가함
  • 이외에도 기본적으로 제공하는 설정 외에 자주 사용하는 두가지 규칙이 존재
    • standard
      • javascript standard style
    • airbnb
      • airbnb의 스타일 가이드

초기화

  • 위와 같은 설정을 --init 옵션을 추가하여 대화 형식으로 손쉽게 구성 가능
$ npx eslint --init
#? How would you like to use ESLint? To check syntax and find problems
#? What type of modules does your project use? JavaScript modules (import/export)
#? Which framework does your project use? None of these
#? Does your project use TypeScript? No
#? Where does your code run? Browser
#? What format do you want your config file to be in? JavaScript
#Local ESLint installation not found.
#The config that you've selected requires the following dependencies:
#eslint@latest
#? Would you like to install them now with npm? Yes
  • 본인 개발 환경에 따라 선택하면, 아까 구성했던 .eslintrc.js 파일이 새로 갱신됨

확인

.eslintrc.js

module.exports = {
  env: {
    browser: true,
    es6: true,
  },
  extends: 'eslint:recommended',
  globals: {
    Atomics: 'readonly',
    SharedArrayBuffer: 'readonly',
  },
  parserOptions: {
    ecmaVersion: 2018,
    sourceType: 'module',
  },
  rules: {},
}
  • 터미널에서 구성했던 옵션을 해당 파일에서 확인할 수 있음

Referenced