Skip to content

Instantly share code, notes, and snippets.

@ifree
Last active August 29, 2015 14:02
Show Gist options
  • Save ifree/01d80f178e3d877efde7 to your computer and use it in GitHub Desktop.
Save ifree/01d80f178e3d877efde7 to your computer and use it in GitHub Desktop.
rename js variable in lexical scope
(defun js2r-rename-var (replacement)
"Renames the variable on point and all occurrences in its lexical scope."
(interactive "sInput the replacement: ")
; (js2r--guard)
(let* ((current-node (js2r--local-name-node-at-point))
(len (js2-node-len current-node))
(offset (- (length replacement) len))
(current-start (js2-node-abs-pos current-node))
(current-end (+ current-start len)))
(goto-char current-start)
(delete-region (point) (+ (point) len))
(insert replacement)
(save-excursion
(mapc (lambda (beg)
(when (not (= beg current-start))
(if (> beg current-start)
(goto-char (+ offset beg))
(goto-char beg))
(delete-region (point) (+ (point) len))
(insert replacement)
))
(js2r--local-var-positions current-node)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment