Tslint: κ²½κ³ : 'no-unused-variable' κ·œμΉ™μ—λŠ” μœ ν˜• 검사 λ©”μ‹œμ§€κ°€ ν•„μš”ν•©λ‹ˆλ‹€...

에 λ§Œλ“  2017λ…„ 06μ›” 16일  Β·  46μ½”λ©˜νŠΈ  Β·  좜처: palantir/tslint

버그 μ‹ κ³ 

tslint.json ꡬ성:

{
  "rulesDirectory": [
    "node_modules/codelyzer"
  ],
  "rules": {
    "arrow-return-shorthand": true,
    "callable-types": true,
    "class-name": true,
    "comment-format": [
      true,
      "check-space"
    ],
    "curly": true,
    "eofline": true,
    "forin": true,
    "import-blacklist": [
      true,
      "rxjs"
    ],
    "import-spacing": true,
    "indent": [
      true,
      "spaces"
    ],
    "interface-over-type-literal": true,
    "label-position": true,
    "max-line-length": [
      true,
      140
    ],
    "member-access": false,
    "member-ordering": [
      true,
      {
        "order": [
          "public-static-field",
          "protected-static-field",
          "public-static-method",
          "protected-static-method"
        ]
      }
    ],
    "no-arg": true,
    "no-bitwise": true,
    "no-console": [
      true,
      "debug",
      "info",
      "time",
      "timeEnd",
      "trace"
    ],
    "no-construct": true,
    "no-debugger": true,
    "no-duplicate-super": true,
    "no-empty": false,
    "no-empty-interface": true,
    "no-eval": true,
    "no-inferrable-types": [
      true,
      "ignore-params"
    ],
    "no-unused-variable": true,
    "no-misused-new": true,
    "no-non-null-assertion": true,
    "no-shadowed-variable": true,
    "no-string-literal": false,
    "no-string-throw": true,
    "no-switch-case-fall-through": true,
    "no-trailing-whitespace": true,
    "no-unnecessary-initializer": true,
    "no-unused-expression": true,
    "no-var-keyword": true,
    "object-literal-sort-keys": false,
    "one-line": [
      true,
      "check-open-brace",
      "check-catch",
      "check-else",
      "check-whitespace"
    ],
    "prefer-const": true,
    "quotemark": [
      true,
      "single"
    ],
    "radix": true,
    "semicolon": [
      "always"
    ],
    "triple-equals": [
      true,
      "allow-null-check"
    ],
    "typedef-whitespace": [
      true,
      {
        "call-signature": "nospace",
        "index-signature": "nospace",
        "parameter": "nospace",
        "property-declaration": "nospace",
        "variable-declaration": "nospace"
      }
    ],
    "typeof-compare": true,
    "unified-signatures": true,
    "variable-name": false,
    "whitespace": [
      true,
      "check-branch",
      "check-decl",
      "check-operator",
      "check-separator",
      "check-type"
    ],
    "directive-selector": [
      true,
      "attribute",
      "app",
      "camelCase"
    ],
    "component-selector": [
      true,
      "element",
      "app",
      "kebab-case"
    ],
    "use-input-property-decorator": true,
    "use-output-property-decorator": true,
    "use-host-property-decorator": true,
    "no-input-rename": true,
    "no-output-rename": true,
    "use-life-cycle-interface": true,
    "use-pipe-transform-interface": true,
    "component-class-suffix": true,
    "directive-class-suffix": true,
    "no-access-missing-member": true,
    "templates-use-public": true,
    "invoke-injectable": true
  }
}

λ‚΄κ°€ μ •ν™•νžˆ 무엇을 잘λͺ»ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

  • __TSLint 버전__: 5.4.3
  • __TypeScript 버전__: 2.3.4
  • ____λ₯Ό 톡해 TSLint μ‹€ν–‰ν•˜κΈ°: 원사와 λͺ…령쀄

μ‹€μ œ 행동

μ•„λž˜ λ§€κ°œλ³€μˆ˜λ‘œ tslint λ₯Ό μ‹€ν–‰ν•  λ•Œ:

tslint --type-check --project tsconfig.json  src/**/*.ts

μ•„λž˜ κ²½κ³ κ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

Could not find implementations for the following rules specified in the configuration:
    Warning: The 'no-unused-variable' rule requires type checking
Try upgrading TSLint and/or ensuring that you have all necessary custom rules installed.
If TSLint was recently upgraded, you may have old rules configured which need to be cleaned up.

μ˜ˆμƒλ˜λŠ” 행동

tslint λ¬Έμ„œμ— λ”°λ₯΄λ©΄ μœ ν˜• 검사λ₯Ό μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 것은 --type-check --project tsconfig.json μ „λ‹¬ν•˜λŠ” κ²ƒλΏμ΄μ§€λ§Œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

Question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

VSCode 1.19 μΆ”κ°€ 정보λ₯Ό 보면 이 κ·œμΉ™κ³Ό λ‹€λ₯Έ κ·œμΉ™μ„ 경고둜 μ²˜λ¦¬ν•˜λŠ” μƒˆλ‘œμš΄ κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€.
μš°λ¦¬μ—κ²Œ 이것은 λ‹€μŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

  • 제거 "no-unused-variable" μ—μ„œ tslint.json
  • μΆ”κ°€ "noUnusedLocals" μš°λ¦¬μ— tsconfig.json

λ‹€λ₯Έ κ·œμΉ™μ€ λ…μžλ₯Ό μœ„ν•œ μ—°μŠ΅μœΌλ‘œ λ‚¨κ²¨λ‘‘λ‹ˆλ‹€ ;-)

tslintλŠ” 이 ν™•μž₯이고 tsconfigλŠ” VSCode κΈ°λ³Έ 제곡 λ™μž‘μž…λ‹ˆλ‹€.

λͺ¨λ“  46 λŒ“κΈ€

문제 ν…œν”Œλ¦Ώμ„ μž‘μ„±ν•΄ μ£Όμ„Έμš”. tslint.json은 μ–΄λ–»κ²Œ μƒκ²Όλ‚˜μš”?

λ‚˜λŠ” 집에 있고 같은 ν”„λ‘œμ νŠΈλ₯Ό μ‹œλ„ν–ˆκ³  잘 μž‘λ™ν•©λ‹ˆλ‹€. μ›”μš”μΌμ— λ‹€μ‹œ ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ μΆœκ·Όν•  λ•ŒκΉŒμ§€ 이것을 μ—΄μ–΄λ‘˜ κ²ƒμž…λ‹ˆλ‹€. λ‚΄ λ…Έλ“œ λͺ¨λ“ˆμ„ λ‹€μ‹œ μ„€μΉ˜ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ 문제 ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜λ„λ‘ μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€.

tslintκ°€ μ—…λ°μ΄νŠΈλœ ν›„(v4 -> v5), --type-check , --project 인수 없이 --type-check no-unused-variable λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

이 μ˜΅μ…˜μ€ μ—…λ°μ΄νŠΈ ν›„ 인쇄 κ²°κ³Όκ°€ λ‚˜μ˜¬ λ•ŒκΉŒμ§€ μ‚¬μš©ν•˜κΈ° μ–΄λ ΅κ³  μ‹œκ°„μ΄ 였래 κ±Έλ¦¬μ§€λ§Œ μ€‘μš”ν•˜κ³  κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” Linting μ˜΅μ…˜μž…λ‹ˆλ‹€. μƒμœ„ 인수 없이 이 μ˜΅μ…˜μ„ μ‚¬μš©ν•  수 μžˆλŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

tslintκ°€ μ—…λ°μ΄νŠΈλœ ν›„(v4 -> v5일 수 있음) --type-check, --project 인수 μ—†μ΄λŠ” no-unused-variable을 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

tslint --type-check --project tsconfig.json src/**/*.ts 둜 --projectλ₯Ό μ „λ‹¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

집 μ»΄ν“¨ν„°μ—μ„œλŠ” 이 λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•Šμ§€λ§Œ 직μž₯ μ»΄ν“¨ν„°μ—μ„œλŠ” λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

@everedifice κ·œμΉ™ κ΅¬ν˜„μ— 버그가 μžˆμ—ˆκ³  거의 μ‚¬μš©λ˜μ§€ μ•ŠμœΌλ©°(https://github.com/palantir/tslint/issues/1481) ꢁ극적으둜 컴파일러의 no-unused-variable κ΅¬ν˜„μ— μœ„μž„ν•˜μ—¬ μœ μ§€ν•˜κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€. (이것은 λŒ€λΆ€λΆ„μ˜ 버그λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€). 이 λ¦¬ν¬μ§€ν† λ¦¬μ—λŠ” 이에 λŒ€ν•œ λ§Žμ€ ν† λ‘  μŠ€λ ˆλ“œκ°€ 있으며, λŒ€λΆ€λΆ„μ€ μ£Όμš” λ³€κ²½ 사항을 λ§Œλ“  PRκ³Ό μ—°κ²°λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€( https://github.com/palantir/tslint/pull/2235.

@mastrauckas 두 ν™˜κ²½μ˜ 차이점에 λŒ€ν•œ μžμ„Έν•œ 정보 μ—†μ΄λŠ” 정말 도움이 될 수 μ—†μŠ΅λ‹ˆλ‹€.

@adidahiya 어젯밀에도 macOS인 μ„Έ 번째 μ»΄ν“¨ν„°μ—μ„œ 이것을 μ–»μ—ˆμŠ΅λ‹ˆλ‹€. 집에 μžˆλŠ” μ»΄ν“¨ν„°μ—μ„œ λ‹€μ‹œ μ‹œλ„ν•˜μ—¬ μ—¬μ „νžˆ λ°œμƒν•˜λŠ”μ§€ ν™•μΈν•˜κ² μŠ΅λ‹ˆλ‹€.

일반적으둜:
컴퓨터 1: Windows 10이 μ™„μ „νžˆ μ΅œμ‹  μƒνƒœμ΄λ©° ν˜„μž¬λ‘œμ„œλŠ” error 받지 μ•ŠμŠ΅λ‹ˆλ‹€.
컴퓨터 2: macOSκ°€ μ™„μ „νžˆ μ—…λ°μ΄νŠΈλ˜μ—ˆκ³  error λ©λ‹ˆλ‹€.
컴퓨터 3: Windows 7이 μ™„μ „νžˆ μ—…λ°μ΄νŠΈλ˜μ—ˆκ³  error λ©λ‹ˆλ‹€.

@everedifice λͺ‡ 가지 μΆ”κ°€ κΈ°λŠ₯이 μžˆμ§€λ§Œ --project --type-check λ₯Ό μ‚¬μš©ν•  ν•„μš” 없이 λŒ€λΆ€λΆ„ no-unused-variable 와 같은 no-unused λΌλŠ” μƒˆ κ·œμΉ™μ„ μ‚¬μš©ν•˜μ—¬ tslint-consistent-codestyle 의 μƒˆ 버전을 κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€ --project --type-check .

관심이 μžˆλŠ” 경우 μ—¬κΈ°μ—μ„œ λ¬Έμ„œλ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. https://github.com/ajafff/tslint-consistent-codestyle/blob/master/docs/no-unused.md

λ¬Έμ œκ°€ μ—†λ‹€κ³  μƒκ°ν–ˆλ˜ 컴퓨터가 κ²°κ΅­ λ¬Έμ œκ°€ λ°œμƒν•œ κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. λ²„κ·ΈμΈκ°€μš”?

이 λ¬Έμ œμ— λŒ€ν•΄ μƒˆλ‘œμš΄ 것이 μžˆμŠ΅λ‹ˆκΉŒ?

같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

λ™μΌν•œ λ¬Έμ œμ΄μ§€λ§Œ 'κ²½κ³ : 'μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ³€μˆ˜ μ—†μŒ' κ·œμΉ™μ—λŠ” μœ ν˜• 정보가 ν•„μš”ν•©λ‹ˆλ‹€.'
및 'κ²½κ³ : 'no-use-before-declare' κ·œμΉ™μ—λŠ” μœ ν˜• 정보가 ν•„μš”ν•©λ‹ˆλ‹€.' ('정보'의 μ˜€νƒ€κ°€ 버전 5.5.0κ³Ό 5.7.0 μ‚¬μ΄μ—μ„œ μˆ˜μ •λœ 것을 λ³Ό 수 μžˆμ§€λ§Œ λ³€κ²½λœ 것은 μ΄κ²ƒλΏμž…λ‹ˆλ‹€). μ €λŠ” typescript 버전 2.4.1둜 μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ·Έ λ¬Έμ œμ— λŒ€ν•œ μ†Œμ‹μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

μ—¬κΈ°μ„œλ„ 같은 문제

이 λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆκ±°λ‚˜ κ²½κ³  ν‘œμ‹œλ₯Ό μ€‘μ§€ν•˜κΈ° μœ„ν•œ μž„μ‹œ μˆ˜μ • 사항이 μžˆμŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” 그것이 κ³ μ³μ‘Œλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠλŠ”λ‹€. 문제둜 λ°›μ•„λ“€μ˜€λ‹€κ³  μƒκ°ν•˜μ§€λ„ μ•ŠμŠ΅λ‹ˆλ‹€.

영ꡬ μˆ˜μ •, tslint.json λŒ€μ‹  tsconfig.jsonμ—μ„œ no-unused-variable λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ»΄νŒŒμΌλŸ¬κ°€ λ™μΌν•œ κΈ°λŠ₯을 μ œκ³΅ν•  수 μžˆλ‹€λ©΄ λ¦°ν„°λ‘œ 이λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것은 μ˜λ―Έκ°€ μ—†μŠ΅λ‹ˆλ‹€.

@AnimaMundi λŠ” λ™μΌν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€λ§Œ CI ν”„λ‘œμ„ΈμŠ€μ˜ μΌλΆ€λ‘œ tslintλ₯Ό μ‹€ν–‰ν•  λ•Œ λΉŒλ“œκ°€ μ•„λ‹ˆλΌ ν…ŒμŠ€νŠΈ 쀑에 ν”Œλž˜κ·Έλ₯Ό 지정해야 ν•©λ‹ˆλ‹€. μ»΄νŒŒμΌλŸ¬κ°€ λΉŒλ“œ μ‹œ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— 이것을 λ¬΄μ‹œ/μ œκ±°ν•΄μ•Ό ν•œλ‹€λŠ” 데 λ™μ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@haswalt λΉŒλ“œ 단계가 μ•„λ‹ˆλΌ linting λ‹¨κ³„μ—μ„œ ν”Œλž˜κ·Έλ₯Ό 지정해야 ν•˜λŠ” μ΄μœ κ°€ μ—†μŠ΅λ‹ˆλ‹€. μ–΄μ¨Œλ“ , 당신이 μ €μ—κ²Œ λ™μ˜ν•˜λ“  말든 그것은 μ€‘μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 이 ν”„λ‘œμ νŠΈμ˜ 개발과 아무 관련이 μ—†μŠ΅λ‹ˆλ‹€. 방금 λˆ„κ΅°κ°€κ°€ μˆ˜μ • ν”„λ‘œκ·Έλž¨μ„ μ°Ύκ³  μ œκ³΅ν•˜λŠ” 것을 λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

@AnimaMundi 의 μˆ˜μ • 사항과 μœ μ‚¬ν•˜κ²Œ noUnusedLocals 및 noUnusedParameters ν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄ "문제" 창에 였λ₯˜κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

@AnimaMundi @haswalt @keego Lint κ·œμΉ™κ³Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” var에 λŒ€ν•œ 컴파일러 κ²€μ‚¬μ˜ μž₯점은 λ‹€λ₯Έ TSLint μŠ€λ ˆλ“œ(https://github.com/palantir/tslint/issues/1481 및 μ—°κ²°λœ μŠ€λ ˆλ“œ)μ—μ„œ κ΄‘λ²”μœ„ν•˜κ²Œ λ…Όμ˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 λ¬Έμ œλŠ” μ‹€μ œλ‘œ 그것을 μœ„ν•œ μž₯μ†Œκ°€ μ•„λ‹™λ‹ˆλ‹€.

@adidahiya λ‚΄ μ˜κ²¬μ€ λ¦°ν„° κ·œμΉ™κ³Ό 컴파일러 κ²€μ‚¬μ˜ μž₯점에 λŒ€ν•œ 논평을 μ œκ³΅ν•˜μ§€ μ•Šκ³  이 λ¬Έμ œμ— λŒ€ν•œ μˆ˜μ • 사항을 κ³΅μœ ν•˜κΈ° μœ„ν•œ 것일 λΏμž…λ‹ˆλ‹€.

μ»΄νŒŒμΌλŸ¬μ— λ§‘κΈ°λŠ” 것은 같은 일을 ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ»΄νŒŒμΌλŸ¬μ—λŠ” FAILμ΄λΌλŠ” 단 ν•˜λ‚˜μ˜ μ˜΅μ…˜λ§Œ μžˆμŠ΅λ‹ˆλ‹€.
tslint 이λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ΄μœ λŠ” μ’…μ’… κ²½κ³ κ°€ λ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€(녹색 λ¬Όκ²°μ„  λŒ€ 빨간색 λ¬Όκ²°μ„ ).

tslint λ¬Έμ œλŠ” β€‹β€‹κ²½κ³ λ‘œ ν‘œμ‹œλ  수 μžˆμ„ 뿐만 μ•„λ‹ˆλΌ μΌνšŒμ„±μœΌλ‘œ λ¬΄μ‹œν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λ°˜λ©΄μ— typescript 컴파일 였λ₯˜λŠ”

μ΄λŸ¬ν•œ 점은 이미 λͺ¨λ‘ ν•΄μ‹œ μ²˜λ¦¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€(λ‚΄ λ§ˆμ§€λ§‰ 주석 및 μ—°κ²°λœ μŠ€λ ˆλ“œ μ°Έμ‘°). ν˜„μž¬ no-unused-variable λ₯Ό TSLint κ·œμΉ™μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것을 막을 수 μžˆλŠ” 것은 μ—†μŠ΅λ‹ˆλ‹€. 이 후속 λŒ“κΈ€μ΄ 무엇을 λ‹¬μ„±ν•˜λ €κ³  ν•˜λŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

@mastrauckas 이 κ·œμΉ™μ— μ—¬μ „νžˆ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆκΉŒ? --type-check ν”Œλž˜κ·ΈλŠ” 더 이상 μ‚¬μš©λ˜μ§€ μ•Šμ§€λ§Œ μœ ν˜• 검사 기반 κ·œμΉ™μ„ μ‚¬μš©ν•˜λ €λ©΄ --project κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

μ œμ³λ‘κ³ : TS 2.6 μ—μ„œλŠ” // @ts-ignore λ₯Ό μ‚¬μš©ν•˜μ—¬ 컴파일러 였λ₯˜λ₯Ό μ–΅μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@adidahiya λ‚˜λŠ” 이것을 컴파일러 κ·œμΉ™μ΄ μ•„λ‹Œ 보푸라기 κ·œμΉ™μœΌλ‘œ μ‚¬μš©ν•  μ΄μœ κ°€ μ—†λ‹€κ³  μ£Όμž₯ν•˜λŠ” μœ„μ˜ 주석에 μ‘λ‹΅ν–ˆμ„ λΏμž…λ‹ˆλ‹€.

ν•˜μ§€λ§Œ λ‹Ήμ‹  말이 λ§žμ•„μš”. κ΄€λ ¨ λ¬Έμ œλŠ” tslint μžμ²΄κ°€ μ•„λ‹Œ vscode ν™•μž₯에 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. tbh 이 μ£Όμ œμ— λŒ€ν•΄ λ„ˆλ¬΄ λ§Žμ€ λ¬Έμ œκ°€ μžˆμ–΄μ„œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” μ΄μœ μ™€ μœ„μΉ˜λ₯Ό μ •ν™•νžˆ νŒŒμ•…ν•˜λŠ” 데 μ‹œκ°„μ΄ κ±Έλ ΈμŠ΅λ‹ˆλ‹€.

νŒμ„ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 2.6으둜 μ „ν™˜ν•˜λŠ” μ¦‰μ‹œ 컴파일러 섀정을 μ‚¬μš©ν•˜λ„λ‘ λ‹€μ‹œ μ „ν™˜ν•˜κ² μŠ΅λ‹ˆλ‹€.

이것을 μ£Όμž₯ν•˜λŠ” μ‚¬λžŒλ“€μ„ μœ„ν•œ 또 λ‹€λ₯Έ μš”μ μ€ 린트 κ·œμΉ™μ΄ λ˜μ–΄μ„œλŠ” μ•ˆ λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 린트 κ²½κ³ λŠ” μˆ˜μ •ν•  수 있으며 이것이 이에 λŒ€ν•œ μ£Όμš” ν›„λ³΄μž…λ‹ˆλ‹€.

μ΅œμ‹  1.19 VS Code The 'no-unused-variable' rule requires type information μ—μ„œ λ™μΌν•œ κ²½κ³ κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€(μ•„λž˜ μ°Έμ‘°). λ‚΄ ꡬ성에 λˆ„λ½λœ 것이 μžˆμŠ΅λ‹ˆκΉŒ?

{
  "extends": "tslint:recommended",
  "rules": {
    "linebreak-style": [true, "LF"],
    "quotemark": [true, "single", "avoid-escape", "avoid-template"],
    "no-console": false,
    "no-unused-expression": false,
    "ordered-imports": false,
    "member-access": [true, "no-public"],
    "object-literal-sort-keys": false,
    "curly": [true, "ignore-same-line"],
    "semicolon": [true, "never"],
    "no-var-requires": false,
    "no-unused-variable": true
  }
}

VSCode 1.19 μΆ”κ°€ 정보λ₯Ό 보면 이 κ·œμΉ™κ³Ό λ‹€λ₯Έ κ·œμΉ™μ„ 경고둜 μ²˜λ¦¬ν•˜λŠ” μƒˆλ‘œμš΄ κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€.
μš°λ¦¬μ—κ²Œ 이것은 λ‹€μŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

  • 제거 "no-unused-variable" μ—μ„œ tslint.json
  • μΆ”κ°€ "noUnusedLocals" μš°λ¦¬μ— tsconfig.json

λ‹€λ₯Έ κ·œμΉ™μ€ λ…μžλ₯Ό μœ„ν•œ μ—°μŠ΅μœΌλ‘œ λ‚¨κ²¨λ‘‘λ‹ˆλ‹€ ;-)

tslintλŠ” 이 ν™•μž₯이고 tsconfigλŠ” VSCode κΈ°λ³Έ 제곡 λ™μž‘μž…λ‹ˆλ‹€.

VS 1.19μ—μ„œ 이미 λ³΄κ³ ν•œ 것 κ°™κΈ° λ•Œλ¬Έμ— no-unused-variable λ₯Ό μ œκ±°ν•˜κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€.

VSCodeκ°€ 이것과 관련이 μžˆλŠ”μ§€ μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. VSCode만 이λ₯Ό 경고둜 μ·¨κΈ‰ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλŠ” μΆ©λΆ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ›ΉνŒ© 개발 μ„œλ²„ κ°μ‹œ λΉŒλ“œκ°€ 그둜 인해 μ‹€νŒ¨ν•˜μ§€ μ•Šλ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€. no-unused-variable νŠΉμ • νŽΈμ§‘μžμ™€ 상관없이

  • 개발 쀑 경고둜 처리
  • CI 쀑 λΉŒλ“œ μ‹€νŒ¨

?

@pelotom , μ—¬λŸ¬ μ‚¬λžŒλ“€μ΄ VSCode TSLint ν™•μž₯μ—μ„œ μ—¬κΈ°λ‘œ λ¦¬λ””λ ‰μ…˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€(예: https://github.com/Microsoft/vscode-tslint/issues/219).

μ§€κΈˆκΉŒμ§€ TSλŠ” 일뢀 문제λ₯Ό κ²½κ³ (녹색 λ¬Όκ²°μ„ )둜 ν‘œμ‹œν•  수 μ—†μ—ˆμ§€λ§Œ 린트(ESlint, TSLint)λŠ” ν‘œμ‹œν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μš°λ¦¬λŠ” TSlintκ°€ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ³€μˆ˜λ₯Ό 경고둜 λ³΄κ³ ν•˜μ§€ μ•ŠλŠ” 이유λ₯Ό 묻고 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 1.19λΆ€ν„° VSCode의 TSλŠ” μ΄λŸ¬ν•œ κ²½κ³ λ₯Ό 생성할 수 있으며 μš°λ¦¬λŠ” 이 λ¬Έμ œμ—μ„œ μ² νšŒν•©λ‹ˆλ‹€ πŸ˜‰

λΆ„λͺ…νžˆ λ§μ”€λ“œλ¦¬μžλ©΄, 저도 VSCodeλ₯Ό μ‚¬μš©ν•˜λ©° μ΄λŸ¬ν•œ κ²½κ³ κ°€ νŽΈμ§‘κΈ°μ—μ„œ κ°•μ‘° ν‘œμ‹œλ˜λŠ” 것을 보고 μ‹Άμ§€λ§Œ VSCode의 섀정은 λ‚˜λ¨Έμ§€ 뢀뢄에 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 컴파일러 였λ₯˜μ˜ 심각도λ₯Ό _ꡬ성_ν•˜λŠ” 잘λͺ»λœ κ³„μΈ΅μ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. 도ꡬ 체인.

λ‚˜λŠ” Tom의 말에 λ™μ˜ν•˜λ©°, 에디터와 λΉŒλ“œ/CI μ ˆμ°¨κ°€ λͺ¨λ‘ μ μ ˆν•œ 지원을 받을 수 μžˆλŠ” κ³³μ—μ„œ μ†”λ£¨μ…˜μ„ 찾을 수 있기λ₯Ό λ°”λžλ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€ μš°λ¦¬λŠ” κ°•λ ₯ν•œ 반발(μ •λ‹Ήν•œ κ²ƒμ²˜λŸΌ λ³΄μž„)을 λ³΄μ•˜κ³  일뢀(μ €λ₯Ό ν¬ν•¨ν•˜μ—¬)λŠ” μ‹€μ œ μ†”λ£¨μ…˜μ— λŒ€ν•œ 희망을 μœ μ§€ν•˜λ©΄μ„œ 였늘 μš°λ¦¬κ°€ ν•  수 μžˆλŠ” 것을 μ·¨ν•  κ²ƒμž…λ‹ˆλ‹€.

VSCode 1.19 μΆ”κ°€ 정보λ₯Ό 보면 이 κ·œμΉ™κ³Ό λ‹€λ₯Έ κ·œμΉ™μ„ 경고둜 μ²˜λ¦¬ν•˜λŠ” μƒˆλ‘œμš΄ κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€.

@rnemec "readme" λŒ€μ‹  "릴리슀 λ…ΈνŠΈ"λ₯Ό μž‘μ„±ν•˜λ €κ³  ν–ˆλ˜ 것

VS CodeλŠ” 이제 TypeScript μ½”λ“œ μŠ€νƒ€μΌ 문제λ₯Ό 였λ₯˜ λŒ€μ‹  경고둜 ν‘œμ‹œν•©λ‹ˆλ‹€. 이것은 λ‹€μŒμ— μ μš©λ©λ‹ˆλ‹€:

λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ—ˆμ§€λ§Œ μ‚¬μš©λ˜μ§€ μ•ŠμŒ
속성이 μ„ μ–Έλ˜μ—ˆμ§€λ§Œ 값을 읽지 μ•ŠμŠ΅λ‹ˆλ‹€.
μ—°κ²°ν•  수 μ—†λŠ” μ½”λ“œκ°€ κ°μ§€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
λ―Έμ‚¬μš© 라벨
μŠ€μœ„μΉ˜μ˜ μΌ€μ΄μŠ€λ₯Ό 톡해 λ„˜μ–΄μ§
λͺ¨λ“  μ½”λ“œ κ²½λ‘œκ°€ 값을 λ°˜ν™˜ν•˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.
이λ₯Ό 경고둜 μ²˜λ¦¬ν•˜λŠ” 것은 TSLint와 같은 λ‹€λ₯Έ 도ꡬ와 μΌμΉ˜ν•©λ‹ˆλ‹€. 이것은 λͺ…λ Ήμ€„μ—μ„œ tscλ₯Ό μ‹€ν–‰ν•  λ•Œ μ—¬μ „νžˆ 였λ₯˜λ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€.

"typescript.reportStyleChecksAsWarnings": falseλ₯Ό μ„€μ •ν•˜μ—¬ 이 λ™μž‘μ„ λΉ„ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ 이것은 μž„μ‹œ μ†”λ£¨μ…˜μ΄λ©° VSCodeλ₯Ό μ‚¬μš©ν•  λ•Œλ§Œ μž‘λ™ν•©λ‹ˆλ‹€. tsc 직접 μ‚¬μš©ν•˜λŠ” λ‹€λ₯Έ λΉŒλ“œ λ„κ΅¬λŠ” κ²½κ³ κ°€ 남아 μžˆλŠ” 경우 μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. Atom을 μ‚¬μš©ν•˜λŠ” λ™λ£Œκ°€ μžˆμœΌλ―€λ‘œ λ‚΄κ°€ λ³€κ²½ν•˜κ³  κ²½κ³  쀑 ν•˜λ‚˜λ₯Ό λ¬΄μ‹œν•˜λ©΄ μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•  수 μ—†μŠ΅λ‹ˆλ‹€. 였λ₯Έμͺ½?

λ‚˜λŠ” 이것이 μ–΄λ–»κ²Œ ν•΄κ²°λ˜λŠ”μ§€ 잘 μ΄ν•΄ν•˜μ§€ λͺ»ν•œλ‹€. μ»΄νŒŒμΌλŸ¬κ°€ μ—¬μ „νžˆ 였λ₯˜λ‘œ μ²˜λ¦¬ν•˜λŠ” 경우 μ΄λŸ¬ν•œ ν•­λͺ©μ„ 경고둜 ν‘œμ‹œν•˜λŠ” 것이 μ–΄λ–»κ²Œ μœ μš©ν•©λ‹ˆκΉŒ?

그리고 λ‚΄κ°€ μ˜¬λ°”λ₯΄κ²Œ μ΄ν•΄ν•œλ‹€λ©΄ μž₯기적인 해결책은 tsc μ—μ„œ λ™μΌν•œ λ™μž‘μ„ μ μš©ν•˜λŠ” ν”Œλž˜κ·Έλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜(경고와 ν•¨κ»˜ μ»΄νŒŒμΌλ˜λ„λ‘) μ΄λŸ¬ν•œ 컴파일러 검사λ₯Ό μ™„μ „νžˆ μ œκ±°ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

--- νŽΈμ§‘ν•˜λ‹€ ---
이전 λŒ“κΈ€μ„ λ‹€ μ½μ§€λŠ” μ•Šμ•˜μŠ΅λ‹ˆλ‹€. @pelotom 은 이미 같은

개발 λͺ¨λ“œμ™€ CI λͺ¨λ“œμ—μ„œ 린트 κ²€μ‚¬μ˜ 심각도가 λ‹€λ₯΄λ„둝 ν•˜λ €λ©΄ extends κ°€ λ‹€λ₯Έ ν•˜λ‚˜μΈ μ—¬λŸ¬ tslint.json ꡬ성을 μ‚¬μš©ν•˜μ—¬ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. #2569λŠ” defaultSeverity ꡬ성 라인 ν•˜λ‚˜λ§ŒμœΌλ‘œ 심각도λ₯Ό μ „ν™˜ν•  수 μžˆλ„λ‘ μ—¬κΈ°μ„œ UXκ°€ μ–‘ν˜Έν•˜λ„λ‘ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. ν˜„μž¬ 진행 μ€‘μž…λ‹ˆλ‹€.

@adidahiya λ…Όμ˜λ˜κ³  μžˆλŠ” 것은 tsc 의 noUnusedLocals μ‚¬μš©ν•˜μ—¬ tsc no-unused-variable 린트 κ·œμΉ™μ— λŒ€ν•œ _λŒ€μ²΄_라고 ν•©λ‹ˆλ‹€.

@pelotom λ§žμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ tsc λŠ” 아직 μ΄λŸ¬ν•œ μ›Œν¬ν”Œλ‘œλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 두 개의 tsconfig.json 파일이 μžˆμ„ 수 있으며, μ—¬κΈ°μ„œ ν•˜λ‚˜λŠ” λ‹€λ₯Έ ν•˜λ‚˜λ₯Ό ν™•μž₯ν•˜κ³  각 "λΉ„ 치λͺ…적" 컴파일러 검사(이 경우 noUnusedLocals , noUnusedParameters )λ₯Ό κ°œλ³„μ μœΌλ‘œ λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€. ' νŽΈμ§‘κΈ°μ—μ„œ μˆ˜ν‘œλ₯Ό 경고둜 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

@adidahiya 예, κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν˜„μž¬ μœ νš¨ν•œ λŒ€μ²΄ν’ˆμ΄ μ•„λ‹™λ‹ˆλ‹€. 그리고 noUnusedLocals 이 Lint κ·œμΉ™μ²˜λŸΌ μž‘λ™ν•˜λ„λ‘ 더 λ§Žμ€ λ…Έλ ₯을 νˆ¬μžν•˜λŠ” 것보닀 VSCodeμ—μ„œ μ œλŒ€λ‘œ μž‘λ™ν•˜λ„λ‘ λ§Œλ“  no-unused-variable noUnusedLocals λ₯Ό 훨씬 더 보고 μ‹ΆμŠ΅λ‹ˆλ‹€. IMO μ»΄νŒŒμΌλŸ¬κ°€ μ²˜μŒλΆ€ν„° 이런 μ’…λ₯˜μ˜ 검사에 λŒ€ν•œ μ†Œμœ κΆŒμ„ κ°€μ Έμ˜€λ €κ³  ν•œ 것은 μ‹€μˆ˜μ˜€μŠ΅λ‹ˆλ‹€.

그리고 noUnusedLocalsκ°€ 린트 κ·œμΉ™μ²˜λŸΌ μž‘λ™ν•˜λ„λ‘ 더 λ§Žμ€ λ…Έλ ₯을 νˆ¬μžν•˜λŠ” 것보닀 VSCodeμ—μ„œ μ œλŒ€λ‘œ μž‘λ™ν•˜λ„λ‘ λ§Œλ“  no-unused-variable을 훨씬 더 보고 μ‹ΆμŠ΅λ‹ˆλ‹€.

λ§žλŠ” 말이닀. μ €λŠ” 이 ν”„λ‘œμ νŠΈκ°€ https://github.com/angelozerr/tslint-language-serviceλ₯Ό λͺ©ν‘œλ‘œ ν•œλ‹€κ³  λ―ΏμŠ΅λ‹ˆλ‹€

λ‚΄κ°€ λ„ˆλ¬΄ 빨리 λ§ν–ˆλ‹€. ν•΄λ‹Ή ν”ŒλŸ¬κ·ΈμΈμ΄ μœ μš©ν•˜λ„λ‘ https://github.com/palantir/tslint/issues/2649 μ—μ„œ μ°¨λ‹¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹  ν•΄λ‹Ή 문제λ₯Ό μΆ”μ ν•˜μ‹­μ‹œμ˜€.

@adidahiya λ„€, κ½€ μ˜€λž«λ™μ•ˆ μΆ”μ ν•΄μ™”μŠ΅λ‹ˆλ‹€.

이것에 λŒ€ν•œ μ†Œμ‹μ΄ μžˆμŠ΅λ‹ˆκΉŒ? 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

@philip-firstorderλ₯Ό μ‚¬μš©ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. --project tsconfig.json

tslint -c tslint.json --project tsconfig.json src/**/*.ts

no-unused-variable은 이제 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. #3918 및 #3919λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

πŸ€– 삐삐! πŸ‘‰ TSLintλŠ” 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμœΌλ©° πŸ‘ˆ typescript-eslint둜 μ „ν™˜ ν•΄μ•Ό

πŸ”’ 이 μ΄μŠˆλŠ” 더 μ΄μƒμ˜ λΆˆν•„μš”ν•œ 토둠을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ 잠그고 μžˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€! πŸ‘‹

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰