Skip to content

Instantly share code, notes, and snippets.

@lewang
Created February 28, 2012 15:58
Show Gist options
  • Save lewang/908bc9cb7677d5936936 to your computer and use it in GitHub Desktop.
Save lewang/908bc9cb7677d5936936 to your computer and use it in GitHub Desktop.
use autopair to insert semi-colon automatically for js2-mode
(defvar js2-semicolon-contexts (list js2-NAME js2-LP js2-SCRIPT js2-CALL js2-BLOCK))
(defun autopair-js2-maybe-insert-semi-colon (action pair pos-before)
"handler for automatically inserting semi-colon at the end of function call.
"
;; (message "node before is %s" (js2-node-type (js2-node-at-point (- (point) 1))))
;; (message "action is %s" action)
;; (message "pair is %c" pair)
;; (message "context is %s" (buffer-substring-no-properties (point-at-bol) (point-at-eol)))
;; (message "point is %s" (point))
(cond ((and (eq action 'opening)
(eq pair ?\))
(save-excursion
(goto-char pos-before)
(skip-chars-backward " \t")
;; (message "node is %s." (js2-node-type (js2-node-at-point (point))))
(memq (js2-node-type (js2-node-at-point (point))) js2-semicolon-contexts)
))
(save-excursion
(let ((forward-sexp-function nil))
(goto-char pos-before)
(forward-sexp))
(if (looking-at-p "[^[:graph:]]*$")
(insert ";"))))))
;;;###autoload
(defun le::js2-mode-setup ()
(setq autopair-handle-action-fns
(list #'autopair-default-handle-action
#'autopair-js2-maybe-insert-semi-colon))
(rebox-mode 1)
(le::prog-modes-setup))
;;;###autoload(add-hook 'js2-mode-hook 'le::js2-mode-setup)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment