forked from purcell/emacs.d
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinit-javascript.el
89 lines (63 loc) · 2.95 KB
/
init-javascript.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
;;; init-javascript.el --- Support for Javascript and derivatives -*- lexical-binding: t -*-
;;; Commentary:
;;; Code:
(maybe-require-package 'json-mode)
(maybe-require-package 'js2-mode)
(maybe-require-package 'typescript-mode)
(maybe-require-package 'prettier-js)
;;; Basic js-mode setup
(add-to-list 'auto-mode-alist '("\\.\\(js\\|es6\\)\\(\\.erb\\)?\\'" . js-mode))
(with-eval-after-load 'js
(sanityinc/major-mode-lighter 'js-mode "JS")
(sanityinc/major-mode-lighter 'js-jsx-mode "JSX"))
(setq-default js-indent-level 2)
;; js2-mode
;; Change some defaults: customize them to override
(setq-default js2-bounce-indent-p nil)
(with-eval-after-load 'js2-mode
;; Disable js2 mode's syntax error highlighting by default...
(setq-default js2-mode-show-parse-errors nil
js2-mode-show-strict-warnings nil)
;; ... but enable it if flycheck can't handle javascript
(autoload 'flycheck-get-checker-for-buffer "flycheck")
(defun sanityinc/enable-js2-checks-if-flycheck-inactive ()
(unless (flycheck-get-checker-for-buffer)
(setq-local js2-mode-show-parse-errors t)
(setq-local js2-mode-show-strict-warnings t)
(when (derived-mode-p 'js-mode)
(js2-minor-mode 1))))
(add-hook 'js-mode-hook 'sanityinc/enable-js2-checks-if-flycheck-inactive)
(add-hook 'js2-mode-hook 'sanityinc/enable-js2-checks-if-flycheck-inactive)
(js2-imenu-extras-setup))
(add-to-list 'interpreter-mode-alist (cons "node" 'js2-mode))
(with-eval-after-load 'js2-mode
(sanityinc/major-mode-lighter 'js2-mode "JS2")
(sanityinc/major-mode-lighter 'js2-jsx-mode "JSX2"))
(require 'derived)
(when (and (or (executable-find "rg") (executable-find "ag"))
(maybe-require-package 'xref-js2))
(when (executable-find "rg")
(setq-default xref-js2-search-program 'rg))
(defun sanityinc/enable-xref-js2 ()
(add-hook 'xref-backend-functions #'xref-js2-xref-backend nil t))
(let ((base-mode (if (fboundp 'js-base-mode) 'js-base-mode 'js-mode)))
(with-eval-after-load 'js
(add-hook (derived-mode-hook-name base-mode) 'sanityinc/enable-xref-js2)
(define-key js-mode-map (kbd "M-.") nil)
(when (boundp 'js-ts-mode-map)
(define-key js-ts-mode-map (kbd "M-.") nil))))
(with-eval-after-load 'js2-mode
(define-key js2-mode-map (kbd "M-.") nil)))
;; Run and interact with an inferior JS via js-comint.el
(when (maybe-require-package 'js-comint)
(setq js-comint-program-command "node")
(defvar inferior-js-minor-mode-map (make-sparse-keymap))
(define-key inferior-js-minor-mode-map "\C-x\C-e" 'js-send-last-sexp)
(define-key inferior-js-minor-mode-map "\C-cb" 'js-send-buffer)
(define-minor-mode inferior-js-keys-mode
"Bindings for communicating with an inferior js interpreter."
:init-value nil :lighter " InfJS" :keymap inferior-js-minor-mode-map)
(dolist (hook '(js2-mode-hook js-mode-hook))
(add-hook hook 'inferior-js-keys-mode)))
(provide 'init-javascript)
;;; init-javascript.el ends here