Skip to content

Commit db46de0

Browse files
committed
enhance: append character U+26D4 to line when \ No newline at end of file is found in git diff output (#1197)
Signed-off-by: leo <longshuang@msn.cn>
1 parent e9036b5 commit db46de0

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

src/Commands/Diff.cs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,15 +149,17 @@ private void ParseLine(string line)
149149

150150
_oldLine = int.Parse(match.Groups[1].Value);
151151
_newLine = int.Parse(match.Groups[2].Value);
152-
_result.TextDiff.Lines.Add(new Models.TextDiffLine(Models.TextDiffLineType.Indicator, line, 0, 0));
152+
_last = new Models.TextDiffLine(Models.TextDiffLineType.Indicator, line, 0, 0);
153+
_result.TextDiff.Lines.Add(_last);
153154
}
154155
}
155156
else
156157
{
157158
if (line.Length == 0)
158159
{
159160
ProcessInlineHighlights();
160-
_result.TextDiff.Lines.Add(new Models.TextDiffLine(Models.TextDiffLineType.Normal, "", _oldLine, _newLine));
161+
_last = new Models.TextDiffLine(Models.TextDiffLineType.Normal, "", _oldLine, _newLine);
162+
_result.TextDiff.Lines.Add(_last);
161163
_oldLine++;
162164
_newLine++;
163165
return;
@@ -173,7 +175,8 @@ private void ParseLine(string line)
173175
return;
174176
}
175177

176-
_deleted.Add(new Models.TextDiffLine(Models.TextDiffLineType.Deleted, line.Substring(1), _oldLine, 0));
178+
_last = new Models.TextDiffLine(Models.TextDiffLineType.Deleted, line.Substring(1), _oldLine, 0);
179+
_deleted.Add(_last);
177180
_oldLine++;
178181
}
179182
else if (ch == '+')
@@ -185,7 +188,8 @@ private void ParseLine(string line)
185188
return;
186189
}
187190

188-
_added.Add(new Models.TextDiffLine(Models.TextDiffLineType.Added, line.Substring(1), 0, _newLine));
191+
_last = new Models.TextDiffLine(Models.TextDiffLineType.Added, line.Substring(1), 0, _newLine);
192+
_added.Add(_last);
189193
_newLine++;
190194
}
191195
else if (ch != '\\')
@@ -196,7 +200,8 @@ private void ParseLine(string line)
196200
{
197201
_oldLine = int.Parse(match.Groups[1].Value);
198202
_newLine = int.Parse(match.Groups[2].Value);
199-
_result.TextDiff.Lines.Add(new Models.TextDiffLine(Models.TextDiffLineType.Indicator, line, 0, 0));
203+
_last = new Models.TextDiffLine(Models.TextDiffLineType.Indicator, line, 0, 0);
204+
_result.TextDiff.Lines.Add(_last);
200205
}
201206
else
202207
{
@@ -207,11 +212,16 @@ private void ParseLine(string line)
207212
return;
208213
}
209214

210-
_result.TextDiff.Lines.Add(new Models.TextDiffLine(Models.TextDiffLineType.Normal, line.Substring(1), _oldLine, _newLine));
215+
_last = new Models.TextDiffLine(Models.TextDiffLineType.Normal, line.Substring(1), _oldLine, _newLine);
216+
_result.TextDiff.Lines.Add(_last);
211217
_oldLine++;
212218
_newLine++;
213219
}
214220
}
221+
else if (line.Equals("\\ No newline at end of file", StringComparison.Ordinal))
222+
{
223+
_last.NoNewLineEndOfFile = true;
224+
}
215225
}
216226
}
217227

@@ -262,6 +272,7 @@ private void ProcessInlineHighlights()
262272
private readonly Models.DiffResult _result = new Models.DiffResult();
263273
private readonly List<Models.TextDiffLine> _deleted = new List<Models.TextDiffLine>();
264274
private readonly List<Models.TextDiffLine> _added = new List<Models.TextDiffLine>();
275+
private Models.TextDiffLine _last = null;
265276
private int _oldLine = 0;
266277
private int _newLine = 0;
267278
}

src/Models/DiffResult.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public class TextDiffLine
3030
public int OldLineNumber { get; set; } = 0;
3131
public int NewLineNumber { get; set; } = 0;
3232
public List<TextInlineRange> Highlights { get; set; } = new List<TextInlineRange>();
33+
public bool NoNewLineEndOfFile { get; set; } = false;
3334

3435
public string OldLine => OldLineNumber == 0 ? string.Empty : OldLineNumber.ToString();
3536
public string NewLine => NewLineNumber == 0 ? string.Empty : NewLineNumber.ToString();

src/Views/TextDiffView.axaml.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,13 +1253,16 @@ protected override void OnDataContextChanged(EventArgs e)
12531253
{
12541254
builder.Append(line.Content.Substring(0, 1000));
12551255
builder.Append($"...({line.Content.Length - 1000} character trimmed)");
1256-
builder.Append('\n');
12571256
}
12581257
else
12591258
{
12601259
builder.Append(line.Content);
1261-
builder.Append('\n');
12621260
}
1261+
1262+
if (line.NoNewLineEndOfFile)
1263+
builder.Append("\u26D4");
1264+
1265+
builder.Append('\n');
12631266
}
12641267

12651268
Text = builder.ToString();
@@ -1493,13 +1496,16 @@ protected override void OnDataContextChanged(EventArgs e)
14931496
{
14941497
builder.Append(line.Content.Substring(0, 1000));
14951498
builder.Append($"...({line.Content.Length - 1000} characters trimmed)");
1496-
builder.Append('\n');
14971499
}
14981500
else
14991501
{
15001502
builder.Append(line.Content);
1501-
builder.Append('\n');
15021503
}
1504+
1505+
if (line.NoNewLineEndOfFile)
1506+
builder.Append("\u26D4");
1507+
1508+
builder.Append('\n');
15031509
}
15041510

15051511
Text = builder.ToString();

0 commit comments

Comments
 (0)