Doom-emacs: tsx-tide ๋Œ€์‹  Eslint๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ .ts / .tsx ํŒŒ์ผ์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

์— ๋งŒ๋“  2020๋…„ 01์›” 21์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: hlissner/doom-emacs

๋‹น์‹ ์€ ๋ฌด์—‡์„ ์„ฑ์ทจํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๊นŒ?
TSLint๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  Eslint๊ฐ€ ์ด์ œ Typescript / TSX ํŒŒ์ผ์„ ๋ฆฐํŠธํ•˜๋Š” ๋ฐ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฏ€๋กœ Eslint๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Typescript ํŒŒ์ผ์„ ๋ฆฐํŠธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

linting์— Tide ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•˜๊ณ  .js ํŒŒ์ผ๊ณผ ๊ฐ™์ด Eslint๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ์†์‹ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ๋ฌด์—‡์„ ์‹œ๋„ ํ–ˆ์Šต๋‹ˆ๊นŒ?
typescript-eslint ํŒจํ‚ค์ง€ ๋ฅผ ์„ค์น˜ํ•˜์—ฌ Typescript๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก .eslintrc ํŒŒ์ผ์„ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์ •๋ณด


((emacs
(๋ฒ„์ „. "26.3")
(๊ธฐ๋Šฅ. "NOTIFY ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS THREADS")
(๋นŒ๋“œ. "2019 ๋…„ 12 ์›” 28 ์ผ")
(buildopts "--enable-locallisppath = / usr / local / share / emacs / site-lisp --infodir = / usr / local / Cellar / emacs-mac / emacs-26.3-z-mac-7.8 / share / info / emacs --prefix = / usr / local / Cellar / emacs-mac / emacs-26.3-z-mac-7.8 --with-mac --enable-mac-app = / usr / local / Cellar / emacs-mac / emacs -26.3-z-mac-7.8 --gnutls ํฌํ•จ ")
(windowsys. ๋ฐฐ์น˜)
(daemonp. ์„œ๋ฒ„ ์‹คํ–‰))
(์šด๋ช…
(๋ฒ„์ „. "2.0.9")
(๋นŒ๋“œ. "HEAD-> 453e20534 ๊ฐœ๋ฐœ 2020-01-15 11:19:32 -0500")
(dir. "~ / work / dotfiles / emacs / .doom.d /"))
(์ฒด๊ณ„
(์œ ํ˜•. darwin)
(๊ตฌ์„ฑ. "x86_64-apple-darwin18.7.0")
(์‰˜. "/ usr / local / bin / fish")
(uname. "Darwin 18.7.0 Darwin Kernel ๋ฒ„์ „ 18.7.0 : Tue Aug 20 16:57:14 PDT 2019; root : xnu-4903.271.2 ~ 2 / RELEASE_X86_64 x86_64")
(๊ฒฝ๋กœ "~ / .nvm / versions / node / v12.13.0 / bin" "~ / go / bin" "~ / .bin" "~ / .yarn / bin" "~ / .config / yarn / global / node_modules /.bin ""~ / .rbenv / bin ""~ / .rbenv / shims ""/ usr / local / bin ""/ usr / bin ""/ bin ""/ usr / sbin ""/ sbin ""/ usr / local / go / bin ""/ usr / local / MacGPG2 / bin ""/Library/Frameworks/Mono.framework/Versions/Current/Commands ""/ Library / TeX / texbin ""~ / go / bin "" ~ / .bin ""~ / .yarn / bin ""~ / .config / yarn / global / node_modules / .bin ""~ / .rbenv / bin ""~ / .rbenv / shims ""~ / .rbenv / versions / 2.6.3 / bin ""/usr/local/Cellar/rbenv/1.1.2/libexec ""/usr/local/Cellar/emacs-mac/emacs-26.3-z-mac-7.8/libexec/emacs/ 26.3 / x86_64-apple-darwin18.7.0 "))
(๊ตฌ์„ฑ
(envfile. envvar-file)
(elc-files. 0)
(๋ชจ๋“ˆ : ์™„์„ฑ ํšŒ์‚ฌ ivy : ui doom doom-dashboard doom-quit hl-todo modeline nav-flash ophints (popup + all + defaults) treemacs unicode vc-gutter vi-tilde-fringe window-select workspaces : editor (evil + everywhere ) ํŒŒ์ผ ํ…œํ”Œ๋ฆฟ ์ ‘๊ธฐ ๋‹ค์ค‘ ์ปค์„œ ํšŒ์ „ ํ…์ŠคํŠธ ์Šค ๋‹ˆํŽซ : emacs (dired + icons) electric vc : term vterm : tools editorconfig eval : checkers ๊ตฌ๋ฌธ : tools (lookup + docsets) macos magit pdf : lang common-lisp data emacs-lisp go javascript latex ledger markdown (org + dragndrop + ipython + pandoc + present) plantuml python ruby โ€‹โ€‹rust sh web : config literate (default + bindings + smartparens))
(ํŒจํ‚ค์ง€ "ํ•ด๋‹น ์—†์Œ")
(elpa "ox-hugo")))

:checkers syntax :lang javascript question resolved

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

@gueorgui ๋ฉ‹์ง€๊ฒŒ ์ž‘๋™ํ•˜๋ ค๋ฉด vue ๊ณผ ๋น„์Šทํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ–ˆ์œผ๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

(define-derived-mode vue-mode web-mode "Vue mode")
(add-to-list 'auto-mode-alist '("\\.vue\\'" . vue-mode))
(after! flycheck
  (flycheck-add-mode 'javascript-eslint 'vue-mode)
  (flycheck-add-mode 'css-stylelint 'vue-mode)
  (add-hook 'vue-mode-hook (lambda () (flycheck-add-next-checker 'lsp-ui 'javascript-eslint)))
  (add-hook 'vue-mode-hook (lambda () (flycheck-add-next-checker 'javascript-eslint 'css-stylelint))))

๋‹น์‹ ์˜ ์ธ์Šคํ„ด์Šค ๋Œ€์ฒด ํ•  ์ˆ˜ vue ์™€ tsx ํ•˜๊ณ  ์ œ๊ฑฐ stylelint ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ง€์›. ๋˜ํ•œ lsp ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ด์— ๋งž๊ฒŒ ์กฐ์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‚ด ์งˆ๋ฌธ์— ๋”ฐ๋ผ javascript-eslint ์—์„œ typescript-mode javascript-eslint ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋ƒˆ์Šต๋‹ˆ๋‹ค.

(defun typescript-mode-setup ()
  "Custom setup for Typescript mode"
  (setq flycheck-checker 'javascript-eslint)
  )
(add-hook 'typescript-mode-hook 'typescript-mode-setup)

๊ทธ๋Ÿฌ๋ฉด .tsx ํŒŒ์ผ์ด typescript-mode (์ด ๋ชจ๋“œ๋Š” JSX / TSX๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ)์—์„œ ์—ด๋ฆฌ์ง€ ์•Š๊ณ  web-mode ์—์„œ ์—ด๋ฆฌ๊ฒŒ๋˜๋ฉฐ javascript-eslint ์€ web-mode ๋Œ€ํ•œ ์œ ํšจํ•œ Flycheck ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ TSX ํŒŒ์ผ์— ๋Œ€ํ•ด typescript-mode ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  JSX ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ตฌ๋ฌธ ๊ฐ•์กฐ ๋ฐ ๋“ค์—ฌ ์“ฐ๊ธฐ์˜ ์žฅ์ ์„ ์žƒ๊ฑฐ๋‚˜ Eslint ์‚ฌ์šฉ์„ ํฌ๊ธฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ํ†ต์ฐฐ๋ ฅ์ด๋ผ๋„ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ˜„

@gueorgui ๋ฉ‹์ง€๊ฒŒ ์ž‘๋™ํ•˜๋ ค๋ฉด vue ๊ณผ ๋น„์Šทํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ–ˆ์œผ๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

(define-derived-mode vue-mode web-mode "Vue mode")
(add-to-list 'auto-mode-alist '("\\.vue\\'" . vue-mode))
(after! flycheck
  (flycheck-add-mode 'javascript-eslint 'vue-mode)
  (flycheck-add-mode 'css-stylelint 'vue-mode)
  (add-hook 'vue-mode-hook (lambda () (flycheck-add-next-checker 'lsp-ui 'javascript-eslint)))
  (add-hook 'vue-mode-hook (lambda () (flycheck-add-next-checker 'javascript-eslint 'css-stylelint))))

๋‹น์‹ ์˜ ์ธ์Šคํ„ด์Šค ๋Œ€์ฒด ํ•  ์ˆ˜ vue ์™€ tsx ํ•˜๊ณ  ์ œ๊ฑฐ stylelint ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ง€์›. ๋˜ํ•œ lsp ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ด์— ๋งž๊ฒŒ ์กฐ์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@afontaine ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

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