Skip to content

Instantly share code, notes, and snippets.

@twlz0ne
Last active December 28, 2018 14:28
Show Gist options
  • Save twlz0ne/447b00b11321101997b646514aedc048 to your computer and use it in GitHub Desktop.
Save twlz0ne/447b00b11321101997b646514aedc048 to your computer and use it in GitHub Desktop.
Init web with lsp, append major mode to existing lsp client #Emacs
;;; init-web.el --- Init web with lsp -*- lexical-binding: t; -*-
(require 'web)
(require 'lsp)
(require 'lsp-clients)
(defmacro lsp-register-major-mode (client mode)
"Registers major MODE to CLIENT.
\(fn 'example-ls 'example-mode)"
(gv-letplace (getter setter) `(lsp--client-major-modes (gethash ,client lsp-clients))
`(unless (memq ,mode ,getter)
(funcall ,setter (push ,mode ,getter)))))
(define-derived-mode web-jsx-mode web-mode "WebJSX"
"Major mode for editing Web & JSX templates.\\{web-jsx-map}"
(setq web-mode-content-type "jsx"))
(define-derived-mode web-tsx-mode web-mode "WebTSX"
"Major mode for editing Web & TSX templates.\\{web-tsx-map}"
(setq web-mode-content-type "jsx"))
(define-derived-mode web-vue-mode web-mode "WebVUE"
"Major mode for editing Web & VUE templates.\\{web-vue-map}")
(add-to-list 'auto-mode-alist '("\\.jsx\\'" . web-jsx-mode))
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-tsx-mode))
(add-to-list 'auto-mode-alist '("\\.vue\\'" . web-vue-mode))
(lsp-register-major-mode 'ts-ls 'web-jsx-mode)
(lsp-register-major-mode 'ts-ls 'web-tsx-mode)
(lsp-register-major-mode 'vls 'web-vue-mode)
(provide 'init-web)
;;; init-web.el ends here
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment