From 16193016e5b12868feda70a764ef2b2262198274 Mon Sep 17 00:00:00 2001 From: Will Dean <57733339+wd60622@users.noreply.github.com> Date: Mon, 24 Feb 2025 13:50:05 +0100 Subject: [PATCH] refactor issue navigation (#895) * parameterize query * use the new api --- lua/octo/gh/graphql.lua | 6 +++--- lua/octo/navigation.lua | 33 +++++++++++++++++---------------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/lua/octo/gh/graphql.lua b/lua/octo/gh/graphql.lua index 0e96e8c9..44e2eb9d 100644 --- a/lua/octo/gh/graphql.lua +++ b/lua/octo/gh/graphql.lua @@ -891,9 +891,9 @@ query($endCursor: String) { -- https://docs.github.com/en/graphql/reference/unions#issueorpullrequest M.issue_kind_query = [[ -query { - repository(owner: "%s", name: "%s") { - issueOrPullRequest(number: %d) { +query($owner: String!, $name: String!, $number: Int!) { + repository(owner: $owner, name: $name) { + issueOrPullRequest(number: $number) { __typename } } diff --git a/lua/octo/navigation.lua b/lua/octo/navigation.lua index fd8fa131..157e9d65 100644 --- a/lua/octo/navigation.lua +++ b/lua/octo/navigation.lua @@ -118,22 +118,23 @@ function M.go_to_issue() return end local owner, name = utils.split_repo(repo) - local query = graphql("issue_kind_query", owner, name, number) - gh.run { - args = { "api", "graphql", "-f", string.format("query=%s", query) }, - cb = function(output, stderr) - if stderr and not utils.is_blank(stderr) then - vim.api.nvim_err_writeln(stderr) - elseif output then - local resp = vim.json.decode(output) - local kind = resp.data.repository.issueOrPullRequest.__typename - if kind == "Issue" then - utils.get_issue(number, repo) - elseif kind == "PullRequest" then - utils.get_pull_request(number, repo) - end - end - end, + + gh.api.graphql { + query = graphql "issue_kind_query", + fields = { owner = owner, name = name, number = number }, + jq = ".data.repository.issueOrPullRequest.__typename", + opts = { + cb = gh.create_callback { + failure = vim.api.nvim_err_writeln, + success = function(kind) + if kind == "Issue" then + utils.get_issue(number, repo) + elseif kind == "PullRequest" then + utils.get_pull_request(number, repo) + end + end, + }, + }, } end