Skip to content

Commit 9203c7d

Browse files
add tide-rename-file command (#258)
* add tide-rename-file command * use get-file-buffer * apply edits after rename tsserver might return edits for the rename file
1 parent fa5a594 commit 9203c7d

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ project. Errors can be navigated using <kbd>n</kbd> and
154154
<kbd>M-x tide-rename-symbol</kbd> Rename all occurrences of the symbol
155155
at point.
156156

157+
<kbd>M-x tide-rename-file</kbd> Rename current file and all it's
158+
references in other files.
159+
157160
<kbd>M-x tide-format</kbd> Format the current region or buffer.
158161

159162
<kbd>M-x tide-fix</kbd> Apply code fix for the error at point. When

tide.el

+30
Original file line numberDiff line numberDiff line change
@@ -1676,6 +1676,36 @@ number."
16761676

16771677
(message "Renamed %d occurrences." count)))))))
16781678

1679+
(defun tide-command:getEditsForFileRename (old new)
1680+
(tide-send-command-sync "getEditsForFileRename" `(:oldFilePath ,old :newFilePath ,new :file ,old)))
1681+
1682+
(defun tide-rename-file ()
1683+
"Rename current file and all it's references in other files."
1684+
(interactive)
1685+
(let* ((name (buffer-name))
1686+
(old (tide-buffer-file-name))
1687+
(basename (file-name-nondirectory old)))
1688+
(when (not (and old (file-exists-p old)))
1689+
(error "Buffer '%s' is not visiting a file." name))
1690+
(let ((new (read-file-name "New name: " (file-name-directory old) basename nil basename)))
1691+
(when (get-file-buffer new)
1692+
(error "A buffer named '%s' already exists." new))
1693+
(when (file-exists-p new)
1694+
(error "A file named '%s' already exists." new))
1695+
(let* ((response (tide-command:getEditsForFileRename (expand-file-name old) (expand-file-name new)))
1696+
(edits (tide-on-response-success response (:min-version "2.9")
1697+
(plist-get response :body))))
1698+
(tide-cleanup-buffer)
1699+
(mkdir (file-name-directory new) t)
1700+
(rename-file old new)
1701+
(rename-buffer new)
1702+
(set-visited-file-name new)
1703+
(set-buffer-modified-p nil)
1704+
(when edits
1705+
(tide-apply-code-edits edits))
1706+
(tide-configure-buffer)
1707+
(message "Renamed '%s to '%s'." name (file-name-nondirectory new))))))
1708+
16791709
;;; Format
16801710

16811711
;;;###autoload

0 commit comments

Comments
 (0)