From 720e971146cfb042d9e21c0a3cb22af1400839c3 Mon Sep 17 00:00:00 2001 From: Zachariah Mully Date: Sat, 25 Feb 2023 11:45:22 -0500 Subject: [PATCH 1/3] add missing eof line support --- src/__fixtures__/missing-eof | 18 ++++ .../__snapshots__/missing-eof.test.ts.snap | 87 +++++++++++++++++++ src/__tests__/missing-eof.test.ts | 10 +++ src/constants.ts | 1 + src/parse-git-diff.ts | 8 ++ src/types.ts | 6 +- 6 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 src/__fixtures__/missing-eof create mode 100644 src/__tests__/__snapshots__/missing-eof.test.ts.snap create mode 100644 src/__tests__/missing-eof.test.ts diff --git a/src/__fixtures__/missing-eof b/src/__fixtures__/missing-eof new file mode 100644 index 0000000..64ba259 --- /dev/null +++ b/src/__fixtures__/missing-eof @@ -0,0 +1,18 @@ +diff --git a/rename.md b/rename.md +index 0e05564..aa39060 100644 +--- a/rename.md ++++ b/rename.md +@@ -1,2 +1 @@ + newfile +-newline ++newline +\ No newline at end of file +diff --git a/rename2.md b/rename2.md +index 0e05564..aa39060 100644 +--- a/rename2.md ++++ b/rename2.md +@@ -1,2 +1 @@ + newfile2 +-newline2 ++newline2 +\ No newline at end of file diff --git a/src/__tests__/__snapshots__/missing-eof.test.ts.snap b/src/__tests__/__snapshots__/missing-eof.test.ts.snap new file mode 100644 index 0000000..9c2f9b2 --- /dev/null +++ b/src/__tests__/__snapshots__/missing-eof.test.ts.snap @@ -0,0 +1,87 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`missing-eof parse \`missing-eof\` 1`] = ` +{ + "files": [ + { + "chunks": [ + { + "changes": [ + { + "content": "newfile", + "lineAfter": 1, + "lineBefore": 1, + "type": "UnchangedLine", + }, + { + "content": "newline", + "lineBefore": 2, + "type": "DeletedLine", + }, + { + "content": "newline", + "lineAfter": 2, + "type": "AddedLine", + }, + { + "content": "No newline at end of file", + "type": "MissingEofLine", + }, + ], + "fromFileRange": { + "lines": 2, + "start": 1, + }, + "toFileRange": { + "lines": 1, + "start": 1, + }, + "type": "Chunk", + }, + ], + "path": "rename.md", + "type": "ChangedFile", + }, + { + "chunks": [ + { + "changes": [ + { + "content": "newfile2", + "lineAfter": 1, + "lineBefore": 1, + "type": "UnchangedLine", + }, + { + "content": "newline2", + "lineBefore": 2, + "type": "DeletedLine", + }, + { + "content": "newline2", + "lineAfter": 2, + "type": "AddedLine", + }, + { + "content": "No newline at end of file", + "type": "MissingEofLine", + }, + ], + "fromFileRange": { + "lines": 2, + "start": 1, + }, + "toFileRange": { + "lines": 1, + "start": 1, + }, + "type": "Chunk", + }, + ], + "path": "rename2.md", + "type": "ChangedFile", + }, + ], + "type": "GitDiff", +} +`; diff --git a/src/__tests__/missing-eof.test.ts b/src/__tests__/missing-eof.test.ts new file mode 100644 index 0000000..05f0460 --- /dev/null +++ b/src/__tests__/missing-eof.test.ts @@ -0,0 +1,10 @@ +import { getFixture } from './test-utils'; +import parseGitDiff from '../parse-git-diff'; + +describe('missing-eof', () => { + const fixture = getFixture('missing-eof'); + + it('parse `missing-eof`', () => { + expect(parseGitDiff(fixture)).toMatchSnapshot(); + }); +}); diff --git a/src/constants.ts b/src/constants.ts index 3b4a77c..811cee3 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -2,6 +2,7 @@ export const LineType = { Added: 'AddedLine', Deleted: 'DeletedLine', Unchanged: 'UnchangedLine', + MissingEof: 'MissingEofLine', } as const; export const FileType = { diff --git a/src/parse-git-diff.ts b/src/parse-git-diff.ts index 2e44dee..755cfa8 100644 --- a/src/parse-git-diff.ts +++ b/src/parse-git-diff.ts @@ -244,6 +244,7 @@ const CHAR_TYPE_MAP: Record = { '+': LineType.Added, '-': LineType.Deleted, ' ': LineType.Unchanged, + '\\': LineType.MissingEof, }; function parseChanges( @@ -291,6 +292,13 @@ function parseChanges( }; break; } + case LineType.MissingEof: { + change = { + type, + content: content.trim(), + }; + break; + } } changes.push(change); } diff --git a/src/types.ts b/src/types.ts index 326f2ec..79b724f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -21,7 +21,11 @@ export interface UnchangedLine extends BaseChange { lineAfter: number; } -export type AnyLineChange = AddedLine | DeletedLine | UnchangedLine; +export interface MissingEofLine extends BaseChange { + content: string; +} + +export type AnyLineChange = AddedLine | DeletedLine | UnchangedLine | MissingEofLine; export interface ChunkRange { start: number; From 99437fcf6509515d24ad5b655fc8cbf144c8f93c Mon Sep 17 00:00:00 2001 From: Zachariah Mully Date: Sat, 25 Feb 2023 12:00:14 -0500 Subject: [PATCH 2/3] run prettier --- src/types.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/types.ts b/src/types.ts index 79b724f..7c79f09 100644 --- a/src/types.ts +++ b/src/types.ts @@ -25,7 +25,11 @@ export interface MissingEofLine extends BaseChange { content: string; } -export type AnyLineChange = AddedLine | DeletedLine | UnchangedLine | MissingEofLine; +export type AnyLineChange = + | AddedLine + | DeletedLine + | UnchangedLine + | MissingEofLine; export interface ChunkRange { start: number; From 3cab7cb9adddd7a5877b8ac828f13d59c2c91413 Mon Sep 17 00:00:00 2001 From: Zachariah Mully Date: Sun, 26 Feb 2023 10:03:41 -0500 Subject: [PATCH 3/3] change to message line, update readme --- README.md | 116 ++++++++++++++++++ scripts/build-readme.js | 1 + .../{missing-eof => message-line} | 0 ...test.ts.snap => message-line.test.ts.snap} | 6 +- ...ssing-eof.test.ts => message-line.test.ts} | 6 +- src/constants.ts | 2 +- src/parse-git-diff.ts | 4 +- src/types.ts | 4 +- 8 files changed, 128 insertions(+), 11 deletions(-) rename src/__fixtures__/{missing-eof => message-line} (100%) rename src/__tests__/__snapshots__/{missing-eof.test.ts.snap => message-line.test.ts.snap} (93%) rename src/__tests__/{missing-eof.test.ts => message-line.test.ts} (57%) diff --git a/README.md b/README.md index a1e689d..7026358 100644 --- a/README.md +++ b/README.md @@ -468,6 +468,122 @@ index 0e05564..aa39060 100644 + + +```diff +diff --git a/rename.md b/rename.md +index 0e05564..aa39060 100644 +--- a/rename.md ++++ b/rename.md +@@ -1,2 +1 @@ + newfile +-newline ++newline +\ No newline at end of file +diff --git a/rename2.md b/rename2.md +index 0e05564..aa39060 100644 +--- a/rename2.md ++++ b/rename2.md +@@ -1,2 +1 @@ + newfile2 +-newline2 ++newline2 +\ No newline at end of file + +``` + + + + + +```json +{ + "type": "GitDiff", + "files": [ + { + "type": "ChangedFile", + "chunks": [ + { + "type": "Chunk", + "toFileRange": { + "start": 1, + "lines": 1 + }, + "fromFileRange": { + "start": 1, + "lines": 2 + }, + "changes": [ + { + "type": "UnchangedLine", + "lineBefore": 1, + "lineAfter": 1, + "content": "newfile" + }, + { + "type": "DeletedLine", + "lineBefore": 2, + "content": "newline" + }, + { + "type": "AddedLine", + "lineAfter": 2, + "content": "newline" + }, + { + "type": "MessageLine", + "content": "No newline at end of file" + } + ] + } + ], + "path": "rename.md" + }, + { + "type": "ChangedFile", + "chunks": [ + { + "type": "Chunk", + "toFileRange": { + "start": 1, + "lines": 1 + }, + "fromFileRange": { + "start": 1, + "lines": 2 + }, + "changes": [ + { + "type": "UnchangedLine", + "lineBefore": 1, + "lineAfter": 1, + "content": "newfile2" + }, + { + "type": "DeletedLine", + "lineBefore": 2, + "content": "newline2" + }, + { + "type": "AddedLine", + "lineAfter": 2, + "content": "newline2" + }, + { + "type": "MessageLine", + "content": "No newline at end of file" + } + ] + } + ], + "path": "rename2.md" + } + ] +} +``` + + + ## AST Format diff --git a/scripts/build-readme.js b/scripts/build-readme.js index 7fa2fe9..cc65372 100644 --- a/scripts/build-readme.js +++ b/scripts/build-readme.js @@ -13,6 +13,7 @@ const FIXTURES = [ 'conflict-file', 'new-line', 'deleted-line', + 'message-line', ]; let readmeReplacer = replacer().content(README_INPUT); diff --git a/src/__fixtures__/missing-eof b/src/__fixtures__/message-line similarity index 100% rename from src/__fixtures__/missing-eof rename to src/__fixtures__/message-line diff --git a/src/__tests__/__snapshots__/missing-eof.test.ts.snap b/src/__tests__/__snapshots__/message-line.test.ts.snap similarity index 93% rename from src/__tests__/__snapshots__/missing-eof.test.ts.snap rename to src/__tests__/__snapshots__/message-line.test.ts.snap index 9c2f9b2..947245c 100644 --- a/src/__tests__/__snapshots__/missing-eof.test.ts.snap +++ b/src/__tests__/__snapshots__/message-line.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`missing-eof parse \`missing-eof\` 1`] = ` +exports[`message-line parse \`message-line\` 1`] = ` { "files": [ { @@ -25,7 +25,7 @@ exports[`missing-eof parse \`missing-eof\` 1`] = ` }, { "content": "No newline at end of file", - "type": "MissingEofLine", + "type": "MessageLine", }, ], "fromFileRange": { @@ -64,7 +64,7 @@ exports[`missing-eof parse \`missing-eof\` 1`] = ` }, { "content": "No newline at end of file", - "type": "MissingEofLine", + "type": "MessageLine", }, ], "fromFileRange": { diff --git a/src/__tests__/missing-eof.test.ts b/src/__tests__/message-line.test.ts similarity index 57% rename from src/__tests__/missing-eof.test.ts rename to src/__tests__/message-line.test.ts index 05f0460..325a31d 100644 --- a/src/__tests__/missing-eof.test.ts +++ b/src/__tests__/message-line.test.ts @@ -1,10 +1,10 @@ import { getFixture } from './test-utils'; import parseGitDiff from '../parse-git-diff'; -describe('missing-eof', () => { - const fixture = getFixture('missing-eof'); +describe('message-line', () => { + const fixture = getFixture('message-line'); - it('parse `missing-eof`', () => { + it('parse `message-line`', () => { expect(parseGitDiff(fixture)).toMatchSnapshot(); }); }); diff --git a/src/constants.ts b/src/constants.ts index 811cee3..796196e 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -2,7 +2,7 @@ export const LineType = { Added: 'AddedLine', Deleted: 'DeletedLine', Unchanged: 'UnchangedLine', - MissingEof: 'MissingEofLine', + Message: 'MessageLine', } as const; export const FileType = { diff --git a/src/parse-git-diff.ts b/src/parse-git-diff.ts index 755cfa8..f12f648 100644 --- a/src/parse-git-diff.ts +++ b/src/parse-git-diff.ts @@ -244,7 +244,7 @@ const CHAR_TYPE_MAP: Record = { '+': LineType.Added, '-': LineType.Deleted, ' ': LineType.Unchanged, - '\\': LineType.MissingEof, + '\\': LineType.Message, }; function parseChanges( @@ -292,7 +292,7 @@ function parseChanges( }; break; } - case LineType.MissingEof: { + case LineType.Message: { change = { type, content: content.trim(), diff --git a/src/types.ts b/src/types.ts index 7c79f09..17ad5c6 100644 --- a/src/types.ts +++ b/src/types.ts @@ -21,7 +21,7 @@ export interface UnchangedLine extends BaseChange { lineAfter: number; } -export interface MissingEofLine extends BaseChange { +export interface MessageLine extends BaseChange { content: string; } @@ -29,7 +29,7 @@ export type AnyLineChange = | AddedLine | DeletedLine | UnchangedLine - | MissingEofLine; + | MessageLine; export interface ChunkRange { start: number;