Tslint: ๋“ค์—ฌ์“ฐ๊ธฐ ํฌ๊ธฐ ์œ„๋ฐ˜์„ ๋ณด๊ณ ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ ๊ทœ์น™

์— ๋งŒ๋“  2017๋…„ 05์›” 23์ผ  ยท  66์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: palantir/tslint

๋ฒ„๊ทธ ์‹ ๊ณ 

  • __TSLint ๋ฒ„์ „__: 5.3.2
  • __TypeScript ๋ฒ„์ „__: 2.3.2
  • ____๋ฅผ ํ†ตํ•ด TSLint ์‹คํ–‰ํ•˜๊ธฐ: CLI

๋ฆฐํŠธ๋˜๋Š” TypeScript ์ฝ”๋“œ

export function foo() {
  return 123;
}

tslint.json ๊ตฌ์„ฑ:

{
  "extends": ["tslint:latest"],
  "rules": {
    "indent": {
      "options": ["spaces", 4]
    }
  }
}

์‹ค์ œ ํ–‰๋™

tslint ์˜ค๋ฅ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. tslint --fix ์ˆ˜์ • ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

tslint ๋ณด๊ณ ๋œ ์˜ค๋ฅ˜ , ์ˆ˜์ • ์‚ฌํ•ญ์ด tslint --fix ๋˜์–ด ๊ฒฐ๊ณผ ํŒŒ์ผ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

export function foo() {
    return 123;
}

2723์€ ๋‚ด๊ฐ€ ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ ํฌ๊ธฐ๊ฐ€ ๊บผ์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์ž˜๋ชป๋œ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‹คํŒจ๊ฐ€ ๋ณด๊ณ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‚ด ์˜ˆ์™€ ๊ฐ™์ด). ๊ด€๋ จ ์†Œ์Šค .

Available in ESLint Formatting rule P2 Declined Bug

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทœ์น™์€ ๊ณต๋ฐฑ ๋Œ€์‹  ์‚ฌ์šฉ ์ค‘์ธ ํƒญ์„ ํฌ์ฐฉํ•˜์ง€๋งŒ ์ž˜๋ชป๋œ ์ˆ˜์˜ ๊ณต๋ฐฑ์€ ํฌ์ฐฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 2๋ฅผ ๋‹ค๋ฅธ ์ˆซ์ž๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. tslint 5.5.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

"indent": [true, "spaces", 2],

๋ชจ๋“  66 ๋Œ“๊ธ€

@adidahiya @nchen63์˜ ์ด ๋Œ“๊ธ€ ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

@nchen63์—์„œ :

ํƒญ -> x ๊ณต๋ฐฑ ๋ฐ x ๊ณต๋ฐฑ -> ํƒญ์„ ์ˆ˜์ •ํ•˜์ง€๋งŒ x ๊ณต๋ฐฑ -> y ๊ณต๋ฐฑ์€ ์ˆ˜์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ x spaces ์—์„œ y spaces ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ”„๋กœ์ ํŠธ๋Š” 2์™€ 4 ๊ณต๊ฐ„์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. x spaces ๊ทœ์น™์„ y spaces ํ•˜๋ฉด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํฌ๊ธฐ ์œ„๋ฐ˜์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์†Œํ•œ ์˜ค๋ฅ˜๋กœ ๋ณด๊ณ ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๋Š” ์ด ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์‚ฌ์ดํŠธ(https://palantir.github.io/tslint/rules/indent/)์— ๋ฌธ์„œํ™”๋œ ๋“ค์—ฌ์“ฐ๊ธฐ ํฌ๊ธฐ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์€ ์‹ค์ œ๋กœ ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ด ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค. Angular CLI๋Š” ํŒŒ์ผ์ด๋‚˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋“ค์—ฌ์“ฐ๊ธฐ ์ˆ˜์ค€์œผ๋กœ 2๊ฐœ์˜ ๊ณต๋ฐฑ์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ชจ๋“  ๋”ฐ์˜ดํ‘œ๋Š” ์ž‘์€ ๋”ฐ์˜ดํ‘œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ tslint๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ tslint.json์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ์˜ดํ‘œ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ(๋‚ด ๊ธฐ๋ณธ ์„ค์ •์— ๋”ฐ๋ผ ํฐ ๋”ฐ์˜ดํ‘œ๋กœ ๋ณ€ํ™˜) ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” 2์นธ์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค(์ €๋Š” 4์นธ์„ ์„ ํ˜ธํ•จ). Tslint๋Š” ์‹ค์ œ TAB ๋ฌธ์ž๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•˜์ง€๋งŒ ๊ณต๋ฐฑ ์ˆ˜๋„ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

https://github.com/palantir/tslint/blob/master/src/rules/indentRule.ts ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌํ˜„์ด ์ƒ๋‹นํžˆ ์ˆœ์ง„ํ•œ ๊ฒƒ ๊ฐ™์œผ๋ฉฐ x spaces -> y spaces ์—์„œ ์ž‘๋™ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋“ค์—ฌ์“ฐ๊ธฐ ๋„ˆ๋น„๊ฐ€ 2์นธ์œผ๋กœ ์„ ํƒ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๊ณ ๋ คํ•˜์„ธ์š”.

foo = {
    a: {
  b: {
    c: 'c'
  }
    },
    d: 'd'
}

์šฐ๋ฆฌ์˜ ํ˜„์žฌ ๊ตฌํ˜„์ด ์ด๊ฒƒ์ด ์ „ํ˜€ ์‹คํŒจํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ ๊ณต๋ฐฑ ์‹œํ€€์Šค๋Š” ์ •๊ทœ์‹ / / ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ 2์นธ์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ฐพ์•„๋„ ์ด๊ฒƒ์€ ํ†ต๊ณผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋‹ค์ค‘ ์ˆ˜์ค€ ๋“ค์—ฌ์“ฐ๊ธฐ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ 4๊ฐœ์˜ ์„ ํ–‰ ๊ณต๋ฐฑ์€ ํ†ต๊ณผ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ 4๊ฐœ์˜ โ€‹โ€‹๊ณต๋ฐฑ์œผ๋กœ ๋‹จ์ผ ์ˆ˜์ค€์˜ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์‹คํŒจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์†”๋ฃจ์…˜์€ eslint๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ AST๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(https://github.com/eslint/eslint/blob/master/lib/rules/indent.js). ๊ทธ ๋‹จ์ ์€ tabs -> spaces ๋˜๋Š” spaces -> tabs ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„ค์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„์„ ์„ ํƒํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํƒญ๊ณผ ๊ณต๋ฐฑ์˜ ์กฐํ•ฉ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ํ˜„์žฌ ๊ตฌํ˜„์ด ์‹คํŒจํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ AST ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

eslint ๊ตฌํ˜„์—์„œ ์ˆ˜ํ–‰๋œ AST ์ž‘์—… ์ค‘ ์ ์–ด๋„ ์ผ๋ถ€๋Š” typescript์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์†”๋ฃจ์…˜์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ์–ด๋ ต์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ํ˜„์žฌ ๊ตฌํ˜„์ด ์ด๊ฒƒ์ด ์ „ํ˜€ ์‹คํŒจํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

_๊ธฐ์ˆ ์ ์œผ๋กœ_ ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. align ๊ทœ์น™์€ ๊ทธ๋Ÿฌํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  indent ๊ทœ์น™์—์„œ๋„ AST๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‹ ๊ฒฝ ์“ฐ๋Š” ๊ฒƒ์€ indent ์™€ align ์ผ๋ถ€ ์กฐํ•ฉ์œผ๋กœ ๋ฌธ์ œ ์„ค๋ช…์— ์ž‘์„ฑํ•œ ๋‚ด์šฉ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •๋ ฌ ๊ทœ์น™์€ ๊ทธ๋Ÿฌํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ‹์ง„! ๋‚˜๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ ๊ทธ๊ฒƒ์„ ๋†“์ณค๋‹ค. ๋‚˜๋„ ๊ฑฐ๊ธฐ์— ์ •์ ์„ ์ฐ์„๊ฑฐ์•ผ. TBH, ๋‚˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์ˆœ์ง„ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ๊ทœ์น™์„ ํ™œ์šฉํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทœ์น™์€ ๊ณต๋ฐฑ ๋Œ€์‹  ์‚ฌ์šฉ ์ค‘์ธ ํƒญ์„ ํฌ์ฐฉํ•˜์ง€๋งŒ ์ž˜๋ชป๋œ ์ˆ˜์˜ ๊ณต๋ฐฑ์€ ํฌ์ฐฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 2๋ฅผ ๋‹ค๋ฅธ ์ˆซ์ž๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. tslint 5.5.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

"indent": [true, "spaces", 2],

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? (๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ฏธ ์ˆ˜์ • ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์‹œ๋„ํ•ด ๋ณผ ์˜ํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. )

@mDibyo ๊ฐ€์„ธ์š”

@mDibyo ์ด๊ฒƒ์— ์ง„์ „์ด ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ?

๋ถ€๋ถ„์ ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์™„์„ฑํ•˜๊ณ  ์ฃผ๋ง์— PR ์˜ฌ๋ฆฌ๋„๋ก ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

๋‚ด ํ”„๋กœ์ ํŠธ์— tslint-plugin-prettier ์™€ ํ•จ๊ป˜ ๋” ์˜ˆ์œ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ์ดํ›„๋กœ ์ด ๋ฌธ์ œ๊ฐ€ ์ €์—๊ฒŒ ๋” ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋˜์—ˆ๋‹ค๋Š” ์ ์„ ๋ฏธ๋ฆฌ ์•Œ๋ ค๋“œ๋ฆฌ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„ ๊ธฐ๋ณธ ์ œ๊ณต ๊ตฌ์„ฑ์—์„œ ๋” ์˜ˆ์œ ๊ฒƒ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ๊ณต์‹ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ด์— ๋”ฐ๋ผ ํ˜•์‹๊ณผ ๊ด€๋ จ๋˜์ง€ ์•Š์€ ํ•ต์‹ฌ ๊ทœ์น™์— ์ดˆ์ ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— Prettier๋Š” ๋ชจ๋“  ๋ผ์ธ์— ๊ฐ€์žฅ ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๋งž์ถ”๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด?

์ธ์‡„ ๋„ˆ๋น„๋ฅผ 120์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์˜ˆ์œ ๊ฒƒ์ด ์ง€๋‚˜์น˜๊ฒŒ ์กฐ๋ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ 120์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


๋˜ํ•œ ๋˜ ๋‹ค๋ฅธ ์ข…์†์„ฑ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ผ๋ฐ˜ TSLint ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ผ๋ฐ˜ TSLint ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@glen-84 ๋„ค, ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ TSLint์—์„œ ๋ชจ๋“  ์„œ์‹ ๊ทœ์น™์„ ์ œ๊ฑฐํ•˜๊ณ  ์™ธ๋ถ€ ํฌ๋งทํ„ฐ์— ์™„์ „ํžˆ ์œ„์ž„ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. Prettier๋Š” ๋ถ„๋ช…ํžˆ ๋…๋‹จ์ ์ด๋ฉฐ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ์„ ํƒํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ PR์„ ์œ„ํ•ด ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋ฌด์Šจ ์ผ์ด?

๋‚ด ํ™๋ณด๊ฐ€ ์ง„ํ–‰ ์ค‘์ด๋ฉฐ ๋งŽ์€ ๊ฒฝ์šฐ์— ์—ฌ์ „ํžˆ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. @cyberhck

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ๊ณง ๋ณ‘ํ•ฉ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค :slightly_smiling_face:

์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” typescript-formatter ์œ ์ง€ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ช‡ ๊ฐ€์ง€ API๋ฅผ ๋…ธ์ถœํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํŒจํ‚ค์ง€๋Š” tslint.json ํŒŒ์ผ์˜ ์„ค์ •์— ๋”ฐ๋ผ ์ „์ฒด ์†Œ์Šค ํŒŒ์ผ์˜ ํ˜•์‹์ด ์ด๋ฏธ ์ง€์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ TSLint์˜ ์ˆ˜์ • ํ”„๋กœ๊ทธ๋žจ ์„ค์ •์„ ์ž˜ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋„์›€์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ ํฌ๊ธฐ๊ฐ€ ๊บผ์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์ž˜๋ชป๋œ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‹คํŒจ๊ฐ€ ๋ณด๊ณ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@adidahiya ์ž˜๋ชป๋œ ๋“ค์—ฌ์“ฐ๊ธฐ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทœ์น™์„ space/4๋กœ ์„ค์ •ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ:

export function foo() {
return 123;
}

๋˜๋Š”

export function foo() {
<tab>return 123;
}

์˜ค๋ฅ˜๋ฅผ ๋‹ค์‹œ ๋ณด๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์›๋ž˜ ์˜๊ฒฌ์— ๋”ฐ๋ฅด๋ฉด ์ž˜๋ชป๋œ ๊ณต๋ฐฑ ๋ฌธ์ž์ธ ๊ฒฝ์šฐ ๋ณด๊ณ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ด์— ๋Œ€ํ•œ ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ƒฅ ๋ฌผ์–ด๋ด ๐Ÿ˜

์กฐ์–ธ? ๋” ์˜ˆ์˜๊ฒŒ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋ˆ„๊ตฌ๋“ ์ง€ tslint-eslint-rules๋ฅผ ์‚ฌ์šฉํ•ด

@jscharett tslint-eslint-rules๋Š” ter-indent ๊ทœ์น™๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ JSX ๋“ค์—ฌ ์“ฐ๊ธฐ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค ...

์—ฌ๊ธฐ์— ์ˆ˜์ •์˜ ํฌ๋ง์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฒ„๊ทธ๋Š” v5.10.0์—์„œ ์•„์ง ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” TSLint๊ฐ€ Prettier๋ฟ๋งŒ ์•„๋‹ˆ๋ผ JS ์ฝ”๋“œ์˜ ํ˜•์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ณต์žกํ•œ ๋ฌธ์ œ์ธ๋ฐ ํ”„๋ฆฌํ‹ฐ์–ด๊ฐ€ ๋ˆ„๊ตฌ๋ณด๋‹ค ์ž˜ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ํ”„๋กœ์ ํŠธ์—์„œ ๋‘ ๋„๊ตฌ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ  ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์œ„ํ•ด TSLint์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค...

ํŽธ์ง‘: ์ด ๋ฌธ์ œ๊ฐ€ _์–ด๋–ป๊ฒŒ_ ๋ณต์žกํ•œ์ง€์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ์•„์ด๋””์–ด๋ฅผ ์–ป์œผ๋ ค๋ฉด ์ด PR์„ ๊ฒ€ํ† ํ•˜๊ฑฐ๋‚˜ Prettier ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ์ด ๋ฐ๋ชจ๊ฐ€ "๋ณต์žกํ•œ" ๊ฒƒ์œผ๋กœ ๋Š๊ปด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด PR ๐Ÿ˜„์œผ๋กœ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋„์™€์ฃผ์„ธ์š”!

@aervin ๋‚˜๋Š” ์—ฌ๊ธฐ์— ๋™์˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์— 2๊ฐœ์˜ ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค๋ฅธ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Prettier๋Š” ํ˜•์‹ํ™” ๋ฒ”์ฃผ์— ์†ํ•˜๋Š” ๋ฐ˜๋ฉด TSLint๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ์˜ˆ, TSLint๋Š” ์ผ๋ถ€ ๊ทœ์น™์— ๋Œ€ํ•œ ํ˜•์‹ ์ง€์ •์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฆฐํ„ฐ๋กœ์„œ์˜ ์˜๋„๋œ ๋ชฉ์ ์€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

Prettier์— ์˜์กดํ•˜๋Š” ๊ฒƒ์˜ ๋ฌธ์ œ์ ์€ ๊ทธ๊ฒƒ์ด ๋…๋‹จ์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์Šคํƒ€์ผ์— ๋™์˜ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋Œ€๋‹จํ•œ ์ผ์ด์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ JSLint๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ๋„ˆ๋ฌด ๋…๋‹จ์ ์ด์–ด์„œ ๋ชจ๋‘ ๋ถˆํ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ JSHint์™€ JSCS๊ฐ€ ๋“ฑ์žฅํ•˜์—ฌ ์šฐ๋ฆฌ์—๊ฒŒ ์•ฝ๊ฐ„์˜ ์ œ์–ด ๊ถŒํ•œ์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” ํ”Œ๋Ÿฌ๊ทธ ์•ค ํ”Œ๋ ˆ์ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ์ž๋™์œผ๋กœ "์ˆ˜์ •"ํ•  ์ˆ˜ ์žˆ๋Š” @eslint ์™€ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ฅผ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” Prettier๊ฐ€ ํ›Œ๋ฅญํ•œ ํ”„๋กœ์ ํŠธ๋ผ๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ, ๊ฐœ์ธ์ ์œผ๋กœ ๊ทธ๊ฒƒ์„ ํ•œ ๋ฐœ์ง ๋’ค๋กœ ๋ฌผ๋Ÿฌ๋‚œ ๊ฒƒ์œผ๋กœ ๋ด…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ์„œ ํ†ต์ œ๊ถŒ์„ ๋นผ์•—๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. TSLint๋Š” ์ฝ”๋“œ๋ฅผ "์ˆ˜์ •"ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ ๋ฌธ์ œ๋กœ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ๋ณต์žกํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜์‹ฌํ•˜์ง€ ์•Š์ง€๋งŒ eslint๋Š” ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ทœ์น™; ๊ทธ๊ฒƒ์„ ๊นจ๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์ด ๋ฐ”๋€Œ ์—ˆ์Šต๋‹ˆ๊นŒ?

@jscharett ์นœ์ ˆํ•œ ๋‹ต๋ณ€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‹ค๋ฅธ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ฑฐ๋‚˜ _ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค_ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ฃผ์žฅ์€ ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ทธ๋Ÿฌํ•œ ๋ชฉ์ ์œผ๋กœ ์ œํ•œํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋“ค์—ฌ์“ฐ๊ธฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ Prettier๋ฅผ ๋งก๊ธฐ๊ณ  ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ํ™”์‚ดํ‘œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฒฝ๊ณ ํ•˜๋Š” TSLint๋ฅผ ๋‚จ๊ฒจ ๋‘์ž.

์ €๋„ Prettier๊ฐ€ ๋…๋‹จ์ ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜คํžˆ๋ ค Prettier์— ๋Œ€ํ•ด ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ ํŒ€์€ ๋ˆ„๊ตฌ์˜ ํ˜•์‹ํ™” ์˜๊ฒฌ์ด ๋” ํ•ฉ๋ฆฌ์ ์ธ์ง€ ๋…ผ์˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ Prettier :laughing: ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ํ•˜๋‹ค:

์ž‘๋™ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ทœ์น™; ๊ทธ๊ฒƒ์„ ๊นจ๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์ด ๋ฐ”๋€Œ ์—ˆ์Šต๋‹ˆ๊นŒ?

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ ์ฃผ์„์€ ์ด ๊ทœ์น™์ด ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•œ ์ ์ด ์—†๋‹ค๊ณ  ๋ฏฟ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” Prettier๊ฐ€ ํ›Œ๋ฅญํ•œ ํ”„๋กœ์ ํŠธ๋ผ๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ, ๊ฐœ์ธ์ ์œผ๋กœ ๊ทธ๊ฒƒ์„ ํ•œ ๋ฐœ์ง ๋’ค๋กœ ๋ฌผ๋Ÿฌ๋‚œ ๊ฒƒ์œผ๋กœ ๋ด…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ์„œ ํ†ต์ œ๊ถŒ์„ ๋นผ์•—๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ฒฝํ—˜์ƒ ์ €๋Š” Prettier๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „๊นŒ์ง€ ์„œ์‹ ๊ทœ์น™์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค... ๊ทธ๋ฆฌ๊ณ  ์–ผ๋งˆ ์ง€๋‚˜์ง€ ์•Š์•„ ์„œ์‹์ด ์ง€์ •๋˜๋Š” ํŠน์ • ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ทธ๋‹ค์ง€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ผ๊ด€๋˜๊ฒŒ ํฌ๋งท๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ _do_ ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ „์ ์œผ๋กœ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์€ ์—„์ฒญ๋‚œ ์ธ์ง€ ๋ถ€ํ•˜์ž…๋‹ˆ๋‹ค.

tslint๋Š” ์ด๋ฏธ ์„œ์‹ ๋ฒ”์ฃผ์— ์†ํ•˜๋Š” ๋‹ค๋ฅธ ํ•ญ๋ชฉ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ์—ฐ์‚ฐ์ž ์‚ฌ์ด์— ์ •๋ ฌ, ๋Œ€๊ด„ํ˜ธ ์Šคํƒ€์ผ ๋˜๋Š” ๊ณต๋ฐฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ prettier์™€ ๊ฐ™์€ ๋…๋‹จ์ ์ธ ์†”๋ฃจ์…˜์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.

๋” ์ ์€ ํ† ๋ก ๊ณผ ๋” ๋งŽ์€ ํ™๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜‰ ๐Ÿ˜‰

๊ฐ€์„ธ์š” @ffxsam

๋‚ด ์˜๊ฒฌ์€ ๋Œ€๋ถ€๋ถ„ ํ˜€๋กœ ๋บจ์„ ๋งž์•˜์Šต๋‹ˆ๋‹ค. ์™œ์ด ๋ฌธ์ œ๊ฐ€ 1 ๋…„์ด ๋„˜์—ˆ๊ณ  ์ง„์ „์ด ์—†์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘๊ฐ€ Linting ๋Œ€ Prettier์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@ffxsam tslint๊ฐ€ ts ๋ถ€๋ถ„์— ๊ด€ํ•œ ๊ฒƒ์ธ์ง€ ์•„๋‹ˆ๋ฉด lint ๋ถ€๋ถ„์— ๊ด€ํ•œ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๋…ผ์Ÿ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

์œ ํšจํ•œ ์ง€์ ์ž…๋‹ˆ๋‹ค. TSLint/ESLint์™€ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” indent ์˜ต์…˜์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ˆ„๊ฐ€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋ง๊ฐ€์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. TSLint ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ์ด ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ์‰ฌ์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค...?

x spaces => y spaces ์ˆ˜์ •์— ํˆฌํ‘œํ•˜์„ธ์š”. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ ํšŒ์‚ฌ๊ฐ€ ๋งค์šฐ ๋งŽ์ด ์˜์กดํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๊ณ ์น˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@ffxsam ์ด ๋ฌธ์ œ๋ฅผ ๊ฑฐ์˜ 1๋…„ ๋™์•ˆ ์ง€์ผœ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค ์˜ค๋žœ๋งŒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ

๋นˆ ํ”„๋กœ์ ํŠธ์—์„œ ์—ฌ์ „ํžˆ ์žฌํ˜„ ๊ฐ€๋Šฅ
https://github.com/dimaShin/tslint-reproduce-2814

@dimaShin๋‹˜ , ์‹œ๊ฐ„์„ ๋‚ด์–ด ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŒ€์€ ์ด๋ฏธ ์ด ๋ฌธ์ œ๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ์žฌ์ƒ์‚ฐ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋‹จ์ง€ ์ˆ˜์ • ์˜ต์…˜์ด ์žˆ๋Š” ์ด ๊ธฐ๋Šฅ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ๋ฒˆ์— ์‚ฌ๋žŒ๋“ค์ด ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ํ•ญ๋ชฉ์— ๋Œ€ํ•ด tslint๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด prettier๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ์ ํ•ฉํ•˜๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ €์—๊ฒŒ๋Š” ํ™•์‹คํžˆ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ํŠน์ • ์˜ต์…˜์— ๋Œ€ํ•ด .editorconfig ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ด๊ฒƒ์ด ํ•ด๊ฒฐ๋˜๋ฉด ๋‚˜์ค‘์— tslint๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„์„ ๋‚ด์–ด ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์…”์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. :)

๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต์„ ๊ฒฐ์ •ํ•ฉ์‹œ๋‹ค. ์ฐธ๊ณ ๋กœ eslint์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ „๋žต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. OffsetStorage ์ธ์Šคํ„ด์Šค๋Š” ์›ํ•˜๋Š” ์˜คํ”„์…‹์˜ ๋งต์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ ํ† ํฐ์—๋Š” ๋‹ค๋ฅธ ์ง€์ •๋œ ํ† ํฐ์ด๋‚˜ ์ฒซ ๋ฒˆ์งธ ์—ด๊นŒ์ง€ ์ง€์ •๋œ ์˜คํ”„์…‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  2. AST๋ฅผ ํ†ต๊ณผํ•  ๋•Œ ๊ทธ์— ๋”ฐ๋ผ ์›ํ•˜๋Š” ํ† ํฐ ์˜คํ”„์…‹์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, BlockStatement๋ฅผ ์ž…๋ ฅํ•  ๋•Œ BlockStatement์˜ ์—ฌ๋Š” ์ค‘๊ด„ํ˜ธ์—์„œ 1 ๋“ค์—ฌ์“ฐ๊ธฐ ์ˆ˜์ค€๋งŒํผ BlockStatement์˜ ๋ชจ๋“  ํ† ํฐ์„ ์˜คํ”„์…‹ํ•ฉ๋‹ˆ๋‹ค.
  3. AST๋ฅผ ํ†ต๊ณผํ•œ ํ›„ OffsetStorage ์ปจํ…Œ์ด๋„ˆ์— ๋”ฐ๋ผ ๋ชจ๋“  ํ† ํฐ์˜ ์˜ˆ์ƒ ๋“ค์—ฌ์“ฐ๊ธฐ ์ˆ˜์ค€์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฐ ์ค„์— ๋Œ€ํ•ด ์ฒซ ๋ฒˆ์งธ ํ† ํฐ์˜ ์˜ˆ์ƒ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ํŒŒ์ผ์˜ ์‹ค์ œ ๋“ค์—ฌ์“ฐ๊ธฐ์™€ ๋น„๊ตํ•˜๊ณ  ๋‘ ๊ฐ’์ด ๊ฐ™์ง€ ์•Š์œผ๋ฉด ํ† ํฐ์„ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ „๋žต์€ ์ด์ „ ์ฃผ์„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ตฌ๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ์ค„์„ ๋Š์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด ๋…๋‹จ์ ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ค„๋กœ ๊ตฌ๋ถ„๋˜๋Š” ๋ฐฉ์‹๊ณผ ๋…๋ฆฝ์ ์ธ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

  1. ๋“ค์—ฌ์“ฐ๊ธฐ ๋‹จ์œ„๋Š” ์„ค์ •์—์„œ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ํƒญ์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ํƒญ ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. ๊ณต๋ฐฑ์˜ ๊ฒฝ์šฐ 2๊ฐœ ๋˜๋Š” 4๊ฐœ์˜ ๊ณต๋ฐฑ ๋ฌธ์ž์ž…๋‹ˆ๋‹ค.
  2. ํŒŒ์ผ์˜ ๋น„์–ด ์žˆ์ง€ ์•Š์€ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ ๋‹จ์œ„๊ฐ€ 0์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋น„์–ด ์žˆ์ง€ ์•Š์€ ๋ชจ๋“  ํ›„์† ์ค„์—๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    NS. ๋น„์–ด ์žˆ์ง€ ์•Š์€ ์„ ํ–‰ ์ค„๊ณผ ๊ฐ™์€ ๋“ค์—ฌ์“ฐ๊ธฐ ๋‹จ์œ„ ์ˆ˜ ๋˜๋Š”
    NS. ๋น„์–ด ์žˆ์ง€ ์•Š์€ ์„ ํ–‰ ์ค„์˜ ๋“ค์—ฌ์“ฐ๊ธฐ ๋‹จ์œ„ ์ˆ˜๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜
    ์”จ. ๋น„์–ด ์žˆ์ง€ ์•Š์€ ์„ ํ–‰ ์ค„๊ณผ ๋“ค์—ฌ์“ฐ๊ธฐ ๋‹จ์œ„ ์ˆ˜๋ณด๋‹ค ์ •ํ™•ํžˆ ํ•˜๋‚˜

๋…ผ์˜ํ•  ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์‚ฌํ•ญ:

  • ํฌ๊ธฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํƒญ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์™œ?)
  • ํฌ๊ธฐ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์–‘์˜ ์ •์ˆ˜์ผ ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • ๋“ค์—ฌ์“ฐ๊ธฐ ํฌ๊ธฐ ์ž๋™ ์ˆ˜์ •์€ ๊ตฌ๋ฌธ ์ „๋žต ๊ฒฝ๋กœ ์—†์ด๋Š” ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@stifflerus ๋˜ํ•œ ๊ทœ์น™์€ {} ๋ธ”๋ก์ด ์—†๋Š” if/for/arrow ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@maximelkin ๋‘ ๋ฒˆ์งธ ์ค„์— ๋‹น์‹ ์ด ์ค€ ์˜ˆ๊ฐ€ ๋“ค์—ฌ ์“ฐ๊ธฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ์ œ์•ˆ๋œ ์ „๋žต์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ์˜ ์˜ˆ๋ฅผ ์ œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

if(this) that(); //okay because it's all one line

if(this)
  that(); //also okay because the second line is indented

let x = () => f(); //okay because it's all one line

let y = () =>
  f(); // I have not seen any code but like this but it would be okay

์ด๊ฒƒ์ด ์ˆ˜์ •๋˜๋ฉด ๊ต‰์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋“ค์—ฌ์“ฐ๊ธฐ ๊ทœ์น™์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ๋งŒํผ ๊ทผ๋ณธ์ ์ธ ๊ฒƒ์ด ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ฏฟ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด 2018๋…„์—๋Š” ๊ทธ๋Ÿฌํ•œ ts-code๋ฅผ ๋ฆฐํŠธํ•  ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ์š”?

const x = {
  a: 1,
   b: 2,
}

๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ๋‹ค
./.eslintrc.ts.js :

module.exports = {
  'parser': 'typescript-eslint-parser',
  'parserOptions': {
    'ecmaVersion': 6,
    'sourceType': 'module',
    'ecmaFeatures': {
      'jsx': true,
    }
  },
  'plugins': [
    'react',
  ],
  'rules': {
    'indent': ['error', 2],
  },
}

yarn eslint --no-eslintrc --config ./.eslintrc.ts.js --ext .tsx src

https://github.com/eslint/typescript-eslint-parser

๊ฐ๋„์˜ ๋“ค์—ฌ ์“ฐ๊ธฐ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ฐพ์€ ์†”๋ฃจ์…˜์€ ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ๋” ์˜ˆ์˜๊ฒŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
npm install --save-dev tslint-plugin-prettier ๋” ์˜ˆ์œ tslint-jasmine-rules
tslint.json ํŽธ์ง‘ -->
` "๊ทœ์น™ ๋””๋ ‰ํ† ๋ฆฌ": [
"node_modules/codelyzer",
"node_modules/tslint-plugin-prettier",
"node_modules/tslint-jasmine-rules/dist"

],
"ํ™•์žฅ": "tslint-plugin-prettier",

"๊ทœ์น™": {
"๋” ์˜ˆ์˜๋‹ค": ์‚ฌ์‹ค,
// ์—ฌ๊ธฐ์— ์›ํ•˜๋Š” ๊ทœ์น™ ์ถ”๊ฐ€`

๊ทธ๋ฆฌ๊ณ  package.json์— --> ์ถ”๊ฐ€
" ,"๋” ์˜ˆ์˜๋‹ค": {
"singleQuote": ์‚ฌ์‹ค,
"์ธ์‡„ ๋„ˆ๋น„": 140,
"์„ธ๋ฏธ": ์‚ฌ์‹ค,
"bracketSpacing": ์ฐธ,
"arrowParens": "ํ•ญ์ƒ",
"ํŒŒ์„œ": "ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ"
}"

์ด๊ฒƒ์€ ๊ฑฐ์˜ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ๋งค์ผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋” ๋งŽ์€ ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„, tslint-eslint-rules์—์„œ ์ œ๊ณตํ•˜๋Š” ter-indent ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"ter-indent": [ true, 4, { "SwitchCase": 1 }]

๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฑด๋ฐฐ!

@hiteshaleriya ๊ทธ๊ฒƒ์€ ๋‚ด๊ฐ€ ์ž ์‹œ ๋™์•ˆ ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๊ฒƒ์ด์ง€๋งŒ ์‹ค์ œ๋กœ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ทธ๋ƒฅ ์นจ๋ฌต์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค... ์—ฌ๊ธฐ ๋‚ด tslint.json .

{
    "extends": "tslint-config-airbnb",
    "rules": {
        "ter-indent": ["error", "spaces", 4],
        "no-unused-vars": ["warn"],
        "no-multi-spaces": false,
        "no-console": false,
        "max-line-length": false,
        "import-name": false
    }
}

๋‹ค์Œ์€ ๊ฒฝ๊ณ ๋‚˜ ์˜ค๋ฅ˜ ์—†์ด ์™„๋ฃŒ๋œ ๊ด€๋ จ ์˜ˆ์ž…๋‹ˆ๋‹ค.

function retrieveAndSetConfig(): Promise<any> {
  return new Promise((resolve, _) => {
  // ^ 2 spaces, expected 4
    const ghe = new GHEUtils();
    // ^ 4 spaces, expected 8
    // ...
}

๋˜ํ•œ ํƒญ์„ ์‚ฌ์šฉํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(4๊ฐœ์˜ ๊ณต๋ฐฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์˜๋„์ ์œผ๋กœ ์„ค๊ณ„๋œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Œ).

@SpencerKaiser ์•„๋ž˜์™€ ๊ฐ™์ด ter-indent ๊ทœ์น™์„ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ์‹œ๋„ํ•ด ์ฃผ

"ter-indent": [true, 4]

๋‚˜๋Š” ๋‹น์‹ ์˜ ์˜ˆ๋ฅผ ์‹œ๋„ํ–ˆ๊ณ  ๋‚ด ๋์—์„œ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(์˜ค๋ฅ˜ ๋ฐœ์ƒ).

@hiteshaleriya ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋Œ์•„์™€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋”ฐ๋ผ์„œ ์ด์ œ ์˜ˆ์ƒ๋Œ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ(๐Ÿ‘) --fix ๋กœ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด?

@SpencerKaiser --fix ๋ช…๋ น์„ ๋‘ ๋ฒˆ ์‹คํ–‰ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ฒ˜์Œ์—๋Š” ์ฒซ ๋ฒˆ์งธ ์ค„๋งŒ ๋“ค์—ฌ์“ฐ๊ณ  ๋‘ ๋ฒˆ์งธ์—๋Š” ๋‚˜๋จธ์ง€๋ฅผ ๋“ค์—ฌ์”๋‹ˆ๋‹ค(์˜ˆ์ œ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ). ์ด์ƒํ•ด ๋ณด์ด์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๋ฅผ ์‹ ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

@hiteshaleriya ๊ทธ๋ž˜์„œ ๋ช‡ ๊ฐ€์ง€ ๊ด€์ฐฐ ... ๋‹ค์‹œ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋žต n/4 ๋ฒˆ ์‹คํ–‰ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ n ๋Š” ๊ณต๋ฐฑ์˜ ๋“ค์—ฌ ์“ฐ๊ธฐ ๊ธธ์ด์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋“ค์—ฌ์“ฐ๊ธฐ๋œ ์ค„ ยฏ\_(ใƒ„)_/ยฏ

๋งˆ์นจ๋‚ด ๋ชจ๋‘ ๋งˆ์นœ ํ›„์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๋“ค์—ฌ์“ฐ๊ธฐ ์˜ค๋ฅ˜๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

class Something {
    function myFunc() {
        const myThing = {
            wat: 1,
         wattt: 5,    // 9 spaces, expected 12
        };
    }
}

์˜ ๋“ค์—ฌ ์“ฐ๊ธฐ ์ˆ˜์ค€๊นŒ์ง€ I ์—‰๋ง ๊ฒฝ์šฐ const (๋ผ์ธ 17) 0 ๊ณต๊ฐ„, ๊ทธ๊ฒƒ์˜ ๋‚˜๋จธ์ง€๋Š” ์˜ค๋ฅ˜ ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋‚˜๋Š” ๋–จ์–ด์ ธ ๋‚˜๊ฐˆ ๋•Œ์˜ ๊ณต๊ฐ„์œผ๋กœ ๋ผ์ธ์„ _excluding_ --fix :

ERROR: 17:1  ter-indent  Expected indentation of 8 spaces but found 0.
ERROR: 18:1  ter-indent  Expected indentation of 4 spaces but found 12.
ERROR: 20:1  ter-indent  Expected indentation of 0 spaces but found 8.

--fix ์˜ ์ฒซ ๋ฒˆ์งธ ํŒจ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

        const myThing = {
    wat: 1,
         wattt: 5,
};

๊ทธ๋ฆฌ๊ณ  ๋‘ ๋ฒˆ์งธ ํŒจ์Šค:

        const myThing = {
            wat: 1,
         wattt: 5,
        };

์ƒ๊ฐ??

@shubich ๋‚˜๋„ ๊ฒฐ๊ตญ ๋˜‘๊ฐ™์€ ์ง“์„ ํ–ˆ์–ด...

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@MaKCbIMKo ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ, ์ „์ฒด ํŒ€์€ eslint ๋ฐฉ๋ฌธ typescript-eslint๋ฅผ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์ด๋™ํ•  ๊ฒƒ์ด๋ฉฐ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— tslint๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ ์ง€๊ธˆ์€ ์ด ๊ทœ์น™์„ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(๋˜๋Š” tslint-config-prettier ์‚ฌ์šฉ )

์ด ์ž‘์—…์˜ ๋ณต์žก์„ฑ๊ณผ ํ”„๋กœ์ ํŠธ ๋ฐฉํ–ฅ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๋งˆ๊ฐ: #4534

typescript-eslint์˜ ESLint ๊ทœ์น™์€ ์ €์—๊ฒŒ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(#4534 ์ฐธ์กฐ):

module.exports = {
    "env": {
        "browser": true,
    },
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
        "ecmaVersion": 2019,
        "sourceType": "module",
        "ecmaFeatures": {
            "jsx": true
        },
        "project": "./tsconfig.json",
    },
    "plugins": ["@typescript-eslint"],
    "rules": {
        "@typescript-eslint/indent": ["error", 2] // or ["error", "tab"]
    }
}

tslint-config-prettier๋กœ ๊ทธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•

๋งํฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿค– ์‚์‚! ๐Ÿ‘‰ TSLint๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ๐Ÿ‘ˆ typescript-eslint๋กœ ์ „ํ™˜ ํ•ด์•ผ

๐Ÿ”’ ์ด ์ด์Šˆ๋Š” ๋” ์ด์ƒ์˜ ๋ถˆํ•„์š”ํ•œ ํ† ๋ก ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ž ๊ทธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ‘‹

PS tslint-config-prettier - TypeScript๋ฅผ _format_ํ•˜๊ธฐ ์œ„ํ•ด TSLint์™€ ๊ฐ™์€ _linters_ ์‚ฌ์šฉ์„ ์ค‘๋‹จํ•˜์‹ญ์‹œ์˜ค. Prettier ์™€ ๊ฐ™์€ _formatter_๊ฐ€ ๋” ์ž˜ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰