Skip to content

Instantly share code, notes, and snippets.

@merrickluo
Created September 8, 2021 15:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save merrickluo/2eb072ca5750a4fba91a5ffbaa1a460d to your computer and use it in GitHub Desktop.
Save merrickluo/2eb072ca5750a4fba91a5ffbaa1a460d to your computer and use it in GitHub Desktop.
typescript-mode + tree-sitter for tsx
(use-package! tree-sitter
:when (bound-and-true-p module-file-suffix)
:hook (prog-mode . tree-sitter-mode)
:hook (tree-sitter-after-on . tree-sitter-hl-mode)
:config
(require 'tree-sitter-langs)
(global-tree-sitter-mode)
(add-hook 'tree-sitter-after-on-hook #'tree-sitter-hl-mode)
(defadvice! doom-tree-sitter-fail-gracefully-a (orig-fn &rest args)
"Don't break with errors when current major mode lacks tree-sitter support."
:around #'tree-sitter-mode
(condition-case e
(apply orig-fn args)
(error
(unless (string-match-p (concat "^Cannot find shared library\\|"
"^No language registered\\|"
"cannot open shared object file")
(error-message-string e))
(signal (car e) (cadr e)))))))
(use-package! typescript-mode
:mode ("\\.tsx\\'" . typescript-tsx-tree-sitter-mode)
:config
(define-derived-mode typescript-tsx-tree-sitter-mode typescript-mode "TypeScript TSX"
(setq-local indent-line-function 'rjsx-indent-line))
(add-hook! 'typescript-tsx-tree-sitter-mode-local-vars-hook
#'+javascript-init-lsp-or-tide-maybe-h
#'rjsx-minor-mode)
(map! :map typescript-tsx-tree-sitter-mode-map
"<" 'rjsx-electric-lt
">" 'rjsx-electric-gt)
(setq typescript-indent-level 2))
(after! tree-sitter
(add-to-list 'tree-sitter-major-mode-language-alist '(typescript-tsx-tree-sitter-mode . tsx)))
(package! tree-sitter
:ignore (null (bound-and-true-p module-file-suffix)))
(package! tree-sitter-langs
:ignore (null (bound-and-true-p module-file-suffix)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment