(require 'common-lsp) (require 'util-tree-sitter) (use-package js :mode ( ("\\.js\\'" . js-mode) ("\\.json\\'" . js-mode) ) :commands js-mode :pin manual :hook ( (find-file . (lambda () (when (string= (file-name-extension buffer-file-name) "json") (add-hook 'before-save-hook 'json-fmt-jq nil 'local)))) (js-mode . (lambda () (tree-sitter-hl-mode +1) ) ) ) :config (setq js-indent-level 2) ) (use-package typescript-mode :mode ( ("\\.ts\\'" . typescript-mode) ("\\.tsx\\'" . typescript-mode) ) :hook ( (typescript-mode . (lambda () ;; (lsp-register-client ;; (make-lsp-client :new-connection (lsp-stdio-connection '("deno" "lsp" --compat --unstable --allow-read)) ;; :major-modes '(typescript-mode) ;; :server-id 'typescript-ls)) (eglot-ensure) (tree-sitter-hl-mode +1) )) ;; (before-save . lsp-format-buffer) ) ) (defun json-fmt-jq () "Run jq." (run-command-on-buffer "jq" "--monochrome-output" ".") ) (use-package web-mode :mode (("\\.dust\\'" . web-mode) ) :config (setq web-mode-markup-indent-offset 2) (setq web-mode-enable-current-element-highlight t) ) ;; Define a custom mode for dust so that org-mode handle #+BEGIN_SRC dust blocks (define-derived-mode dust-mode web-mode "WebDust" "Major mode for editing dust templates in web-mode." (web-mode) (web-mode-set-engine "dust") ;; (setq web-mode-content-type "html") ) (provide 'lang-javascript)