f971ee7120
I have also updated the installation instructions as tsserver is not longer available as single executable on npm. Also I've made sure that modes register for tide backend only if it is really intended to.
115 lines
3.9 KiB
EmacsLisp
115 lines
3.9 KiB
EmacsLisp
;;; packages.el --- react layer packages file for Spacemacs. -*- lexical-binding: t -*-
|
|
;;
|
|
;; Copyright (c) 2012-2018 Sylvain Benner & Contributors
|
|
;;
|
|
;; Author: Andrea Moretti <axyzxp@gmail.com>
|
|
;; URL: https://github.com/axyz
|
|
;;
|
|
;; This file is not part of GNU Emacs.
|
|
;;
|
|
;;; License: GPLv3
|
|
|
|
(defconst react-packages
|
|
'(
|
|
add-node-modules-path
|
|
company
|
|
emmet-mode
|
|
evil-matchit
|
|
flycheck
|
|
import-js
|
|
js-doc
|
|
prettier-js
|
|
rjsx-mode
|
|
smartparens
|
|
tern
|
|
tide
|
|
web-beautify
|
|
yasnippet
|
|
))
|
|
|
|
(defun react/post-init-add-node-modules-path ()
|
|
(add-hook 'rjsx-mode-hook #'add-node-modules-path))
|
|
|
|
(defun react/post-init-company ()
|
|
(add-hook 'rjsx-mode-local-vars-hook #'spacemacs//react-setup-company))
|
|
|
|
(defun react/post-init-emmet-mode ()
|
|
(add-hook 'rjsx-mode-hook 'spacemacs/react-emmet-mode))
|
|
|
|
(defun react/post-init-evil-matchit ()
|
|
(add-hook 'rjsx-mode-hook 'turn-on-evil-matchit-mode))
|
|
|
|
(defun react/post-init-flycheck ()
|
|
(with-eval-after-load 'flycheck
|
|
(dolist (checker '(javascript-eslint javascript-standard))
|
|
(flycheck-add-mode checker 'rjsx-mode)))
|
|
(spacemacs/enable-flycheck 'rjsx-mode)
|
|
(add-hook 'rjsx-mode-hook #'spacemacs//javascript-setup-checkers 'append))
|
|
|
|
(defun react/pre-init-import-js ()
|
|
(when (eq javascript-import-tool 'import-js)
|
|
(add-to-list 'spacemacs--import-js-modes (cons 'rjsx-mode 'rjsx-mode-hook))))
|
|
|
|
(defun react/post-init-js-doc ()
|
|
(add-hook 'rjsx-mode-hook 'spacemacs/js-doc-require)
|
|
(spacemacs/js-doc-set-key-bindings 'rjsx-mode))
|
|
|
|
(defun react/init-rjsx-mode ()
|
|
(use-package rjsx-mode
|
|
:defer t
|
|
:init
|
|
;; enable rjsx mode by using magic-mode-alist
|
|
(defun +javascript-jsx-file-p ()
|
|
(and buffer-file-name
|
|
(or (equal (file-name-extension buffer-file-name) "js")
|
|
(equal (file-name-extension buffer-file-name) "jsx"))
|
|
(re-search-forward "\\(^\\s-*import React\\|\\( from \\|require(\\)[\"']react\\)"
|
|
magic-mode-regexp-match-limit t)
|
|
(progn (goto-char (match-beginning 1))
|
|
(not (spacemacs//react-inside-string-or-comment-q)))))
|
|
|
|
(add-to-list 'magic-mode-alist (cons #'+javascript-jsx-file-p 'rjsx-mode))
|
|
|
|
;; setup rjsx backend
|
|
(add-hook 'rjsx-mode-local-vars-hook #'spacemacs//react-setup-backend)
|
|
;; set next-error-function to nil because we use flycheck
|
|
(add-hook 'rjsx-mode-local-vars-hook #'spacemacs//react-setup-next-error-fn)
|
|
;; setup fmt on save
|
|
(when javascript-fmt-on-save
|
|
(add-hook 'rjsx-mode-local-vars-hook #'spacemacs//react-fmt-before-save-hook))
|
|
|
|
:config
|
|
;; declare prefix
|
|
(spacemacs/declare-prefix-for-mode 'rjsx-mode "mr" "refactor")
|
|
(spacemacs/declare-prefix-for-mode 'rjsx-mode "mrr" "rename")
|
|
(spacemacs/declare-prefix-for-mode 'rjsx-mode "mh" "documentation")
|
|
(spacemacs/declare-prefix-for-mode 'rjsx-mode "mg" "goto")
|
|
|
|
(spacemacs/set-leader-keys-for-major-mode 'rjsx-mode "rt" 'rjsx-rename-tag-at-point)
|
|
|
|
(with-eval-after-load 'rjsx-mode
|
|
(define-key rjsx-mode-map (kbd "C-d") nil))))
|
|
|
|
(defun react/pre-init-prettier-js ()
|
|
(when (eq javascript-fmt-tool 'prettier)
|
|
(add-to-list 'spacemacs--prettier-modes 'rjsx-mode)))
|
|
|
|
(defun react/post-init-smartparens ()
|
|
(if dotspacemacs-smartparens-strict-mode
|
|
(add-hook 'rjsx-mode-hook #'smartparens-strict-mode)
|
|
(add-hook 'rjsx-mode-hook #'smartparens-mode)))
|
|
|
|
(defun react/post-init-tern ()
|
|
(add-to-list 'tern--key-bindings-modes 'rjsx-mode))
|
|
|
|
(defun react/post-init-tide ()
|
|
(when (eq (spacemacs//typescript-backend) `tide)
|
|
(add-to-list 'tide-managed-modes 'rjsx-mode)))
|
|
|
|
(defun react/pre-init-web-beautify ()
|
|
(when (eq javascript-fmt-tool 'web-beautify)
|
|
(add-to-list 'spacemacs--web-beautify-modes
|
|
(cons 'rjsx-mode 'web-beautify-js))))
|
|
|
|
(defun react/post-init-yasnippet ()
|
|
(add-hook 'rjsx-mode-hook #'spacemacs//react-setup-yasnippet))
|