       (with-current-buffer outbuf
         (split-string (buffer-substring-no-properties (point-min) (point-max)) "\n")))))
 
+(defun godef--successful-p (output)
+  (not (or (string= "-" output)
+           (string= "godef: no identifier found" output)
+           (go--string-prefix-p "godef: no declaration found for " output)
+           (go--string-prefix-p "error finding import path for " output))))
+
+(defun godef--error (output)
+  (cond
+   ((godef--successful-p output)
+    nil)
+   ((string= "-" output)
+    "godef: expression is not defined anywhere")
+   (t
+    output)))
+
 (defun godef-describe (point)
   "Describe the expression at POINT."
   (interactive "d")

  (interactive "d")
  (condition-case nil
      (let ((file (car (godef--call point))))
        (cond
         ((string= "-" file)
          (message "godef: expression is not defined anywhere"))
         ((string= "godef: no identifier found" file)
          (message "%s" file))
         ((go--string-prefix-p "godef: no declaration found for " file)
          (message "%s" file))
         ((go--string-prefix-p "error finding import path for " file)
          (message "%s" file))
         (t
          (push-mark)
          (ring-insert find-tag-marker-ring (point-marker))
          (godef--find-file-line-column file other-window))))
    (file-error (message "Could not run godef binary"))))

(defun godef-jump-other-window (point)


;;;###autoload
(defun godoc (query)
  "Show Go documentation for a query, much like M-x man."
  (interactive (list (godoc--read-query)))
  (unless (string= query "")
    (set-process-sentinel
