;;; javascript.el --- initializes JavaScript modes -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: (defun user--javascript-mode-common-hook () "JavaScript common mode hook." ;; ;; Load CEDET ;; (user--javascript-mode-cedet-hook) ;; (user/gnu-global-enable) (flycheck-mode t) ;; (tern-mode t) ) (defun user--javascript-mode-hook () "JavaScript mode hook." (user--javascript-mode-common-hook)) (defun user--inferior-js-mode-hook () "Inferior JavaScript mode hook." ;; Support ANSI colors. (ansi-color-for-comint-mode-on)) (defun user--js2-mode-hook () "JS2 mode hook." (user--javascript-mode-common-hook) ;; Enable smart indentation (smart-tabs-mode t) ;; Enable Flycheck (flycheck-mode t)) ;; (defun user--javascript-mode-cedet-hook () ;; "JavaScript CEDET support hook." ;; (with-feature 'semantic/wisent/javascript ;; (wisent-javascript-setup-parser) ;; ;; (user--cedet-hook) ;; )) ;; ;; (use-package js :defer :hook ((javascript-mode-hook . user--javascript-mode-hook) (inferior-js-mode-hook . user--inferior-javascript-mode-hook))) ;; https://github.com/mooz/js2-mode ;; Improved JavaScript editing mode for GNU Emacs (use-package js2-mode :defer :mode "\.[m]js$" ;; :mode "\.ts$" :magic "#!/usr/bin/env node" :hook (js2-mode-hook . user--js2-mode-hook) :config (validate-setq ;; ;; Configure indentation ;; (setq js2-enter-indents-newline t) ;; (setq js2-auto-indent-p t) ;; Idle timeout before reparsing buffer js2-idle-timer-delay 0.5 ;; Disable error parsing in favor of Flycheck js2-strict-missing-semi-warning nil) ;; https://github.com/redguardtoo/js-comint ;; js-comint will send the code from Emacs into node.js or rhino (use-package js-comint :disabled :config (validate-setq ;; Set JavaScript inferior. inferior-js-program-command (cond ((executable-find "js") (executable-find "js")) ((executable-find "node") (concat (executable-find "node") " --interactive")) (t "java org.mozilla.javascript.tools.shell.Main"))) ;; Workaround for Node.js prompt. (setenv "NODE_NO_READLINE" "1")) ;; https://github.com/prettier/prettier-emacs ;; Minor mode to format JS code on file save (use-package prettier-js :disabled) ;; https://emacs-lsp.github.io/lsp-mode/page/lsp-typescript-javascript/ (use-package lsp-javascript-typescript :disabled :if (executable-find "javascript-typescript-langserver") :hook (js2-mode-hook . lsp-javascript-typescript-enable)) ;; https://github.com/torgeir/helm-js-codemod.el ;; A helm interface for running js-codemod.el (use-package helm-js-codemod :disabled :if (executable-find "jscodeshift")) ;; https://github.com/js-emacs/xref-js2 ;; Jump to references/definitions using ag & js2-mode's AST in Emacs (use-package xref-js2 :init (add-hook 'xref-backend-functions #'xref-js2-xref-backend nil t))) (provide 'modes/javascript) ;;; javascript.el ends here