@@ -130,9 +130,16 @@ func GenerateLink(repo, commit, file string, line int64) string {
130130 return repo [:len (repo )- 4 ] + "/commits/" + commit
131131
132132 case providerAzure :
133- baseLink := repo + "/commit/" + commit + "/" + file
133+ // Azure Repos format: ?path=/file&version=GC<commit>&line=N&lineEnd=N+1&lineStartColumn=1
134+ // where GC prefix stands for "Git Commit" (vs GB for Git Branch, GT for Git Tag)
135+ baseLink := repo + "?version=GC" + commit
136+ if file != "" {
137+ baseLink = repo + "?path=/" + file + "&version=GC" + commit
138+ }
134139 if line > 0 {
135- baseLink += "?line=" + strconv .FormatInt (line , 10 )
140+ lineStr := strconv .FormatInt (line , 10 )
141+ lineEndStr := strconv .FormatInt (line + 1 , 10 )
142+ baseLink += "&line=" + lineStr + "&lineEnd=" + lineEndStr + "&lineStartColumn=1"
136143 }
137144 return baseLink
138145
@@ -211,9 +218,13 @@ func UpdateLinkLineNumber(ctx context.Context, link string, newLine int64) strin
211218 return link
212219
213220 case providerAzure :
214- // For Azure, line numbers are appended as ?line=<number>.
221+ // For Azure, line numbers use query parameters: ?line=N&lineEnd=N+1&lineStartColumn=1
215222 query := parsedURL .Query ()
216- query .Set ("line" , strconv .FormatInt (newLine , 10 ))
223+ lineStr := strconv .FormatInt (newLine , 10 )
224+ lineEndStr := strconv .FormatInt (newLine + 1 , 10 )
225+ query .Set ("line" , lineStr )
226+ query .Set ("lineEnd" , lineEndStr )
227+ query .Set ("lineStartColumn" , "1" )
217228 parsedURL .RawQuery = query .Encode ()
218229
219230 case providerGithub , providerGitlab :
0 commit comments