From 5c261e231835cda83b5206b910d8f53800149148 Mon Sep 17 00:00:00 2001 From: Toshiya Doi Date: Wed, 8 Apr 2020 16:26:03 +0900 Subject: [PATCH] Give a color to reviewer states --- command/pr.go | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/command/pr.go b/command/pr.go index b6cb34366..1aeaa77e2 100644 --- a/command/pr.go +++ b/command/pr.go @@ -378,20 +378,42 @@ func printPrPreview(out io.Writer, pr *api.PullRequest) error { } // -const requestedReviewState = "REQUESTED" +const ( + requestedReviewState = "REQUESTED" + approvedReviewState = "APPROVED" + changesRequestedReviewState = "CHANGES_REQUESTED" + commentedReviewState = "COMMENTED" +) type reviewerState struct { Name string State string } +// colorFuncForReviewerState returns a color function for a reviewer state +func colorFuncForReviewerState(state string) func(string) string { + switch state { + case requestedReviewState: + return utils.Yellow + case approvedReviewState: + return utils.Green + case changesRequestedReviewState: + return utils.Red + case commentedReviewState: + return func(str string) string { return str } // Do nothing + default: + return nil + } +} + // prReviewerList generates a reviewer list with their last state func prReviewerList(pr api.PullRequest) string { reviewerStates := parseReviewers(pr) reviewers := make([]string, 0, len(reviewerStates)) for _, reviewer := range reviewerStates { - reviewers = append(reviewers, fmt.Sprintf("%s (%s)", reviewer.Name, strings.Title(strings.ToLower(reviewer.State)))) + stateColorFunc := colorFuncForReviewerState(reviewer.State) + reviewers = append(reviewers, fmt.Sprintf("%s (%s)", reviewer.Name, stateColorFunc(strings.ReplaceAll(strings.Title(strings.ToLower(reviewer.State)), "_", " ")))) } reviewerList := strings.Join(reviewers, ", ") @@ -406,7 +428,7 @@ func parseReviewers(pr api.PullRequest) map[string]*reviewerState { if review.Author.Login != pr.Author.Login { reviewerStates[review.Author.Login] = &reviewerState{ Name: review.Author.Login, - State: strings.Title(strings.ToLower(review.State)), + State: review.State, } } }