Files
dotemacs/lisp/modes/javascript.el
2022-01-09 21:19:46 +01:00

113 lines
3.0 KiB
EmacsLisp

;;; 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