Skip to content

Commit

Permalink
pr search with predefined queries
Browse files Browse the repository at this point in the history
  • Loading branch information
blahgeek committed May 11, 2023
1 parent 3f8b11c commit 6aacbb9
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 25 deletions.
1 change: 1 addition & 0 deletions pr-review-listview.el
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
;;; Code:

(require 'tabulated-list)
(require 'pr-review-common)


(defface pr-review-listview-unread-face
Expand Down
49 changes: 48 additions & 1 deletion pr-review-search.el
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

;;; Code:

(require 'pr-review-common)
(require 'pr-review-listview)
(require 'pr-review-api)

Expand Down Expand Up @@ -102,18 +103,64 @@
(tabulated-list-init-header)
(message (format "Search result refreshed, %d items." (length items)))))

(defcustom pr-review-search-predefined-queries
'(("is:pr archived:false author:@me is:open" . "Created")
("is:pr archived:false assignee:@me is:open" . "Assigned")
("is:pr archived:false mentions:@me is:open" . "Mentioned")
("is:pr archived:false review-requested:@me is:open" . "Review requests"))
"Predefined queries for `pr-review-search'. List of (query . name)."
:type '(alist :key-type string :value-type string)
:group 'pr-review)

(defcustom pr-review-search-default-query nil
"Default query for `pr-review-search-open'."
:type 'string
:group 'pr-review)


(defun pr-review--search-read-query ()
"Read query for search."
(let ((completion-extra-properties
(list :annotation-function
(lambda (q) (concat " " (alist-get q pr-review-search-predefined-queries nil nil 'equal))))))
(completing-read "Search GitHub> "
pr-review-search-predefined-queries
nil
nil ;; no require-match
pr-review-search-default-query)))

;;;###autoload
(defun pr-review-search (query)
"Search PRs using a custom QUERY and list result in buffer.
See github docs for syntax of QUERY.
When called interactively, you will be asked to enter the QUERY."
(interactive (list (read-string "Search GitHub> " "type:pr sort:updated author:@me state:open")))
(interactive (list (pr-review--search-read-query)))
(with-current-buffer (get-buffer-create "*pr-review search*")
(pr-review-search-mode)
(setq-local pr-review--search-query query)
(pr-review--search-refresh)
(tabulated-list-print)
(switch-to-buffer (current-buffer))))

;;;###autoload
(defun pr-review-search-open (query)
"Search PRs using a custom QUERY and open one of them.
See github docs for syntax of QUERY.
When called interactively, you will be asked to enter the QUERY."
(interactive (list (pr-review--search-read-query)))
(let* ((prs (pr-review--search-prs query))
(prs-alist
(mapcar
(lambda (pr)
(let-alist pr
(cons (format "%s/%s: [%s] %s" .repository.nameWithOwner .number .state .title)
(list .repository.owner.login .repository.name .number))))
prs))
(selected-pr (completing-read "Select:" prs-alist nil 'require-match)))
(when-let ((selected-value (alist-get selected-pr prs-alist nil nil 'equal)))
(apply #'pr-review-open selected-value))))



(provide 'pr-review-search)
;;; pr-review-search.el ends here
24 changes: 0 additions & 24 deletions pr-review.el
Original file line number Diff line number Diff line change
Expand Up @@ -259,30 +259,6 @@ This function is the same as `pr-review',
but it can be used in `browse-url-handlers' with `pr-review-url-parse'."
(pr-review url new-window))

(defcustom pr-review-search-default-query "type:pr sort:updated author:@me state:open"
"Default query for `pr-review-search-open'."
:type 'string
:group 'pr-review)

;;;###autoload
(defun pr-review-search-open (query)
"Search PRs using a custom QUERY and open one of them.
See github docs for syntax of QUERY.
When called interactively, you will be asked to enter the QUERY."
(interactive (list (read-string "Search GitHub> " pr-review-search-default-query)))
(let* ((prs (pr-review--search-prs query))
(prs-alist (mapcar (lambda (pr)
(let-alist pr
(cons (format "%s/%s: [%s] %s"
.repository.nameWithOwner .number .state .title)
.url)))
prs))
(selected-pr (completing-read "Select:"
(mapcar #'car prs-alist)
nil 'require-match)))
(when-let ((selected-url (alist-get selected-pr prs-alist nil nil 'equal)))
(pr-review-open-url selected-url))))


(provide 'pr-review)
;;; pr-review.el ends here

0 comments on commit 6aacbb9

Please sign in to comment.