diff --git a/refactor/rename/go-rename.el b/refactor/rename/go-rename.el
deleted file mode 100644
index f12d363..0000000
--- a/refactor/rename/go-rename.el
+++ /dev/null
@@ -1,108 +0,0 @@
-;;; go-rename.el --- Integration of the 'gorename' tool into Emacs.
-
-;; Copyright 2014 The Go Authors. All rights reserved.
-;; Use of this source code is governed by a BSD-style
-;; license that can be found in the LICENSE file.
-
-;; Version: 0.1
-;; Package-Requires: ((go-mode "1.3.1"))
-;; Keywords: tools
-
-;;; Commentary:
-
-;; To install:
-
-;; % go get golang.org/x/tools/cmd/gorename
-;; % go build golang.org/x/tools/cmd/gorename
-;; % mv gorename $HOME/bin/         # or elsewhere on $PATH
-
-;; The go-rename-command variable can be customized to specify an
-;; alternative location for the installed command.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'compile)
-(require 'go-mode)
-(require 'thingatpt)
-
-(defgroup go-rename nil
-  "Options specific to the Go rename."
-  :group 'go)
-
-(defcustom go-rename-command "gorename"
-  "The `gorename' command; by the default, $PATH is searched."
-  :type 'string
-  :group 'go-rename)
-
-;;;###autoload
-(defun go-rename (new-name &optional force)
-  "Rename the entity denoted by the identifier at point, using
-the `gorename' tool. With FORCE, call `gorename' with the
-`-force' flag."
-  (interactive (list (read-string "New name: " (thing-at-point 'symbol))
-                     current-prefix-arg))
-  (if (not buffer-file-name)
-      (error "Cannot use go-rename on a buffer without a file name"))
-  ;; It's not sufficient to save the current buffer if modified,
-  ;; since if gofmt-before-save is on the before-save-hook,
-  ;; saving will disturb the selected region.
-  (if (buffer-modified-p)
-      (error "Please save the current buffer before invoking go-rename"))
-  ;; Prompt-save all other modified Go buffers, since they might get written.
-  (save-some-buffers nil #'(lambda ()
-              (and (buffer-file-name)
-                   (string= (file-name-extension (buffer-file-name)) ".go"))))
-  (let* ((posflag (format "-offset=%s:#%d"
-                          buffer-file-name
-                          (1- (go--position-bytes (point)))))
-         (env-vars (go-root-and-paths))
-         (goroot-env (concat "GOROOT=" (car env-vars)))
-         (gopath-env (concat "GOPATH=" (mapconcat #'identity (cdr env-vars) ":")))
-         success)
-    (with-current-buffer (get-buffer-create "*go-rename*")
-      (setq buffer-read-only nil)
-      (erase-buffer)
-      (let ((args (append (list go-rename-command nil t nil posflag "-to" new-name) (if force '("-force")))))
-        ;; Log the command to *Messages*, for debugging.
-        (message "Command: %s:" args)
-        (message "Running gorename...")
-        ;; Use dynamic binding to modify/restore the environment
-        (setq success (zerop (let ((process-environment (cl-list* goroot-env gopath-env process-environment)))
-          (apply #'call-process args))))
-      (insert "\n")
-      (compilation-mode)
-      (setq compilation-error-screen-columns nil)
-
-      ;; On success, print the one-line result in the message bar,
-      ;; and hide the *go-rename* buffer.
-      (if success
-          (progn
-            (message "%s" (go--buffer-string-no-trailing-space))
-            (gofmt--kill-error-buffer (current-buffer)))
-        ;; failure
-        (let ((w (display-buffer (current-buffer))))
-          (message "gorename exited")
-          (set-window-point w (point-min)))))))
-
-  ;; Reload the modified files, saving line/col.
-  ;; (Don't restore the point since the text has changed.)
-  ;;
-  ;; TODO(adonovan): should we also do this for all other files
-  ;; that were updated (the tool can print them)?
-  (let ((line (line-number-at-pos))
-        (col (current-column)))
-    (revert-buffer t t t) ; safe, because we just saved it
-    (goto-char (point-min))
-    (forward-line (1- line))
-    (forward-char col)))
-
-
-(defun go--buffer-string-no-trailing-space ()
-  (replace-regexp-in-string "[\t\n ]*\\'"
-                            ""
-                            (buffer-substring (point-min) (point-max))))
-
-(provide 'go-rename)
-
-;;; go-rename.el ends here
