ESLint의 no-restricted-syntax로 for-of만 허용

ESLint에서 airbnb-base을 사용합니다. 이전까지 사용했습니다 (추기 참조).

ES2015 for-of를 사용하려고하면 no-restricted-syntax으로 오류가 발생합니다. 다음 기사가 매우 도움이되었습니다.
ESLint 지원 이야기 ~ no-restricted-syntax ~

사정은 알았지만 여전히 for-of를 사용하고 싶습니다!
그러나 for-in 라든지는 금지로 좋기 때문에 no-restricted-syntax 자체를 무효로 하고 싶지 않다!

라는 것은 for-of만을 허용하는 방법입니다.

우선 airbnb-base의 대원의 설정을 확인. 이번에는이 파일이었습니다.

node_modules/eslint-config-airbnb-base/rules/style.js
    // disallow certain syntax forms
    // http://eslint.org/docs/rules/no-restricted-syntax
    'no-restricted-syntax': [
      'error',
      {
        selector: 'ForInStatement',
        message: 'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.',
      },
      {
        selector: 'ForOfStatement',
        message: 'iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow them. Separately, loops should be avoided in favor of array iterations.',
      },
      {
        selector: 'LabeledStatement',
        message: 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.',
      },
      {
        selector: 'WithStatement',
        message: '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.',
      },
    ],

이 부분을 자신의 .eslintrc에 전기하고 불필요한 부분을 삭제하면 OK
나는 yaml로 쓰고 있으므로, 알기 쉽도록 코멘트 아웃으로 해 보았습니다.

.eslintrc.yml
  # for-ofは認める
  no-restricted-syntax:
    - error
    - selector: 'ForInStatement'
      message: 'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.'
    # - selector: 'ForOfStatement'
    #   message: 'iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow them. Separately, loops should be avoided in favor of array iterations.'
    - selector: 'LabeledStatement'
      message: 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.'
    - selector: 'WithStatement'
      message: '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.'

처음에는 "대원의 no-restricted-syntax에서 설정 끝난 selector 중 ForOfStatement만을 무효로 한다"라고 생각했습니다만, 그렇지 않고 "스스로 no-restricted-syntax을 쓴 경우는 대원의 no-restricted-syntax 의 설정만이 사용된다」라고 하는 것이군요.
no-restricted-syntax 뿐만 아니라 다른 규칙에서도 마찬가지입니다. 어쩌면 ESLint 자체의 사양으로 누군가가 정리하고 있다고는 생각하지만, 발견되지 않았습니다

그럼 또.

2017/10/31 추가



airbnb-base 의 규칙은 너무 엄격해서, 본건 이외에도 여러가지 귀찮은 요소가 많아 시간을 점점 낭비하는 것을 깨닫고, 사용하는 그만두었습니다!

지금은 standard 사용하고 있습니다. 무엇보다 「세미콜론 쓰지 않는다」라고 곳에 반했습니다! 벌써 세미콜론 쓰지 않는 것만으로 효율이 전혀 오른다 (웃음)

좋은 웹페이지 즐겨찾기