Skip to content

Commit 6c64a1e

Browse files
add context to Chunk (#14)
1 parent b9c006f commit 6c64a1e

12 files changed

+80
-5
lines changed

src/__fixtures__/chunk-context

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
diff --git a/rename.js b/rename.js
2+
index aa39060..0e05564 100644
3+
--- a/rename.js
4+
+++ b/rename.js
5+
@@ -4 +4,5 @@ function hello() {
6+
// hello world
7+
+ console.log("hello world");

src/__tests__/__snapshots__/all.test.ts.snap

+4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ exports[`aa parse \`all\` 1`] = `
1919
"type": "DeletedLine",
2020
},
2121
],
22+
"context": undefined,
2223
"fromFileRange": {
2324
"lines": 2,
2425
"start": 1,
@@ -43,6 +44,7 @@ exports[`aa parse \`all\` 1`] = `
4344
"type": "DeletedLine",
4445
},
4546
],
47+
"context": undefined,
4648
"fromFileRange": {
4749
"lines": 1,
4850
"start": 1,
@@ -67,6 +69,7 @@ exports[`aa parse \`all\` 1`] = `
6769
"type": "AddedLine",
6870
},
6971
],
72+
"context": undefined,
7073
"fromFileRange": {
7174
"lines": 0,
7275
"start": 0,
@@ -97,6 +100,7 @@ exports[`aa parse \`all\` 1`] = `
97100
"type": "AddedLine",
98101
},
99102
],
103+
"context": undefined,
100104
"fromFileRange": {
101105
"lines": 1,
102106
"start": 1,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`chunk-context parse \`chunk-context\` 1`] = `
4+
{
5+
"files": [
6+
{
7+
"chunks": [
8+
{
9+
"changes": [
10+
{
11+
"content": " // hello world",
12+
"lineAfter": 4,
13+
"lineBefore": 4,
14+
"type": "UnchangedLine",
15+
},
16+
{
17+
"content": " console.log(\"hello world\");",
18+
"lineAfter": 5,
19+
"type": "AddedLine",
20+
},
21+
],
22+
"context": "function hello() {",
23+
"fromFileRange": {
24+
"lines": 4,
25+
"start": 4,
26+
},
27+
"toFileRange": {
28+
"lines": 5,
29+
"start": 4,
30+
},
31+
"type": "Chunk",
32+
},
33+
],
34+
"path": "rename.js",
35+
"type": "ChangedFile",
36+
},
37+
],
38+
"type": "GitDiff",
39+
}
40+
`;

src/__tests__/__snapshots__/conflict-file.test.ts.snap

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ exports[`conflict-file parse \`conflict-file\` 1`] = `
7676
"type": "UnchangedLine",
7777
},
7878
],
79+
"context": undefined,
7980
"fromFileRangeA": {
8081
"lines": 7,
8182
"start": 8,

src/__tests__/__snapshots__/deleted-file.test.ts.snap

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ exports[`deleted-file parse \`deleted-file\` 1`] = `
1313
"type": "DeletedLine",
1414
},
1515
],
16+
"context": undefined,
1617
"fromFileRange": {
1718
"lines": 1,
1819
"start": 1,

src/__tests__/__snapshots__/deleted-line.test.ts.snap

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ exports[`deleted-line parse \`deleted-line\` 1`] = `
1919
"type": "DeletedLine",
2020
},
2121
],
22+
"context": undefined,
2223
"fromFileRange": {
2324
"lines": 2,
2425
"start": 1,

src/__tests__/__snapshots__/message-line.test.ts.snap

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ exports[`message-line parse \`message-line\` 1`] = `
2828
"type": "MessageLine",
2929
},
3030
],
31+
"context": undefined,
3132
"fromFileRange": {
3233
"lines": 2,
3334
"start": 1,
@@ -67,6 +68,7 @@ exports[`message-line parse \`message-line\` 1`] = `
6768
"type": "MessageLine",
6869
},
6970
],
71+
"context": undefined,
7072
"fromFileRange": {
7173
"lines": 2,
7274
"start": 1,

src/__tests__/__snapshots__/new-file.test.ts.snap

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ exports[`new-file parse \`new-file\` 1`] = `
1313
"type": "AddedLine",
1414
},
1515
],
16+
"context": undefined,
1617
"fromFileRange": {
1718
"lines": 0,
1819
"start": 0,

src/__tests__/__snapshots__/new-line.test.ts.snap

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ exports[`new-line parse \`new-line\` 1`] = `
1919
"type": "AddedLine",
2020
},
2121
],
22+
"context": undefined,
2223
"fromFileRange": {
2324
"lines": 1,
2425
"start": 1,

src/__tests__/chunk-context.test.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { getFixture } from './test-utils';
2+
import parseGitDiff from '../parse-git-diff';
3+
4+
describe('chunk-context', () => {
5+
const fixture = getFixture('chunk-context');
6+
7+
it('parse `chunk-context`', () => {
8+
expect(parseGitDiff(fixture)).toMatchSnapshot();
9+
});
10+
});

src/parse-git-diff.ts

+10-5
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,13 @@ function parseExtendedHeader(ctx: Context) {
175175

176176
function parseChunkHeader(ctx: Context) {
177177
const line = ctx.getCurLine();
178-
const normalChunkExec = /^@@\s\-(\d+),?(\d+)?\s\+(\d+),?(\d+)?\s@@/.exec(
179-
line
180-
);
178+
const normalChunkExec =
179+
/^@@\s\-(\d+),?(\d+)?\s\+(\d+),?(\d+)?\s@@\s?(.+)?/.exec(line);
181180
if (!normalChunkExec) {
182181
const combinedChunkExec =
183-
/^@@@\s\-(\d+),?(\d+)?\s\-(\d+),?(\d+)?\s\+(\d+),?(\d+)?\s@@@/.exec(line);
182+
/^@@@\s\-(\d+),?(\d+)?\s\-(\d+),?(\d+)?\s\+(\d+),?(\d+)?\s@@@\s?(.+)?/.exec(
183+
line
184+
);
184185

185186
if (!combinedChunkExec) {
186187
return null;
@@ -194,18 +195,22 @@ function parseChunkHeader(ctx: Context) {
194195
delLinesB,
195196
addStart,
196197
addLines,
198+
context,
197199
] = combinedChunkExec;
198200
ctx.nextLine();
199201
return {
202+
context,
200203
type: 'Combined',
201204
fromFileRangeA: getRange(delStartA, delLinesA),
202205
fromFileRangeB: getRange(delStartB, delLinesB),
203206
toFileRange: getRange(addStart, addLines),
204207
} as const;
205208
}
206-
const [all, delStart, delLines, addStart, addLines] = normalChunkExec;
209+
const [all, delStart, delLines, addStart, addLines, context] =
210+
normalChunkExec;
207211
ctx.nextLine();
208212
return {
213+
context,
209214
type: 'Normal',
210215
toFileRange: getRange(addStart, addLines),
211216
fromFileRange: getRange(delStart, delLines),

src/types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,15 @@ export interface Chunk extends Base<'Chunk'> {
4040
fromFileRange: ChunkRange;
4141
toFileRange: ChunkRange;
4242
changes: AnyLineChange[];
43+
context: string | undefined;
4344
}
4445

4546
export interface CombinedChunk extends Base<'CombinedChunk'> {
4647
fromFileRangeA: ChunkRange;
4748
fromFileRangeB: ChunkRange;
4849
toFileRange: ChunkRange;
4950
changes: AnyLineChange[];
51+
context: string | undefined;
5052
}
5153

5254
export type AnyChunk = Chunk | CombinedChunk;

0 commit comments

Comments
 (0)