@@ -53,6 +53,7 @@ export async function activate(context: vscode.ExtensionContext) {
53
53
'Merge request diff comments' ,
54
54
) ;
55
55
context . subscriptions . push ( commentController ) ;
56
+ const commentResolveData : { [ key : string ] : boolean } = { } ;
56
57
57
58
commentController . commentingRangeProvider = {
58
59
provideCommentingRanges : async (
@@ -65,12 +66,12 @@ export async function activate(context: vscode.ExtensionContext) {
65
66
66
67
try {
67
68
const params = new URLSearchParams ( decodeURIComponent ( document . uri . query ) ) ;
68
- const iid = params . get ( 'mr ' ) || `` ;
69
+ const mrId = params . get ( 'id ' ) || `` ;
69
70
let param : IFileDiffParam = {
70
71
path : params . get ( 'path' ) ?? `` ,
71
72
base : params . get ( 'leftSha' ) ?? `` ,
72
73
compare : params . get ( 'rightSha' ) ?? `` ,
73
- mergeRequestId : iid ?? `` ,
74
+ mergeRequestId : mrId ?? `` ,
74
75
} ;
75
76
const {
76
77
data : { diffLines } ,
@@ -83,7 +84,9 @@ export async function activate(context: vscode.ExtensionContext) {
83
84
84
85
const [ left , right ] = getDiffLineNumber ( i . text ) ;
85
86
const [ start , end ] = params . get ( 'right' ) === `true` ? right : left ;
86
- result . push ( new vscode . Range ( start , 0 , end , 0 ) ) ;
87
+ if ( start > 0 ) {
88
+ result . push ( new vscode . Range ( start - 1 , 0 , end , 0 ) ) ;
89
+ }
87
90
return result ;
88
91
} , [ ] as vscode . Range [ ] ) ;
89
92
return ret ;
@@ -241,10 +244,10 @@ export async function activate(context: vscode.ExtensionContext) {
241
244
async ( file : IFileNode , mr : IMRData ) => {
242
245
const headUri = vscode . Uri . parse ( file . path , false ) . with ( {
243
246
scheme : MRUriScheme ,
244
- query : `leftSha=${ file . oldSha } &rightSha=${ file . newSha } &path=${ file . path } &right=true&mr=${ mr . iid } ` ,
247
+ query : `leftSha=${ file . oldSha } &rightSha=${ file . newSha } &path=${ file . path } &right=true&mr=${ mr . iid } &id= ${ mr . id } ` ,
245
248
} ) ;
246
249
const parentUri = headUri . with ( {
247
- query : `leftSha=${ file . oldSha } &rightSha=${ file . newSha } &path=${ file . path } &right=false&mr=${ mr . iid } ` ,
250
+ query : `leftSha=${ file . oldSha } &rightSha=${ file . newSha } &path=${ file . path } &right=false&mr=${ mr . iid } &id= ${ mr . id } ` ,
248
251
} ) ;
249
252
await vscode . commands . executeCommand (
250
253
`vscode.diff` ,
@@ -254,43 +257,49 @@ export async function activate(context: vscode.ExtensionContext) {
254
257
{ preserveFocus : true } ,
255
258
) ;
256
259
260
+ const identifier = `${ mr . iid } /${ file . path } ` ;
261
+ if ( commentResolveData [ identifier ] ) {
262
+ return ;
263
+ }
264
+
257
265
try {
258
266
const commentResp = await codingSrv . getMRComments ( mr . iid ) ;
259
267
260
- ( commentResp . data as IDiffComment [ ] [ ] )
261
- . filter ( ( i ) => {
262
- const first = i [ 0 ] ;
263
- return ! first . outdated && first . path === file . path ;
264
- } , [ ] )
265
- . forEach ( ( i ) => {
266
- const root = i [ 0 ] ;
267
- const isLeft = root . change_type === 2 ;
268
- const isRight = root . change_type === 1 ;
268
+ const validComments = ( commentResp . data as IDiffComment [ ] [ ] ) . filter ( ( i ) => {
269
+ const first = i [ 0 ] ;
270
+ return ! first . outdated && first . path === file . path ;
271
+ } , [ ] ) ;
272
+
273
+ validComments . forEach ( ( i ) => {
274
+ const root = i [ 0 ] ;
275
+ const isLeft = root . change_type === 2 ;
276
+ const isRight = root . change_type === 1 ;
269
277
270
- const rootLine = root . diffFile . diffLines [ root . diffFile . diffLines . length - 1 ] ;
271
- const lineNum = isLeft ? rootLine . leftNo - 1 : rootLine . rightNo - 1 ;
272
- const range = new vscode . Range ( lineNum - 1 , 0 , lineNum - 1 , 0 ) ;
278
+ const rootLine = root . diffFile . diffLines [ root . diffFile . diffLines . length - 1 ] ;
279
+ const lineNum = isLeft ? rootLine . leftNo - 1 : rootLine . rightNo - 1 ;
280
+ const range = new vscode . Range ( lineNum - 1 , 0 , lineNum - 1 , 0 ) ;
273
281
274
- const commentList : vscode . Comment [ ] = i . map ( ( c ) => {
275
- const body = new vscode . MarkdownString ( tdService . turndown ( c . content ) ) ;
276
- body . isTrusted = true ;
277
- const comment : vscode . Comment = {
278
- mode : vscode . CommentMode . Preview ,
279
- body,
280
- author : {
281
- name : `${ c . author . name } (${ c . author . global_key } )` ,
282
- iconPath : vscode . Uri . parse ( c . author . avatar , false ) ,
283
- } ,
284
- } ;
285
- return comment ;
286
- } ) ;
287
- const commentThread = commentController . createCommentThread (
288
- isRight ? headUri : parentUri ,
289
- range ,
290
- commentList ,
291
- ) ;
292
- commentThread . collapsibleState = vscode . CommentThreadCollapsibleState . Expanded ;
282
+ const commentList : vscode . Comment [ ] = i . map ( ( c ) => {
283
+ const body = new vscode . MarkdownString ( tdService . turndown ( c . content ) ) ;
284
+ body . isTrusted = true ;
285
+ const comment : vscode . Comment = {
286
+ mode : vscode . CommentMode . Preview ,
287
+ body,
288
+ author : {
289
+ name : `${ c . author . name } (${ c . author . global_key } )` ,
290
+ iconPath : vscode . Uri . parse ( c . author . avatar , false ) ,
291
+ } ,
292
+ } ;
293
+ return comment ;
293
294
} ) ;
295
+ const commentThread = commentController . createCommentThread (
296
+ isRight ? headUri : parentUri ,
297
+ range ,
298
+ commentList ,
299
+ ) ;
300
+ commentThread . collapsibleState = vscode . CommentThreadCollapsibleState . Expanded ;
301
+ } ) ;
302
+ commentResolveData [ identifier ] = true ;
294
303
} finally {
295
304
}
296
305
} ,
@@ -300,16 +309,23 @@ export async function activate(context: vscode.ExtensionContext) {
300
309
context . subscriptions . push (
301
310
vscode . commands . registerCommand (
302
311
`codingPlugin.diff.createComment` ,
303
- ( reply : vscode . CommentReply ) => {
312
+ async ( reply : vscode . CommentReply ) => {
304
313
replyNote ( reply , context ) ;
305
314
} ,
306
315
) ,
307
316
) ;
308
317
context . subscriptions . push (
309
318
vscode . commands . registerCommand (
310
319
`codingPlugin.diff.replyComment` ,
311
- ( reply : vscode . CommentReply ) => {
320
+ async ( reply : vscode . CommentReply ) => {
312
321
replyNote ( reply , context ) ;
322
+ const params = new URLSearchParams ( decodeURIComponent ( reply . thread . uri . query ) ) ;
323
+ const isRight = params . get ( 'right' ) === `true` ;
324
+ const noteable_id = params . get ( 'id' ) ; // mr index id
325
+ const commitId = isRight ? params . get ( 'rightSha' ) : params . get ( 'leftSha' ) ;
326
+ const content = encodeURIComponent ( reply . text ) ;
327
+ const noteable_type = `MergeRequestBean` ;
328
+ const change_type = isRight ? 1 : 2 ;
313
329
} ,
314
330
) ,
315
331
) ;
0 commit comments