Skip to content

Commit 5c9d96f

Browse files
authored
refactor: streamline certain string operations (#1540)
1 parent f7b2063 commit 5c9d96f

23 files changed

+74
-125
lines changed

src/App.axaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@ private string FixFontFamilyName(string input)
695695
}
696696

697697
var name = sb.ToString();
698-
if (name.Contains('#', StringComparison.Ordinal))
698+
if (name.Contains('#'))
699699
{
700700
if (!name.Equals("fonts:Inter#Inter", StringComparison.Ordinal) &&
701701
!name.Equals("fonts:SourceGit#JetBrains Mono", StringComparison.Ordinal))

src/Commands/Blame.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public Blame(string repo, string file, string revision)
5050

5151
private void ParseLine(string line)
5252
{
53-
if (line.Contains('\0', StringComparison.Ordinal))
53+
if (line.Contains('\0'))
5454
{
5555
_result.IsBinary = true;
5656
_result.LineInfos.Clear();

src/Commands/Config.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,9 @@ public async Task<Dictionary<string, string>> ReadAllAsync()
3131
var lines = output.StdOut.Split(['\r', '\n'], StringSplitOptions.RemoveEmptyEntries);
3232
foreach (var line in lines)
3333
{
34-
var idx = line.IndexOf('=', StringComparison.Ordinal);
35-
if (idx != -1)
36-
{
37-
var key = line.Substring(0, idx).Trim();
38-
var val = line.Substring(idx + 1).Trim();
39-
rs[key] = val;
40-
}
34+
var parts = line.Split('=', 2);
35+
if (parts.Length == 2)
36+
rs[parts[0]] = parts[1];
4137
}
4238
}
4339

src/Commands/Diff.cs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.IO;
34
using System.Text.RegularExpressions;
45
using System.Threading.Tasks;
56

@@ -39,20 +40,10 @@ public Diff(string repo, Models.DiffOption opt, int unified, bool ignoreWhitespa
3940
public async Task<Models.DiffResult> ReadAsync()
4041
{
4142
var rs = await ReadToEndAsync().ConfigureAwait(false);
42-
var start = 0;
43-
var end = rs.StdOut.IndexOf('\n', start);
44-
while (end > 0)
45-
{
46-
var line = rs.StdOut.Substring(start, end - start);
43+
var sr = new StringReader(rs.StdOut);
44+
while (sr.ReadLine() is { } line)
4745
ParseLine(line);
4846

49-
start = end + 1;
50-
end = rs.StdOut.IndexOf('\n', start);
51-
}
52-
53-
if (start < rs.StdOut.Length)
54-
ParseLine(rs.StdOut.Substring(start));
55-
5647
if (_result.IsBinary || _result.IsLFS || _result.TextDiff.Lines.Count == 0)
5748
{
5849
_result.TextDiff = null;

src/Commands/QueryBranches.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,12 @@ private Models.Branch ParseLine(string line)
8080
else if (refName.StartsWith(PREFIX_REMOTE, StringComparison.Ordinal))
8181
{
8282
var name = refName.Substring(PREFIX_REMOTE.Length);
83-
var shortNameIdx = name.IndexOf('/', StringComparison.Ordinal);
84-
if (shortNameIdx < 0)
83+
var nameParts = name.Split('/', 2);
84+
if (nameParts.Length != 2)
8585
return null;
8686

87-
branch.Remote = name.Substring(0, shortNameIdx);
88-
branch.Name = name.Substring(branch.Remote.Length + 1);
87+
branch.Remote = nameParts[0];
88+
branch.Name = nameParts[1];
8989
branch.IsLocal = false;
9090
}
9191
else

src/Commands/QueryRevisionObjects.cs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using System.IO;
23
using System.Text.RegularExpressions;
34
using System.Threading.Tasks;
45

@@ -25,18 +26,9 @@ public QueryRevisionObjects(string repo, string sha, string parentFolder)
2526
var rs = await ReadToEndAsync().ConfigureAwait(false);
2627
if (rs.IsSuccess)
2728
{
28-
var start = 0;
29-
var end = rs.StdOut.IndexOf('\0', start);
30-
while (end > 0)
31-
{
32-
var line = rs.StdOut.Substring(start, end - start);
29+
var sr = new StringReader(rs.StdOut);
30+
while (sr.ReadLine() is { } line)
3331
Parse(outs, line);
34-
start = end + 1;
35-
end = rs.StdOut.IndexOf('\0', start);
36-
}
37-
38-
if (start < rs.StdOut.Length)
39-
Parse(outs, rs.StdOut.Substring(start));
4032
}
4133

4234
return outs;

src/Commands/Statistics.cs

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System.IO;
22
using System.Threading.Tasks;
33

44
namespace SourceGit.Commands
@@ -19,31 +19,19 @@ public Statistics(string repo, int max)
1919
if (!rs.IsSuccess)
2020
return statistics;
2121

22-
var start = 0;
23-
var end = rs.StdOut.IndexOf('\n', start);
24-
while (end > 0)
25-
{
26-
ParseLine(statistics, rs.StdOut.Substring(start, end - start));
27-
start = end + 1;
28-
end = rs.StdOut.IndexOf('\n', start);
29-
}
30-
31-
if (start < rs.StdOut.Length)
32-
ParseLine(statistics, rs.StdOut.Substring(start));
22+
var sr = new StringReader(rs.StdOut);
23+
while (sr.ReadLine() is { } line)
24+
ParseLine(statistics, line);
3325

3426
statistics.Complete();
3527
return statistics;
3628
}
3729

3830
private void ParseLine(Models.Statistics statistics, string line)
3931
{
40-
var dateEndIdx = line.IndexOf('$', StringComparison.Ordinal);
41-
if (dateEndIdx == -1)
42-
return;
43-
44-
var dateStr = line.AsSpan(0, dateEndIdx);
45-
if (double.TryParse(dateStr, out var date))
46-
statistics.AddCommit(line.Substring(dateEndIdx + 1), date);
32+
var parts = line.Split('$', 2);
33+
if (parts.Length == 2 && double.TryParse(parts[0], out var date))
34+
statistics.AddCommit(parts[1], date);
4735
}
4836
}
4937
}

src/Models/Change.cs

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System;
2-
3-
namespace SourceGit.Models
1+
namespace SourceGit.Models
42
{
53
public enum ChangeViewMode
64
{
@@ -64,20 +62,13 @@ public void Set(ChangeState index, ChangeState workTree = ChangeState.None)
6462

6563
if (index == ChangeState.Renamed || workTree == ChangeState.Renamed)
6664
{
67-
var idx = Path.IndexOf('\t', StringComparison.Ordinal);
68-
if (idx >= 0)
69-
{
70-
OriginalPath = Path.Substring(0, idx);
71-
Path = Path.Substring(idx + 1);
72-
}
73-
else
65+
var parts = Path.Split('\t', 2);
66+
if (parts.Length < 2)
67+
parts = Path.Split(" -> ", 2);
68+
if (parts.Length == 2)
7469
{
75-
idx = Path.IndexOf(" -> ", StringComparison.Ordinal);
76-
if (idx > 0)
77-
{
78-
OriginalPath = Path.Substring(0, idx);
79-
Path = Path.Substring(idx + 4);
80-
}
70+
OriginalPath = parts[0];
71+
Path = parts[1];
8172
}
8273
}
8374

src/Models/OpenAI.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,25 @@ public void Append(string text)
3232

3333
buffer = REG_COT().Replace(buffer, "");
3434

35-
var startIdx = buffer.IndexOf('<', StringComparison.Ordinal);
35+
var startIdx = buffer.IndexOf('<');
3636
if (startIdx >= 0)
3737
{
3838
if (startIdx > 0)
3939
OnReceive(buffer.Substring(0, startIdx));
4040

41-
var endIdx = buffer.IndexOf(">", startIdx + 1, StringComparison.Ordinal);
41+
var endIdx = buffer.IndexOf('>', startIdx + 1);
4242
if (endIdx <= startIdx)
4343
{
4444
if (buffer.Length - startIdx <= 15)
45-
_thinkTail.Append(buffer.Substring(startIdx));
45+
_thinkTail.Append(buffer.AsSpan(startIdx));
4646
else
4747
OnReceive(buffer.Substring(startIdx));
4848
}
4949
else if (endIdx < startIdx + 15)
5050
{
5151
var tag = buffer.Substring(startIdx + 1, endIdx - startIdx - 1);
5252
if (_thinkTags.Contains(tag))
53-
_thinkTail.Append(buffer.Substring(startIdx));
53+
_thinkTail.Append(buffer.AsSpan(startIdx));
5454
else
5555
OnReceive(buffer.Substring(startIdx));
5656
}

src/Models/Stash.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ public string Subject
1515
{
1616
get
1717
{
18-
var idx = Message.IndexOf('\n', StringComparison.Ordinal);
19-
return idx > 0 ? Message.Substring(0, idx).Trim() : Message;
18+
return Message.Split('\n', 2)[0].Trim();
2019
}
2120
}
2221

0 commit comments

Comments
 (0)