Skip to content

Commit 2e512b7

Browse files
committed
code_style: use switch expressions for simple value mapping
1 parent b316f84 commit 2e512b7

File tree

11 files changed

+100
-266
lines changed

11 files changed

+100
-266
lines changed

src/Commands/CompareRevisions.cs

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -63,26 +63,8 @@ private void ParseLine(List<Models.Change> outs, string line)
6363

6464
var change = new Models.Change() { Path = match.Groups[2].Value };
6565
var status = match.Groups[1].Value;
66-
67-
switch (status[0])
68-
{
69-
case 'M':
70-
change.Set(Models.ChangeState.Modified);
71-
outs.Add(change);
72-
break;
73-
case 'A':
74-
change.Set(Models.ChangeState.Added);
75-
outs.Add(change);
76-
break;
77-
case 'D':
78-
change.Set(Models.ChangeState.Deleted);
79-
outs.Add(change);
80-
break;
81-
case 'C':
82-
change.Set(Models.ChangeState.Copied);
83-
outs.Add(change);
84-
break;
85-
}
66+
change.Set(Models.Change.ChangeStateFromCode(status[0]));
67+
outs.Add(change);
8668
}
8769
}
8870
}

src/Commands/GitFlow.cs

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,13 @@ public static async Task<bool> StartAsync(string repo, Models.GitFlowBranchType
3030
start.WorkingDirectory = repo;
3131
start.Context = repo;
3232

33-
switch (type)
33+
var typeStr = BranchTypeToString(type);
34+
if (typeStr == null)
3435
{
35-
case Models.GitFlowBranchType.Feature:
36-
start.Args = $"flow feature start {name}";
37-
break;
38-
case Models.GitFlowBranchType.Release:
39-
start.Args = $"flow release start {name}";
40-
break;
41-
case Models.GitFlowBranchType.Hotfix:
42-
start.Args = $"flow hotfix start {name}";
43-
break;
44-
default:
45-
App.RaiseException(repo, "Bad git-flow branch type!!!");
46-
return false;
36+
App.RaiseException(repo, "Bad git-flow branch type!!!");
37+
return false;
4738
}
39+
start.Args = $"flow {typeStr} start {name}";
4840

4941
return await start.Use(log).ExecAsync().ConfigureAwait(false);
5042
}
@@ -54,21 +46,13 @@ public static async Task<bool> FinishAsync(string repo, Models.GitFlowBranchType
5446
var builder = new StringBuilder();
5547
builder.Append("flow ");
5648

57-
switch (type)
49+
var typeStr = BranchTypeToString(type);
50+
if (typeStr == null)
5851
{
59-
case Models.GitFlowBranchType.Feature:
60-
builder.Append("feature");
61-
break;
62-
case Models.GitFlowBranchType.Release:
63-
builder.Append("release");
64-
break;
65-
case Models.GitFlowBranchType.Hotfix:
66-
builder.Append("hotfix");
67-
break;
68-
default:
69-
App.RaiseException(repo, "Bad git-flow branch type!!!");
70-
return false;
52+
App.RaiseException(repo, "Bad git-flow branch type!!!");
53+
return false;
7154
}
55+
builder.Append(typeStr);
7256

7357
builder.Append(" finish ");
7458
if (squash)
@@ -85,5 +69,14 @@ public static async Task<bool> FinishAsync(string repo, Models.GitFlowBranchType
8569
finish.Args = builder.ToString();
8670
return await finish.Use(log).ExecAsync().ConfigureAwait(false);
8771
}
72+
73+
private static string BranchTypeToString(Models.GitFlowBranchType type) =>
74+
type switch
75+
{
76+
Models.GitFlowBranchType.Feature => "feature",
77+
Models.GitFlowBranchType.Release => "release",
78+
Models.GitFlowBranchType.Hotfix => "hotfix",
79+
_ => null
80+
};
8881
}
8982
}

src/Commands/QueryLocalChanges.cs

Lines changed: 19 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -38,120 +38,26 @@ public QueryLocalChanges(string repo, bool includeUntracked = true)
3838
var change = new Models.Change() { Path = match.Groups[2].Value };
3939
var status = match.Groups[1].Value;
4040

41-
switch (status)
41+
change.ConflictReason = status switch
4242
{
43-
case " M":
44-
change.Set(Models.ChangeState.None, Models.ChangeState.Modified);
45-
break;
46-
case " T":
47-
change.Set(Models.ChangeState.None, Models.ChangeState.TypeChanged);
48-
break;
49-
case " A":
50-
change.Set(Models.ChangeState.None, Models.ChangeState.Added);
51-
break;
52-
case " D":
53-
change.Set(Models.ChangeState.None, Models.ChangeState.Deleted);
54-
break;
55-
case " R":
56-
change.Set(Models.ChangeState.None, Models.ChangeState.Renamed);
57-
break;
58-
case " C":
59-
change.Set(Models.ChangeState.None, Models.ChangeState.Copied);
60-
break;
61-
case "M":
62-
change.Set(Models.ChangeState.Modified);
63-
break;
64-
case "MM":
65-
change.Set(Models.ChangeState.Modified, Models.ChangeState.Modified);
66-
break;
67-
case "MT":
68-
change.Set(Models.ChangeState.Modified, Models.ChangeState.TypeChanged);
69-
break;
70-
case "MD":
71-
change.Set(Models.ChangeState.Modified, Models.ChangeState.Deleted);
72-
break;
73-
case "T":
74-
change.Set(Models.ChangeState.TypeChanged);
75-
break;
76-
case "TM":
77-
change.Set(Models.ChangeState.TypeChanged, Models.ChangeState.Modified);
78-
break;
79-
case "TT":
80-
change.Set(Models.ChangeState.TypeChanged, Models.ChangeState.TypeChanged);
81-
break;
82-
case "TD":
83-
change.Set(Models.ChangeState.TypeChanged, Models.ChangeState.Deleted);
84-
break;
85-
case "A":
86-
change.Set(Models.ChangeState.Added);
87-
break;
88-
case "AM":
89-
change.Set(Models.ChangeState.Added, Models.ChangeState.Modified);
90-
break;
91-
case "AT":
92-
change.Set(Models.ChangeState.Added, Models.ChangeState.TypeChanged);
93-
break;
94-
case "AD":
95-
change.Set(Models.ChangeState.Added, Models.ChangeState.Deleted);
96-
break;
97-
case "D":
98-
change.Set(Models.ChangeState.Deleted);
99-
break;
100-
case "R":
101-
change.Set(Models.ChangeState.Renamed);
102-
break;
103-
case "RM":
104-
change.Set(Models.ChangeState.Renamed, Models.ChangeState.Modified);
105-
break;
106-
case "RT":
107-
change.Set(Models.ChangeState.Renamed, Models.ChangeState.TypeChanged);
108-
break;
109-
case "RD":
110-
change.Set(Models.ChangeState.Renamed, Models.ChangeState.Deleted);
111-
break;
112-
case "C":
113-
change.Set(Models.ChangeState.Copied);
114-
break;
115-
case "CM":
116-
change.Set(Models.ChangeState.Copied, Models.ChangeState.Modified);
117-
break;
118-
case "CT":
119-
change.Set(Models.ChangeState.Copied, Models.ChangeState.TypeChanged);
120-
break;
121-
case "CD":
122-
change.Set(Models.ChangeState.Copied, Models.ChangeState.Deleted);
123-
break;
124-
case "DD":
125-
change.ConflictReason = Models.ConflictReason.BothDeleted;
126-
change.Set(Models.ChangeState.None, Models.ChangeState.Conflicted);
127-
break;
128-
case "AU":
129-
change.ConflictReason = Models.ConflictReason.AddedByUs;
130-
change.Set(Models.ChangeState.None, Models.ChangeState.Conflicted);
131-
break;
132-
case "UD":
133-
change.ConflictReason = Models.ConflictReason.DeletedByThem;
134-
change.Set(Models.ChangeState.None, Models.ChangeState.Conflicted);
135-
break;
136-
case "UA":
137-
change.ConflictReason = Models.ConflictReason.AddedByThem;
138-
change.Set(Models.ChangeState.None, Models.ChangeState.Conflicted);
139-
break;
140-
case "DU":
141-
change.ConflictReason = Models.ConflictReason.DeletedByUs;
142-
change.Set(Models.ChangeState.None, Models.ChangeState.Conflicted);
143-
break;
144-
case "AA":
145-
change.ConflictReason = Models.ConflictReason.BothAdded;
146-
change.Set(Models.ChangeState.None, Models.ChangeState.Conflicted);
147-
break;
148-
case "UU":
149-
change.ConflictReason = Models.ConflictReason.BothModified;
150-
change.Set(Models.ChangeState.None, Models.ChangeState.Conflicted);
151-
break;
152-
case "??":
153-
change.Set(Models.ChangeState.None, Models.ChangeState.Untracked);
154-
break;
43+
"DD" => Models.ConflictReason.BothDeleted,
44+
"AU" => Models.ConflictReason.AddedByUs,
45+
"UD" => Models.ConflictReason.DeletedByThem,
46+
"UA" => Models.ConflictReason.AddedByThem,
47+
"DU" => Models.ConflictReason.DeletedByUs,
48+
"AA" => Models.ConflictReason.BothAdded,
49+
"UU" => Models.ConflictReason.BothModified,
50+
_ => Models.ConflictReason.None
51+
};
52+
if (change.ConflictReason != Models.ConflictReason.None)
53+
change.Set(Models.ChangeState.None, Models.ChangeState.Conflicted);
54+
else if (status == "??")
55+
change.Set(Models.ChangeState.None, Models.ChangeState.Untracked);
56+
else
57+
{
58+
var indexStatus = Models.Change.ChangeStateFromCode(status[0]);
59+
var worktreeStatus = status.Length > 1 ? Models.Change.ChangeStateFromCode(status[1]) : Models.ChangeState.None;
60+
change.Set(indexStatus, worktreeStatus);
15561
}
15662

15763
if (change.Index != Models.ChangeState.None || change.WorkTree != Models.ChangeState.None)

src/Commands/QueryStagedChangesWithAmend.cs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -63,24 +63,7 @@ public QueryStagedChangesWithAmend(string repo, string parent)
6363
};
6464

6565
var type = match.Groups[3].Value;
66-
switch (type)
67-
{
68-
case "A":
69-
change.Set(Models.ChangeState.Added);
70-
break;
71-
case "C":
72-
change.Set(Models.ChangeState.Copied);
73-
break;
74-
case "D":
75-
change.Set(Models.ChangeState.Deleted);
76-
break;
77-
case "M":
78-
change.Set(Models.ChangeState.Modified);
79-
break;
80-
case "T":
81-
change.Set(Models.ChangeState.TypeChanged);
82-
break;
83-
}
66+
change.Set(Models.Change.ChangeStateFromCode(type[0]));
8467
changes.Add(change);
8568
}
8669
}

src/Commands/QuerySubmodules.cs

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,15 @@ public QuerySubmodules(string repo)
4040
var path = match.Groups[3].Value;
4141

4242
var module = new Models.Submodule() { Path = path, SHA = sha };
43-
switch (stat[0])
43+
module.Status = stat[0] switch
4444
{
45-
case '-':
46-
module.Status = Models.SubmoduleStatus.NotInited;
47-
break;
48-
case '+':
49-
module.Status = Models.SubmoduleStatus.RevisionChanged;
50-
break;
51-
case 'U':
52-
module.Status = Models.SubmoduleStatus.Unmerged;
53-
break;
54-
default:
55-
module.Status = Models.SubmoduleStatus.Normal;
56-
needCheckLocalChanges = true;
57-
break;
58-
}
45+
'-' => Models.SubmoduleStatus.NotInited,
46+
'+' => Models.SubmoduleStatus.RevisionChanged,
47+
'U' => Models.SubmoduleStatus.Unmerged,
48+
_ => Models.SubmoduleStatus.Normal
49+
};
50+
if (module.Status == Models.SubmoduleStatus.Normal)
51+
needCheckLocalChanges = true;
5952

6053
map.Add(path, module);
6154
submodules.Add(module);

src/Models/Change.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,5 +113,18 @@ public void Set(ChangeState index, ChangeState workTree = ChangeState.None)
113113
"Both added",
114114
"Both modified"
115115
];
116+
117+
public static ChangeState ChangeStateFromCode(char code) =>
118+
code switch
119+
{
120+
'M' => ChangeState.Modified,
121+
'T' => ChangeState.TypeChanged,
122+
'A' => ChangeState.Added,
123+
'D' => ChangeState.Deleted,
124+
'R' => ChangeState.Renamed,
125+
'C' => ChangeState.Copied,
126+
'U' => ChangeState.Untracked,
127+
_ => ChangeState.None,
128+
};
116129
}
117130
}

src/Models/DiffOption.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,10 @@ public DiffOption(Change change, bool isUnstaged)
3434

3535
if (isUnstaged)
3636
{
37-
switch (change.WorkTree)
37+
if (change.WorkTree is ChangeState.Added or ChangeState.Untracked)
3838
{
39-
case ChangeState.Added:
40-
case ChangeState.Untracked:
41-
_extra = "--no-index";
42-
_orgPath = "/dev/null";
43-
break;
39+
_extra = "--no-index";
40+
_orgPath = "/dev/null";
4441
}
4542
}
4643
else

src/ViewModels/Conflict.cs

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -71,33 +71,24 @@ public Conflict(Repository repo, WorkingCopy wc, Models.Change change)
7171
IsResolved = new Commands.IsConflictResolved(repo.FullPath, change).GetResultAsync().Result;
7272
}
7373

74-
switch (wc.InProgressContext)
74+
if (wc.InProgressContext is RebaseInProgress rebase)
7575
{
76-
case CherryPickInProgress cherryPick:
77-
Theirs = cherryPick.Head;
78-
Mine = new ConflictSourceBranch(repo, repo.CurrentBranch);
79-
break;
80-
case RebaseInProgress rebase:
81-
var b = repo.Branches.Find(x => x.IsLocal && x.Name == rebase.HeadName);
82-
if (b != null)
83-
Theirs = new ConflictSourceBranch(b.Name, b.Head, rebase.StoppedAt);
84-
else
85-
Theirs = new ConflictSourceBranch(rebase.HeadName, rebase.StoppedAt?.SHA ?? "----------", rebase.StoppedAt);
86-
87-
Mine = rebase.Onto;
88-
break;
89-
case RevertInProgress revert:
90-
Theirs = revert.Head;
91-
Mine = new ConflictSourceBranch(repo, repo.CurrentBranch);
92-
break;
93-
case MergeInProgress merge:
94-
Theirs = merge.Source;
95-
Mine = new ConflictSourceBranch(repo, repo.CurrentBranch);
96-
break;
97-
default:
98-
Theirs = "Stash or Patch";
99-
Mine = new ConflictSourceBranch(repo, repo.CurrentBranch);
100-
break;
76+
var b = repo.Branches.Find(x => x.IsLocal && x.Name == rebase.HeadName);
77+
Theirs = b != null
78+
? new ConflictSourceBranch(b.Name, b.Head, rebase.StoppedAt)
79+
: new ConflictSourceBranch(rebase.HeadName, rebase.StoppedAt?.SHA ?? "----------", rebase.StoppedAt);
80+
Mine = rebase.Onto;
81+
}
82+
else
83+
{
84+
Theirs = wc.InProgressContext switch
85+
{
86+
CherryPickInProgress cherryPick => cherryPick.Head,
87+
RevertInProgress revert => revert.Head,
88+
MergeInProgress merge => merge.Source,
89+
_ => "Stash or Patch"
90+
};
91+
Mine = new ConflictSourceBranch(repo, repo.CurrentBranch);
10192
}
10293
}
10394

0 commit comments

Comments
 (0)