Merge pull request #3258 from sei40kr/tslint-and-eslint-for-tsx

lang/javascript: Enable TSLint and ESLint for TypeScript-TSX
This commit is contained in:
Henrik Lissner 2020-06-07 14:19:13 -04:00 committed by GitHub
commit 912961b46d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 16 deletions

View file

@ -31,6 +31,7 @@
(js2-mode :lang javascript) (js2-mode :lang javascript)
(rjsx-mode :lang javascript) (rjsx-mode :lang javascript)
(typescript-mode :lang javascript) (typescript-mode :lang javascript)
(typescript-tsx-mode :lang javascript)
(coffee-mode :lang javascript) (coffee-mode :lang javascript)
(julia-mode :lang julia) (julia-mode :lang julia)
(kotlin-mode :lang kotlin) (kotlin-mode :lang kotlin)

View file

@ -92,17 +92,9 @@
(use-package! typescript-mode (use-package! typescript-mode
:hook (typescript-mode . rainbow-delimiters-mode) :hook (typescript-mode . rainbow-delimiters-mode)
:init
;; REVIEW Fix #2252. This is overwritten if the :lang web module is enabled.
;; We associate TSX files with `web-mode' by default instead because
;; `typescript-mode' does not officially support JSX/TSX. See
;; https://github.com/emacs-typescript/typescript.el/issues/4
(unless (featurep! :lang web)
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . typescript-mode)))
:config :config
(set-electric! 'typescript-mode (set-electric! 'typescript-mode
:chars '(?\} ?\)) :words '("||" "&&")) :chars '(?\} ?\)) :words '("||" "&&"))
(set-docsets! 'typescript-mode "TypeScript" "AngularTS")
(set-pretty-symbols! 'typescript-mode (set-pretty-symbols! 'typescript-mode
;; Functional ;; Functional
:def "function" :def "function"
@ -123,6 +115,25 @@
(setq-hook! 'typescript-mode-hook (setq-hook! 'typescript-mode-hook
comment-line-break-function #'js2-line-break)) comment-line-break-function #'js2-line-break))
;; REVIEW We associate TSX files with `typescript-tsx-mode' derived from
;; `web-mode' because `typescript-mode' does not officially support
;; JSX/TSX. See
;; https://github.com/emacs-typescript/typescript.el/issues/4
(if (featurep! :lang web)
(progn
(define-derived-mode typescript-tsx-mode web-mode "TypeScript-tsx")
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . typescript-tsx-mode))
(add-hook 'typescript-tsx-mode-hook #'emmet-mode)
(after! flycheck
(flycheck-add-mode 'typescript-tslint 'typescript-tsx-mode)
(flycheck-add-mode 'javascript-eslint 'typescript-tsx-mode)))
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . typescript-mode)))
(after! (:any typescript-mode web-mode)
(set-docsets! '(typescript-mode typescript-tsx-mode) "TypeScript" "AngularTS"))
;;;###package coffee-mode ;;;###package coffee-mode
(setq coffee-indent-like-python-mode t) (setq coffee-indent-like-python-mode t)
@ -135,6 +146,7 @@
(add-hook! '(js2-mode-local-vars-hook (add-hook! '(js2-mode-local-vars-hook
typescript-mode-local-vars-hook typescript-mode-local-vars-hook
typescript-tsx-mode-local-vars-hook
web-mode-local-vars-hook web-mode-local-vars-hook
rjsx-mode-local-vars-hook) rjsx-mode-local-vars-hook)
(defun +javascript-init-lsp-or-tide-maybe-h () (defun +javascript-init-lsp-or-tide-maybe-h ()
@ -146,10 +158,7 @@ current buffer represents a file in a project.
If LSP fails to start (e.g. no available server or project), then we fall back If LSP fails to start (e.g. no available server or project), then we fall back
to tide." to tide."
(let ((buffer-file-name (buffer-file-name (buffer-base-buffer)))) (let ((buffer-file-name (buffer-file-name (buffer-base-buffer))))
(when (or (derived-mode-p 'js-mode 'typescript-mode) (when (derived-mode-p 'js-mode 'typescript-mode 'typescript-tsx-mode)
(and buffer-file-name
(eq major-mode 'web-mode)
(string= "tsx" (file-name-extension buffer-file-name))))
(if (not buffer-file-name) (if (not buffer-file-name)
;; necessary because `tide-setup' and `lsp' will error if not a ;; necessary because `tide-setup' and `lsp' will error if not a
;; file-visiting buffer ;; file-visiting buffer
@ -290,6 +299,7 @@ to tide."
js-mode js-mode
json-mode json-mode
typescript-mode typescript-mode
typescript-tsx-mode
solidity-mode) solidity-mode)
:when (locate-dominating-file default-directory "package.json") :when (locate-dominating-file default-directory "package.json")
:add-hooks '(add-node-modules-path npm-mode)) :add-hooks '(add-node-modules-path npm-mode))

View file

@ -14,10 +14,6 @@
:mode "\\.jinja2?\\'" :mode "\\.jinja2?\\'"
:mode "wp-content/themes/.+/.+\\.php\\'" :mode "wp-content/themes/.+/.+\\.php\\'"
:mode "templates/.+\\.php\\'" :mode "templates/.+\\.php\\'"
;; REVIEW We associate TSX files with `web-mode' because `typescript-mode'
;; does not officially support JSX/TSX. See
;; https://github.com/emacs-typescript/typescript.el/issues/4
:mode "\\.tsx\\'"
:init :init
;; If the user has installed `vue-mode' then, by appending this to ;; If the user has installed `vue-mode' then, by appending this to
;; `auto-mode-alist' rather than prepending it, its autoload will have ;; `auto-mode-alist' rather than prepending it, its autoload will have