ivy-richまわりの不具合

ivy-richのivy-rich--switch-buffer-root-and-filename の動作がどうも怪しく、ivy-rich-switch-buffer-pathで空の文字列が出力されるためにバッファのパスが表示されない。
なので、関数を再定義したというわけ。

(defun ivy-rich--switch-buffer-root-and-filename (candidate)
  (let* ((buffer (get-buffer candidate))
         (truenamep t))
    (cl-destructuring-bind
        (filename directory mode)
        (ivy-rich--local-values buffer
                                '(buffer-file-name default-directory
                                                   major-mode))
      ;; Only make sense when `filename' and `root' are both not `nil'
      (unless (and filename
                   directory
                   (if (file-remote-p filename) ivy-rich-parse-remote-buffer t)
                   (not (eq mode 'dired-mode)))
        (setq truenamep nil))
      (when (and truenamep
                 (ivy-rich-switch-buffer-in-project-p candidate))
        ;; Find the project root directory or `default-directory'
        (setq directory (cond ((bound-and-true-p projectile-mode)
                               (or (ivy-rich--local-values
                                    buffer 'projectile-project-root)
                                   (with-current-buffer buffer
                                     (projectile-project-root))))
                              ((require 'project nil t)
                               (with-current-buffer buffer
                                 (setq truenamep nil)
                                 (car (project-roots (project-current))))))))
      (if truenamep
          (progn
            (setq filename (or (ivy-rich--local-values buffer
                                                       'buffer-file-truename)
                               (file-truename filename)))
            (cons (expand-file-name directory)
                  (expand-file-name filename)))))))

(defun ivy-rich-switch-buffer-path (candidate)
  (if-let ((result (ivy-rich--switch-buffer-root-and-filename candidate)))
      (cl-destructuring-bind (root . filename) result
        (cond
         ;; Case: absolute
         ((or (memq ivy-rich-path-style '(full absolute))
              (and (null ivy-rich-parse-remote-file-path)
                   (or (file-remote-p root))))
          (or filename root))
         ;; Case: abbreviate
         ((memq ivy-rich-path-style '(abbreviate abbrev))
          (abbreviate-file-name (or filename root)))
         ;; Case: relative
         ((or (eq ivy-rich-path-style 'relative)
              t)            ; make 'relative default
          (if (and filename root)
              (let ((relative-path (string-remove-prefix root filename)))
                (if (string= relative-path candidate)
                    (concat
                     (file-name-as-directory
                      (file-name-nondirectory
                       (directory-file-name (file-name-directory filename))))
                     relative-path)
                  relative-path))
            ""))))
    ""))