about summary refs log tree commit diff
path: root/emacs.d/wpc/packages/wpc-javascript.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs.d/wpc/packages/wpc-javascript.el')
-rw-r--r--emacs.d/wpc/packages/wpc-javascript.el87
1 files changed, 87 insertions, 0 deletions
diff --git a/emacs.d/wpc/packages/wpc-javascript.el b/emacs.d/wpc/packages/wpc-javascript.el
new file mode 100644
index 000000000000..5dcd5937b11d
--- /dev/null
+++ b/emacs.d/wpc/packages/wpc-javascript.el
@@ -0,0 +1,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