66import * as marked from 'marked' ;
77import 'url-search-params-polyfill' ;
88import * as vscode from 'vscode' ;
9- import { PullRequestDefaults } from '../github/folderRepositoryManager' ;
10- import { GithubItemStateEnum , User } from '../github/interface' ;
11- import { IssueModel } from '../github/issueModel' ;
12- import { PullRequestModel } from '../github/pullRequestModel' ;
13- import { RepositoriesManager } from '../github/repositoriesManager' ;
14- import { getIssueNumberLabelFromParsed , ISSUE_OR_URL_EXPRESSION , makeLabel , parseIssueExpressionOutput } from '../github/utils' ;
9+ import Logger from '../common/logger' ;
1510import { CODE_PERMALINK , findCodeLinkLocally } from '../issues/issueLinkLookup' ;
16- import Logger from './logger' ;
11+ import { PullRequestDefaults } from './folderRepositoryManager' ;
12+ import { GithubItemStateEnum , User } from './interface' ;
13+ import { IssueModel } from './issueModel' ;
14+ import { PullRequestModel } from './pullRequestModel' ;
15+ import { RepositoriesManager } from './repositoriesManager' ;
16+ import { getIssueNumberLabelFromParsed , ISSUE_OR_URL_EXPRESSION , makeLabel , parseIssueExpressionOutput , UnsatisfiedChecks } from './utils' ;
1717
1818function getIconString ( issue : IssueModel ) {
1919 switch ( issue . state ) {
@@ -155,6 +155,7 @@ export async function issueMarkdown(
155155 context : vscode . ExtensionContext ,
156156 repositoriesManager : RepositoriesManager ,
157157 commentNumber ?: number ,
158+ prChecks ?: UnsatisfiedChecks
158159) : Promise < vscode . MarkdownString > {
159160 const markdown : vscode . MarkdownString = new vscode . MarkdownString ( undefined , true ) ;
160161 markdown . supportHtml = true ;
@@ -184,9 +185,9 @@ export async function issueMarkdown(
184185 body = await findCodeLinksInIssue ( body , repositoriesManager ) ;
185186
186187 markdown . appendMarkdown ( body + ' \n' ) ;
187- markdown . appendMarkdown ( ' \n' ) ;
188188
189189 if ( issue . item . labels . length > 0 ) {
190+ markdown . appendMarkdown ( ' \n' ) ;
190191 issue . item . labels . forEach ( label => {
191192 markdown . appendMarkdown (
192193 `[${ makeLabel ( label ) } ](https://github.com/${ ownerName } /labels/${ encodeURIComponent (
@@ -216,6 +217,15 @@ export async function issueMarkdown(
216217 }
217218 }
218219 }
220+
221+ if ( prChecks ) {
222+ const statusMessage = getStatusDecoration ( prChecks ) ?. tooltip ;
223+ if ( statusMessage ) {
224+ markdown . appendMarkdown ( ' \r\n\r\n' ) ;
225+ markdown . appendMarkdown ( `_${ statusMessage } _` ) ;
226+ }
227+ }
228+
219229 return markdown ;
220230}
221231
@@ -286,4 +296,45 @@ export class PlainTextRenderer extends marked.Renderer {
286296 override link ( href : string , title : string , text : string ) : string {
287297 return text + ' ' ;
288298 }
299+ }
300+
301+ export function getStatusDecoration ( status : UnsatisfiedChecks ) : vscode . FileDecoration2 | undefined {
302+ if ( ( status & UnsatisfiedChecks . CIFailed ) && ( status & UnsatisfiedChecks . ReviewRequired ) ) {
303+ return {
304+ propagate : false ,
305+ badge : new vscode . ThemeIcon ( 'close' , new vscode . ThemeColor ( 'list.errorForeground' ) ) ,
306+ tooltip : 'Review required and some checks have failed'
307+ } ;
308+ } else if ( status & UnsatisfiedChecks . CIFailed ) {
309+ return {
310+ propagate : false ,
311+ badge : new vscode . ThemeIcon ( 'close' , new vscode . ThemeColor ( 'list.errorForeground' ) ) ,
312+ tooltip : 'Some checks have failed'
313+ } ;
314+ } else if ( status & UnsatisfiedChecks . ChangesRequested ) {
315+ return {
316+ propagate : false ,
317+ badge : new vscode . ThemeIcon ( 'request-changes' , new vscode . ThemeColor ( 'list.errorForeground' ) ) ,
318+ tooltip : 'Changes requested'
319+ } ;
320+ } else if ( status & UnsatisfiedChecks . CIPending ) {
321+ return {
322+ propagate : false ,
323+ badge : new vscode . ThemeIcon ( 'sync' , new vscode . ThemeColor ( 'list.warningForeground' ) ) ,
324+ tooltip : 'Checks pending'
325+ } ;
326+ } else if ( status & UnsatisfiedChecks . ReviewRequired ) {
327+ return {
328+ propagate : false ,
329+ badge : new vscode . ThemeIcon ( 'circle-filled' , new vscode . ThemeColor ( 'list.warningForeground' ) ) ,
330+ tooltip : 'Review required'
331+ } ;
332+ } else if ( status === UnsatisfiedChecks . None ) {
333+ return {
334+ propagate : false ,
335+ badge : new vscode . ThemeIcon ( 'check-all' , new vscode . ThemeColor ( 'issues.open' ) ) ,
336+ tooltip : 'All checks passed'
337+ } ;
338+ }
339+
289340}
0 commit comments