@@ -18,6 +18,7 @@ import {
1818 PULL_REQUEST_DESCRIPTION ,
1919 PUSH_BRANCH
2020} from '../common/settingKeys' ;
21+ import { ITelemetry } from '../common/telemetry' ;
2122import { asPromise , compareIgnoreCase , formatError , promiseWithTimeout } from '../common/utils' ;
2223import { getNonce , IRequestMessage , WebviewViewBase } from '../common/webview' ;
2324import { PREVIOUS_CREATE_METHOD } from '../extensionState' ;
@@ -65,6 +66,7 @@ export class CreatePullRequestViewProviderNew extends WebviewViewBase implements
6566 private _firstLoad : boolean = true ;
6667
6768 constructor (
69+ private readonly telemetry : ITelemetry ,
6870 private readonly model : CreatePullRequestDataModel ,
6971 extensionUri : vscode . Uri ,
7072 private readonly _folderRepositoryManager : FolderRepositoryManager ,
@@ -331,6 +333,16 @@ export class CreatePullRequestViewProviderNew extends WebviewViewBase implements
331333 }
332334 commands . setContext ( contexts . CREATE_PR_PERMISSIONS , viewerPermission ) ;
333335
336+ const defaultTitleAndDescriptionProvider = this . _folderRepositoryManager . getTitleAndDescriptionProvider ( ) ?. title ;
337+ if ( defaultTitleAndDescriptionProvider ) {
338+ /* __GDPR__
339+ "pr.defaultTitleAndDescriptionProvider" : {
340+ "providerTitle" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
341+ }
342+ */
343+ this . telemetry . sendTelemetryEvent ( 'pr.defaultTitleAndDescriptionProvider' , { providerTitle : defaultTitleAndDescriptionProvider } ) ;
344+ }
345+
334346 const params : CreateParamsNew = {
335347 defaultBaseRemote,
336348 defaultBaseBranch,
@@ -347,7 +359,7 @@ export class CreatePullRequestViewProviderNew extends WebviewViewBase implements
347359 labels : this . labels ,
348360 isDraftDefault,
349361 isDarkTheme : vscode . window . activeColorTheme . kind === vscode . ColorThemeKind . Dark ,
350- generateTitleAndDescriptionTitle : this . _folderRepositoryManager . getTitleAndDescriptionProvider ( ) ?. title ,
362+ generateTitleAndDescriptionTitle : defaultTitleAndDescriptionProvider ,
351363 creating : false
352364 } ;
353365
@@ -695,6 +707,7 @@ export class CreatePullRequestViewProviderNew extends WebviewViewBase implements
695707 } ) ;
696708 }
697709
710+ private lastGeneratedTitleAndDescription : { title ?: string , description ?: string , providerTitle : string } | undefined ;
698711 private async getTitleAndDescriptionFromProvider ( token : vscode . CancellationToken ) {
699712 return CreatePullRequestViewProviderNew . withProgress ( async ( ) => {
700713 try {
@@ -710,7 +723,19 @@ export class CreatePullRequestViewProviderNew extends WebviewViewBase implements
710723 } ) ) ;
711724 }
712725
713- return this . _folderRepositoryManager . getTitleAndDescriptionProvider ( ) ?. provider ?. provideTitleAndDescription ( commits , patches , token ) ;
726+ const provider = this . _folderRepositoryManager . getTitleAndDescriptionProvider ( ) ;
727+ const result = await provider ?. provider . provideTitleAndDescription ( commits , patches , token ) ;
728+
729+ if ( provider ) {
730+ this . lastGeneratedTitleAndDescription = { ...result , providerTitle : provider . title } ;
731+ /* __GDPR__
732+ "pr.generatedTitleAndDescription" : {
733+ "providerTitle" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
734+ }
735+ */
736+ this . telemetry . sendTelemetryEvent ( 'pr.generatedTitleAndDescription' , { providerTitle : provider ?. title } ) ;
737+ }
738+ return result ;
714739 } catch ( e ) {
715740 Logger . error ( `Error while generating title and description: ${ e } ` , CreatePullRequestViewProviderNew . ID ) ;
716741 return undefined ;
@@ -780,6 +805,22 @@ export class CreatePullRequestViewProviderNew extends WebviewViewBase implements
780805 } ) ;
781806 }
782807
808+ private checkGeneratedTitleAndDescription ( title : string , description : string ) {
809+ if ( ! this . lastGeneratedTitleAndDescription ) {
810+ return ;
811+ }
812+ const usedGeneratedTitle : boolean = ! ! this . lastGeneratedTitleAndDescription . title && ( ( this . lastGeneratedTitleAndDescription . title === title ) || this . lastGeneratedTitleAndDescription . title ?. includes ( title ) || title ?. includes ( this . lastGeneratedTitleAndDescription . title ) ) ;
813+ const usedGeneratedDescription : boolean = ! ! this . lastGeneratedTitleAndDescription . description && ( ( this . lastGeneratedTitleAndDescription . description === description ) || this . lastGeneratedTitleAndDescription . description ?. includes ( description ) || description ?. includes ( this . lastGeneratedTitleAndDescription . description ) ) ;
814+ /* __GDPR__
815+ "pr.usedGeneratedTitleAndDescription" : {
816+ "providerTitle" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
817+ "usedGeneratedTitle" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
818+ "usedGeneratedDescription" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
819+ }
820+ */
821+ this . telemetry . sendTelemetryEvent ( 'pr.usedGeneratedTitleAndDescription' , { providerTitle : this . lastGeneratedTitleAndDescription . providerTitle , usedGeneratedTitle : usedGeneratedTitle . toString ( ) , usedGeneratedDescription : usedGeneratedDescription . toString ( ) } ) ;
822+ }
823+
783824 private async create ( message : IRequestMessage < CreatePullRequestNew > ) : Promise < void > {
784825 Logger . debug ( `Creating pull request with args ${ JSON . stringify ( message . args ) } ` , CreatePullRequestViewProviderNew . ID ) ;
785826
@@ -858,6 +899,7 @@ export class CreatePullRequestViewProviderNew extends WebviewViewBase implements
858899 progress . report ( { message : vscode . l10n . t ( 'Creating pull request' ) , increment : 70 - totalIncrement } ) ;
859900 totalIncrement += 70 - totalIncrement ;
860901 const head = `${ headRepo . remote . owner } :${ compareBranchName } ` ;
902+ this . checkGeneratedTitleAndDescription ( message . args . title , message . args . body ) ;
861903 createdPR = await this . _folderRepositoryManager . createPullRequest ( { ...message . args , head } ) ;
862904
863905 // Create was cancelled
0 commit comments