mirror of
https://github.com/golang/go.git
synced 2024-09-22 02:48:50 +00:00
misc/emacs: add new function godoc-at-point
LGTM=adonovan R=adonovan, ruiu CC=golang-codereviews https://golang.org/cl/107160048
This commit is contained in:
parent
2005bea7fd
commit
933f272e71
@ -762,7 +762,7 @@ you save any file, kind of defeating the point of autoloading."
|
|||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun godoc (query)
|
(defun godoc (query)
|
||||||
"Show go documentation for a query, much like M-x man."
|
"Show Go documentation for a query, much like M-x man."
|
||||||
(interactive (list (godoc--read-query)))
|
(interactive (list (godoc--read-query)))
|
||||||
(unless (string= query "")
|
(unless (string= query "")
|
||||||
(set-process-sentinel
|
(set-process-sentinel
|
||||||
@ -771,6 +771,31 @@ you save any file, kind of defeating the point of autoloading."
|
|||||||
'godoc--buffer-sentinel)
|
'godoc--buffer-sentinel)
|
||||||
nil))
|
nil))
|
||||||
|
|
||||||
|
(defun godoc-at-point (point)
|
||||||
|
"Show Go documentation for the identifier at POINT.
|
||||||
|
|
||||||
|
`godoc-at-point' requires godef to work.
|
||||||
|
|
||||||
|
Due to a limitation in godoc, it is not possible to differentiate
|
||||||
|
between functions and methods, which may cause `godoc-at-point'
|
||||||
|
to display more documentation than desired."
|
||||||
|
;; TODO(dominikh): Support executing godoc-at-point on a package
|
||||||
|
;; name.
|
||||||
|
(interactive "d")
|
||||||
|
(condition-case nil
|
||||||
|
(let* ((output (godef--call point))
|
||||||
|
(file (car output))
|
||||||
|
(name-parts (split-string (cadr output) " "))
|
||||||
|
(first (car name-parts)))
|
||||||
|
(if (not (godef--successful-p file))
|
||||||
|
(message "%s" (godef--error file))
|
||||||
|
(godoc (format "%s %s"
|
||||||
|
(file-name-directory file)
|
||||||
|
(if (or (string= first "type") (string= first "const"))
|
||||||
|
(cadr name-parts)
|
||||||
|
(car name-parts))))))
|
||||||
|
(file-error (message "Could not run godef binary"))))
|
||||||
|
|
||||||
(defun go-goto-imports ()
|
(defun go-goto-imports ()
|
||||||
"Move point to the block of imports.
|
"Move point to the block of imports.
|
||||||
|
|
||||||
@ -1039,6 +1064,21 @@ description at POINT."
|
|||||||
(with-current-buffer outbuf
|
(with-current-buffer outbuf
|
||||||
(split-string (buffer-substring-no-properties (point-min) (point-max)) "\n")))))
|
(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)
|
(defun godef-describe (point)
|
||||||
"Describe the expression at POINT."
|
"Describe the expression at POINT."
|
||||||
(interactive "d")
|
(interactive "d")
|
||||||
@ -1054,19 +1094,11 @@ description at POINT."
|
|||||||
(interactive "d")
|
(interactive "d")
|
||||||
(condition-case nil
|
(condition-case nil
|
||||||
(let ((file (car (godef--call point))))
|
(let ((file (car (godef--call point))))
|
||||||
(cond
|
(if (not (godef--successful-p file))
|
||||||
((string= "-" file)
|
(message "%s" (godef--error 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)
|
(push-mark)
|
||||||
(ring-insert find-tag-marker-ring (point-marker))
|
(ring-insert find-tag-marker-ring (point-marker))
|
||||||
(godef--find-file-line-column file other-window))))
|
(godef--find-file-line-column file other-window)))
|
||||||
(file-error (message "Could not run godef binary"))))
|
(file-error (message "Could not run godef binary"))))
|
||||||
|
|
||||||
(defun godef-jump-other-window (point)
|
(defun godef-jump-other-window (point)
|
||||||
|
Loading…
Reference in New Issue
Block a user