blob: 5dcd5937b11d9e8ac91cea66ba41f3affc58311c (
plain) (
blame)
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
|
;;; javascript.el --- My Javascript preferences -*- lexical-binding: t -*-
;; Author: William Carroll <wpcarro@gmail.com>
;;; Commentary:
;; This module hosts my Javascript tooling preferences
;;; Code:
;; Helper functions
(defun wpc/indium-setup (url)
"Setup the indium environment using URL."
(indium-eval (format "window.dispatchEvent(new CustomEvent('patch', {detail: {url: %s}}" url)))
(defun wpc/insert-flow-annotation ()
"Insert a flow type annotation to the beginning of a buffer."
(interactive)
(save-excursion
(goto-char (point-min))
(insert "// @flow\n")))
;; ;; javascript
;; (evil-leader/set-key-for-mode 'rjsx-mode "t" #'wpc/toggle-between-js-test-and-module)
;; (evil-leader/set-key-for-mode 'rjsx-mode "x" #'wpc/toggle-between-js-component-and-store)
;; (evil-leader/set-key-for-mode 'rjsx-mode "u" #'wpc/jump-to-parent-file)
;; javascript setup
(use-package indium
:hook (indium-update-script-source . wpc/indium-setup))
;; javascript text objects
(quelpa '(evil-text-objects-javascript
:fetcher github
:repo "urbint/evil-text-objects-javascript"))
(require 'evil-text-objects-javascript)
;; Flow for Javascript
(use-package flow-minor-mode
:hook js2-mode
:requires evil-leader
:config
(evil-leader/set-key-for-mode 'rjsx-mode "F" #'wpc/insert-flow-annotation))
(use-package company-flow
:after (company)
:hook (rjsx-mode . wpc/set-flow-executable)
:config
(add-to-list 'company-flow-modes 'rjsx-mode)
(add-to-list 'company-backends 'company-flow))
(use-package flycheck-flow
:after (flycheck)
:config
(flycheck-add-mode 'javascript-flow 'rjsx-mode)
(flycheck-add-mode 'javascript-flow 'flow-minor-mode)
(flycheck-add-mode 'javascript-eslint 'flow-minor-mode)
(flycheck-add-next-checker 'javascript-flow 'javascript-eslint))
;; front-end indentation
(setq js-indent-level 2
css-indent-offset 2)
;; eslint integration with flycheck
(setq flycheck-javascript-eslint-executable "~/urbint/grid-front-end/node_modules/.bin/eslint")
;; JS autoformatting
(use-package prettier-js
:after (rjsx-mode)
:ghook ('(rjsx-mode-hook
js2-mode-hook
json-mode-hook
css-mode-hook)))
;; JSX highlighting
(use-package rjsx-mode
:after (evil-text-objects-javascript)
:general
(general-unbind rjsx-mode-map "<" ">" "C-d")
(n rjsx-mode-map
"K" 'flow-minor-type-at-pos)
:gfhook #'evil-text-objects-javascript/install
:mode "\\.js\\'"
:config
(setq js2-mode-show-parse-errors nil
js2-mode-show-strict-warnings nil))
(provide 'wpc-javascript)
;;; wpc-javascript.el ends here
|