Add Javascript config
This commit is contained in:
parent
09cc41fc69
commit
0e434a357f
70
config.org
70
config.org
@ -366,6 +366,76 @@ needs to be set up to install them if they aren't already.
|
|||||||
(use-package yaml-mode)
|
(use-package yaml-mode)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
** Javascript
|
||||||
|
The first bit of this setup (=js2-mode=, =js2-refactor= and
|
||||||
|
=xref-js2=) is essentially copied from [[https://emacs.cafe/emacs/javascript/setup/2017/04/23/emacs-setup-javascript.html][this Emacs cafe post]].
|
||||||
|
|
||||||
|
First of all we want to grab =js2-mode= and enable it for
|
||||||
|
javascript buffers. It extends the default =js-mode= and builds an
|
||||||
|
AST which can be used by other packages.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package js2-mode)
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
|
||||||
|
*** Refactoring
|
||||||
|
=js2-refactor= provides refactoring tools based of said AST, so
|
||||||
|
enable that and its keybindings:
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package js2-refactor)
|
||||||
|
(add-hook 'js2-mode-hook #'js2-refactor-mode)
|
||||||
|
(js2r-add-keybindings-with-prefix "C-c C-r")
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
It provides a kill function with nice semantics for Javascript --
|
||||||
|
we definitely want that instead of the generic kill.
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(define-key js2-mode-map (kbd "C-k") #'js2r-kill)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Find references / jump to definition
|
||||||
|
Then we get to =xref-js2=, which adds stuff for jumping to
|
||||||
|
references and definitions (uses the =ag= tool, so that must be
|
||||||
|
installed in the environment):
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package xref-js2)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
=js-mode= binds =M-.=, which conflicts with =xref-js2= so we need to unbind that:
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(define-key js-mode-map (kbd "M-.") nil)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
And hook it up to =js2-mode=:
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(add-hook 'js2-mode-hook (lambda ()
|
||||||
|
(add-hook 'xref-backend-functions #'xref-js2-xref-backend nil t)))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Using local tools from NPM
|
||||||
|
To use tools locally by NPM, there is =add-node-modules-path=:
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package add-node-modules-path)
|
||||||
|
(eval-after-load 'js2-mode
|
||||||
|
'(add-hook 'js2-mode-hook #'add-node-modules-path))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Autoformatting
|
||||||
|
[[https://prettier.io/][Prettier]] seems low-effort to set up :D
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package prettier-js)
|
||||||
|
(add-hook 'js2-mode-hook 'prettier-js-mode)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
* Desktop
|
* Desktop
|
||||||
** EXWM
|
** EXWM
|
||||||
One must fulfil the meme of doing everything with Emacs... still
|
One must fulfil the meme of doing everything with Emacs... still
|
||||||
|
Loading…
x
Reference in New Issue
Block a user