about summary refs log tree commit diff
path: root/configs/shared/emacs/.emacs.d/wpc/packages/wpc-javascript.el
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2018-09-10T18·51-0400
committerWilliam Carroll <wpcarro@gmail.com>2018-09-10T18·53-0400
commit17ee0e400bef47c371afcae76037f9ea6a44ad13 (patch)
tree0e5efee6f00e402890e91f3eceb4b29408a498b6 /configs/shared/emacs/.emacs.d/wpc/packages/wpc-javascript.el
parent8b2fadf4776b7ddb4a67b4bc8ff6463770e56028 (diff)
Support Vim, Tmux, Emacs with Stow
After moving off of Meta, Dotfiles has a greater responsibility to
manage configs. Vim, Tmux, and Emacs are now within Stow's purview.
Diffstat (limited to 'configs/shared/emacs/.emacs.d/wpc/packages/wpc-javascript.el')
-rw-r--r--configs/shared/emacs/.emacs.d/wpc/packages/wpc-javascript.el95
1 files changed, 95 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/wpc/packages/wpc-javascript.el b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-javascript.el
new file mode 100644
index 000000000000..717f1d9f9af3
--- /dev/null
+++ b/configs/shared/emacs/.emacs.d/wpc/packages/wpc-javascript.el
@@ -0,0 +1,95 @@
+;;; wpc-javascript.el --- My Javascript preferences -*- lexical-binding: t -*-
+;; Author: William Carroll <wpcarro@gmail.com>
+
+;;; Commentary:
+;; This module hosts my Javascript tooling preferences
+
+;;; Code:
+
+;; Constants
+(defconst wpc/js-hooks
+  '(js-mode-hook js2-mode-hook rjsx-mode-hook)
+  "All of the commonly used hooks for Javascript buffers.")
+
+(defconst wpc/frontend-hooks
+  (-insert-at 0 'css-mode-hook wpc/js-hooks)
+  "All of the commonly user hooks for frontend development.")
+
+
+;; Helper functions
+(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")))
+
+;; frontend indentation settings
+(setq js-indent-level 2
+      css-indent-offset 2)
+
+;; ;; 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 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 add-node-modules-path
+  :config
+  (general-add-hook wpc/js-hooks #'add-node-modules-path))
+
+(use-package flow-minor-mode
+  :general
+  (n "gd" 'flow-minor-jump-to-definition)
+  :requires evil-leader
+  :config
+  (general-add-hook wpc/js-hooks #'flow-minor-mode)
+  (evil-leader/set-key-for-mode 'rjsx-mode "F" #'wpc/insert-flow-annotation))
+
+;; Shouldn't need this once LSP is setup properly
+;; (use-package company-flow
+;;   :after (company)
+;;   :config
+;;   (add-to-list 'company-flow-modes 'rjsx-mode)
+;;   (add-to-list 'company-backends 'company-flow))
+
+;; Shouldn't need this once LSP is setup properly
+;; (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))
+
+;; 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)
+  :mode "\\.js\\'"
+  :config
+  (setq js2-mode-show-parse-errors nil
+        js2-mode-show-strict-warnings nil))
+
+;; JS autoformatting
+(use-package prettier-js
+  :after (rjsx-mode)
+  :config
+  (general-add-hook wpc/frontend-hooks #'prettier-js-mode))
+
+;; LSP support
+(use-package lsp-javascript-flow
+  :config
+  (general-add-hook wpc/js-hooks #'lsp-javascript-flow-enable))
+
+(provide 'wpc-javascript)
+;;; wpc-javascript.el ends here