From db368bcc4ac1f3339ec62664172d7f9e245d10de Mon Sep 17 00:00:00 2001 From: James Walker Date: Thu, 16 Apr 2020 21:16:17 -0400 Subject: [PATCH] feat: completions for gh --- home/.zsh/custom/plugins/gh/_gh | 284 ++++++++++++++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 home/.zsh/custom/plugins/gh/_gh diff --git a/home/.zsh/custom/plugins/gh/_gh b/home/.zsh/custom/plugins/gh/_gh new file mode 100644 index 0000000..15d071b --- /dev/null +++ b/home/.zsh/custom/plugins/gh/_gh @@ -0,0 +1,284 @@ +#compdef _gh gh + + +function _gh { + local -a commands + + _arguments -C \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' \ + '--version[Show gh version]' \ + "1: :->cmnds" \ + "*::arg:->args" + + case $state in + cmnds) + commands=( + "completion:Generate shell completion scripts" + "help:Help about any command" + "issue:Create and view issues" + "pr:Create, view, and checkout pull requests" + "repo:Create, clone, fork, and view repositories" + ) + _describe "command" commands + ;; + esac + + case "$words[1]" in + completion) + _gh_completion + ;; + help) + _gh_help + ;; + issue) + _gh_issue + ;; + pr) + _gh_pr + ;; + repo) + _gh_repo + ;; + esac +} + +function _gh_completion { + _arguments \ + '(-s --shell)'{-s,--shell}'[Shell type: {bash|zsh|fish|powershell}]:' \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + +function _gh_help { + _arguments \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + + +function _gh_issue { + local -a commands + + _arguments -C \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' \ + "1: :->cmnds" \ + "*::arg:->args" + + case $state in + cmnds) + commands=( + "create:Create a new issue" + "list:List and filter issues in this repository" + "status:Show status of relevant issues" + "view:View an issue" + ) + _describe "command" commands + ;; + esac + + case "$words[1]" in + create) + _gh_issue_create + ;; + list) + _gh_issue_list + ;; + status) + _gh_issue_status + ;; + view) + _gh_issue_view + ;; + esac +} + +function _gh_issue_create { + _arguments \ + '(-b --body)'{-b,--body}'[Supply a body. Will prompt for one otherwise.]:' \ + '(-t --title)'{-t,--title}'[Supply a title. Will prompt for one otherwise.]:' \ + '(-w --web)'{-w,--web}'[Open the browser to create an issue]' \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + +function _gh_issue_list { + _arguments \ + '(-a --assignee)'{-a,--assignee}'[Filter by assignee]:' \ + '(-A --author)'{-A,--author}'[Filter by author]:' \ + '(*-l *--label)'{\*-l,\*--label}'[Filter by label]:' \ + '(-L --limit)'{-L,--limit}'[Maximum number of issues to fetch]:' \ + '(-s --state)'{-s,--state}'[Filter by state: {open|closed|all}]:' \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + +function _gh_issue_status { + _arguments \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + +function _gh_issue_view { + _arguments \ + '(-w --web)'{-w,--web}'[Open issue in browser]' \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + + +function _gh_pr { + local -a commands + + _arguments -C \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' \ + "1: :->cmnds" \ + "*::arg:->args" + + case $state in + cmnds) + commands=( + "checkout:Check out a pull request in Git" + "create:Create a pull request" + "list:List and filter pull requests in this repository" + "status:Show status of relevant pull requests" + "view:View a pull request in the browser" + ) + _describe "command" commands + ;; + esac + + case "$words[1]" in + checkout) + _gh_pr_checkout + ;; + create) + _gh_pr_create + ;; + list) + _gh_pr_list + ;; + status) + _gh_pr_status + ;; + view) + _gh_pr_view + ;; + esac +} + +function _gh_pr_checkout { + _arguments \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + +function _gh_pr_create { + _arguments \ + '(-B --base)'{-B,--base}'[The branch into which you want your code merged]:' \ + '(-b --body)'{-b,--body}'[Supply a body. Will prompt for one otherwise.]:' \ + '(-d --draft)'{-d,--draft}'[Mark pull request as a draft]' \ + '(-f --fill)'{-f,--fill}'[Do not prompt for title/body and just use commit info]' \ + '(-t --title)'{-t,--title}'[Supply a title. Will prompt for one otherwise.]:' \ + '(-w --web)'{-w,--web}'[Open the web browser to create a pull request]' \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + +function _gh_pr_list { + _arguments \ + '(-a --assignee)'{-a,--assignee}'[Filter by assignee]:' \ + '(-B --base)'{-B,--base}'[Filter by base branch]:' \ + '(*-l *--label)'{\*-l,\*--label}'[Filter by label]:' \ + '(-L --limit)'{-L,--limit}'[Maximum number of items to fetch]:' \ + '(-s --state)'{-s,--state}'[Filter by state: {open|closed|merged|all}]:' \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + +function _gh_pr_status { + _arguments \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + +function _gh_pr_view { + _arguments \ + '(-w --web)'{-w,--web}'[Open pull request in browser]' \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + + +function _gh_repo { + local -a commands + + _arguments -C \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' \ + "1: :->cmnds" \ + "*::arg:->args" + + case $state in + cmnds) + commands=( + "clone:Clone a repository locally" + "create:Create a new repository" + "fork:Create a fork of a repository" + "view:View a repository in the browser" + ) + _describe "command" commands + ;; + esac + + case "$words[1]" in + clone) + _gh_repo_clone + ;; + create) + _gh_repo_create + ;; + fork) + _gh_repo_fork + ;; + view) + _gh_repo_view + ;; + esac +} + +function _gh_repo_clone { + _arguments \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + +function _gh_repo_create { + _arguments \ + '(-d --description)'{-d,--description}'[Description of repository]:' \ + '--enable-issues[Enable issues in the new repository]' \ + '--enable-wiki[Enable wiki in the new repository]' \ + '(-h --homepage)'{-h,--homepage}'[Repository home page URL]:' \ + '--public[Make the new repository public]' \ + '(-t --team)'{-t,--team}'[The name of the organization team to be granted access]:' \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + +function _gh_repo_fork { + _arguments \ + '--clone[Clone fork: {true|false|prompt}]' \ + '--remote[Add remote for fork: {true|false|prompt}]' \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} + +function _gh_repo_view { + _arguments \ + '(-w --web)'{-w,--web}'[Open repository in browser]' \ + '--help[Show help for command]' \ + '(-R --repo)'{-R,--repo}'[Select another repository using the `OWNER/REPO` format]:' +} +