diff --git a/extensions/git-extended/src/common/models/diffHunk.ts b/extensions/git-extended/src/common/models/diffHunk.ts new file mode 100644 index 00000000000..cf553ee2e3a --- /dev/null +++ b/extensions/git-extended/src/common/models/diffHunk.ts @@ -0,0 +1,16 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { DiffLine } from './diffLine'; + +export class DiffHunk { + public Lines: DiffLine[] = []; + + constructor( + public oldLineNumber: number, + public newLineNumber: number, + public diffLine: number + ) { } +} \ No newline at end of file diff --git a/extensions/git-extended/src/common/models/diffLine.ts b/extensions/git-extended/src/common/models/diffLine.ts new file mode 100644 index 00000000000..6a14a19c4b8 --- /dev/null +++ b/extensions/git-extended/src/common/models/diffLine.ts @@ -0,0 +1,46 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export enum DiffChangeType { + None, + Add, + Delete, + Control +} + +export class DiffLine { + // Was the line added, deleted or unchanged. + type: DiffChangeType; + + // Gets the old 1-based line number. + oldLineNumber: number = -1; + + // Gets the new 1-based line number. + newLineNumber: number = -1; + + // Gets the unified diff line number where the first chunk header is line 0. + diffLineNumber: number = -1; + + // Gets the content of the diff line (including +, - or space). + content: String; + + constructor(type: DiffChangeType, oldLineNumber: number, newLineNumber: number, diffLineNumber: number, content: string) { + this.type = type; + this.oldLineNumber = oldLineNumber; + this.newLineNumber = newLineNumber; + this.diffLineNumber = diffLineNumber; + this.content = content; + } +} + +export function getDiffChangeType(text: string) { + let c = text[0]; + switch (c) { + case ' ': return DiffChangeType.None; + case '+': return DiffChangeType.Add; + case '-': return DiffChangeType.Delete; + case '\\': return DiffChangeType.Control; + } +} \ No newline at end of file diff --git a/extensions/git-extended/src/prView/prProvider.ts b/extensions/git-extended/src/prView/prProvider.ts index 438c44c9639..6e99cb1e9bd 100644 --- a/extensions/git-extended/src/prView/prProvider.ts +++ b/extensions/git-extended/src/prView/prProvider.ts @@ -169,6 +169,9 @@ export class PRProvider implements vscode.TreeDataProvider change.fileName === params.fileName); + if (!fileChange) { + return null; + } let regex = new RegExp(DIFF_HUNK_INFO, 'g'); let matches = regex.exec(fileChange.patch); @@ -229,6 +232,7 @@ export class PRProvider implements vscode.TreeDataProvider { - this._commentService.setComments(outerEditorURI, commentInfos); + this._commentService.setComments(outerEditorURI, commentInfos.filter(info => info !== null)); }); for (const handle of keys(this._documentProviders)) { diff --git a/src/vs/workbench/api/node/extHostComments.ts b/src/vs/workbench/api/node/extHostComments.ts index 6d1af9226f5..ba069be736f 100644 --- a/src/vs/workbench/api/node/extHostComments.ts +++ b/src/vs/workbench/api/node/extHostComments.ts @@ -73,7 +73,7 @@ export class ExtHostComments implements ExtHostCommentsShape { let provider = this._documentProviders.get(handle); return provider.provideDocumentComments(data.document, token); }) - .then(commentInfo => convertCommentInfo(handle, commentInfo, this._commandsConverter)); + .then(commentInfo => commentInfo ? convertCommentInfo(handle, commentInfo, this._commandsConverter) : null); } $provideWorkspaceComments(handle: number): TPromise {