Skip to content

Commit d233fd5

Browse files
committed
Linq clean-up
1 parent 62b3e1c commit d233fd5

File tree

9 files changed

+297
-103
lines changed

9 files changed

+297
-103
lines changed

WorkspaceLauncherForVSCode/Classes/CountTracker.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Linq;
43
using WorkspaceLauncherForVSCode.Enums;
54

65
namespace WorkspaceLauncherForVSCode.Classes;
@@ -70,17 +69,17 @@ public void Reset()
7069
{
7170
try
7271
{
73-
foreach (var key in _counts.Keys.ToList())
72+
foreach (var key in _counts.Keys)
7473
{
7574
_counts[key] = 0;
7675
}
7776

78-
foreach (var key in _vscodeRemoteCounts.Keys.ToList())
77+
foreach (var key in _vscodeRemoteCounts.Keys)
7978
{
8079
_vscodeRemoteCounts[key] = 0;
8180
}
8281

83-
foreach (var key in _vscodeLocalCounts.Keys.ToList())
82+
foreach (var key in _vscodeLocalCounts.Keys)
8483
{
8584
_vscodeLocalCounts[key] = 0;
8685
}
@@ -91,3 +90,4 @@ public void Reset()
9190
}
9291
}
9392
}
93+

WorkspaceLauncherForVSCode/Pages/VisualStudioCodePage.cs

Lines changed: 91 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Licensed under the MIT License. See the LICENSE file in the project root for details.
33
using System;
44
using System.Collections.Generic;
5-
using System.Linq;
65
using System.Threading;
76
using System.Threading.Tasks;
87
using Microsoft.CommandPalette.Extensions;
@@ -137,7 +136,17 @@ public override IListItem[] GetItems()
137136
{
138137
return _noResultsRefreshItem;
139138
}
140-
return _visibleItems.Concat(_refreshSuggestionItem).ToArray();
139+
140+
var combinedItems = new IListItem[_visibleItems.Count + _refreshSuggestionItem.Length];
141+
for (int i = 0; i < _visibleItems.Count; i++)
142+
{
143+
combinedItems[i] = _visibleItems[i];
144+
}
145+
for (int i = 0; i < _refreshSuggestionItem.Length; i++)
146+
{
147+
combinedItems[_visibleItems.Count + i] = _refreshSuggestionItem[i];
148+
}
149+
return combinedItems;
141150
}
142151
}
143152
finally
@@ -159,7 +168,17 @@ public override void UpdateSearchText(string oldSearch, string newSearch)
159168
{
160169
_cachedFilteredWorkspaces = WorkspaceFilter.Filter(newSearch, AllWorkspaces, _settingsManager.SearchBy, _settingsManager.SortBy);
161170
_visibleItems.Clear();
162-
_visibleItems.AddRange(CreateListItems(_cachedFilteredWorkspaces.Take(_settingsManager.PageSize)));
171+
172+
var itemsToAdd = new List<ListItem>();
173+
int count = 0;
174+
foreach (var workspace in _cachedFilteredWorkspaces)
175+
{
176+
if (count >= _settingsManager.PageSize) break;
177+
itemsToAdd.Add(WorkspaceItemFactory.Create(workspace, this, _workspaceStorage, _settingsManager, _countTracker, _refreshWorkspacesCommandContextItem, _pinService));
178+
count++;
179+
}
180+
_visibleItems.AddRange(itemsToAdd);
181+
163182
HasMoreItems = _cachedFilteredWorkspaces.Count > _settingsManager.PageSize;
164183
}
165184

@@ -176,9 +195,24 @@ public override void LoadMore()
176195
lock (_itemsLock)
177196
{
178197
var currentCount = _visibleItems.Count;
179-
var nextPage = _cachedFilteredWorkspaces
180-
.Skip(currentCount)
181-
.Take(_settingsManager.PageSize);
198+
199+
var nextPage = new List<VisualStudioCodeWorkspace>();
200+
int i = 0;
201+
foreach (var workspace in _cachedFilteredWorkspaces)
202+
{
203+
if (i >= currentCount)
204+
{
205+
if (nextPage.Count < _settingsManager.PageSize)
206+
{
207+
nextPage.Add(workspace);
208+
}
209+
else
210+
{
211+
break;
212+
}
213+
}
214+
i++;
215+
}
182216

183217
_visibleItems.AddRange(CreateListItems(nextPage));
184218
HasMoreItems = _visibleItems.Count < _cachedFilteredWorkspaces.Count;
@@ -188,10 +222,14 @@ public override void LoadMore()
188222
RaiseItemsChanged(_visibleItems.Count);
189223
}
190224

191-
private IEnumerable<ListItem> CreateListItems(IEnumerable<VisualStudioCodeWorkspace> workspaces)
225+
private List<ListItem> CreateListItems(IEnumerable<VisualStudioCodeWorkspace> workspaces)
192226
{
193-
return workspaces.Select(w =>
194-
WorkspaceItemFactory.Create(w, this, _workspaceStorage, _settingsManager, _countTracker, _refreshWorkspacesCommandContextItem, _pinService));
227+
var listItems = new List<ListItem>();
228+
foreach (var w in workspaces)
229+
{
230+
listItems.Add(WorkspaceItemFactory.Create(w, this, _workspaceStorage, _settingsManager, _countTracker, _refreshWorkspacesCommandContextItem, _pinService));
231+
}
232+
return listItems;
195233
}
196234

197235
private async Task RefreshWorkspacesAsync(bool isUserInitiated, bool isBackground = false)
@@ -297,7 +335,17 @@ private void UpdateWorkspaceList(List<VisualStudioCodeWorkspace> workspaces, Can
297335
var filtered = WorkspaceFilter.Filter(SearchText, AllWorkspaces, _settingsManager.SearchBy, _settingsManager.SortBy);
298336
_cachedFilteredWorkspaces = filtered;
299337
_visibleItems.Clear();
300-
_visibleItems.AddRange(CreateListItems(filtered.Take(_settingsManager.PageSize)));
338+
339+
var itemsToAdd = new List<ListItem>();
340+
int count = 0;
341+
foreach (var workspace in filtered)
342+
{
343+
if (count >= _settingsManager.PageSize) break;
344+
itemsToAdd.Add(WorkspaceItemFactory.Create(workspace, this, _workspaceStorage, _settingsManager, _countTracker, _refreshWorkspacesCommandContextItem, _pinService));
345+
count++;
346+
}
347+
_visibleItems.AddRange(itemsToAdd);
348+
301349
HasMoreItems = _cachedFilteredWorkspaces.Count > _settingsManager.PageSize;
302350
}
303351

@@ -354,7 +402,17 @@ public void RefreshList()
354402
{
355403
_cachedFilteredWorkspaces = WorkspaceFilter.Filter(SearchText, AllWorkspaces, _settingsManager.SearchBy, _settingsManager.SortBy);
356404
_visibleItems.Clear();
357-
_visibleItems.AddRange(CreateListItems(_cachedFilteredWorkspaces.Take(_settingsManager.PageSize)));
405+
406+
var itemsToAdd = new List<ListItem>();
407+
int count = 0;
408+
foreach (var workspace in _cachedFilteredWorkspaces)
409+
{
410+
if (count >= _settingsManager.PageSize) break;
411+
itemsToAdd.Add(WorkspaceItemFactory.Create(workspace, this, _workspaceStorage, _settingsManager, _countTracker, _refreshWorkspacesCommandContextItem, _pinService));
412+
count++;
413+
}
414+
_visibleItems.AddRange(itemsToAdd);
415+
358416
HasMoreItems = _cachedFilteredWorkspaces.Count > _settingsManager.PageSize;
359417
}
360418
RaiseItemsChanged(_visibleItems.Count);
@@ -370,19 +428,35 @@ public async Task UpdateFrequencyAsync(string path)
370428

371429
lock (_itemsLock)
372430
{
373-
var itemToUpdate = AllWorkspaces.FirstOrDefault(item => item?.Path == path);
374-
if (itemToUpdate != null)
431+
VisualStudioCodeWorkspace? itemToUpdate = null;
432+
foreach (var item in AllWorkspaces)
375433
{
376-
if (itemToUpdate != null)
434+
if (item?.Path == path)
377435
{
378-
itemToUpdate.Frequency++;
379-
itemToUpdate.LastAccessed = DateTime.Now;
436+
itemToUpdate = item;
437+
break;
380438
}
439+
}
440+
441+
if (itemToUpdate != null)
442+
{
443+
itemToUpdate.Frequency++;
444+
itemToUpdate.LastAccessed = DateTime.Now;
381445

382446
// Re-apply filter and sort
383447
_cachedFilteredWorkspaces = WorkspaceFilter.Filter(SearchText, AllWorkspaces, _settingsManager.SearchBy, _settingsManager.SortBy);
384448
_visibleItems.Clear();
385-
_visibleItems.AddRange(CreateListItems(_cachedFilteredWorkspaces.Take(_settingsManager.PageSize)));
449+
450+
var itemsToAdd = new List<ListItem>();
451+
int count = 0;
452+
foreach (var workspace in _cachedFilteredWorkspaces)
453+
{
454+
if (count >= _settingsManager.PageSize) break;
455+
itemsToAdd.Add(WorkspaceItemFactory.Create(workspace, this, _workspaceStorage, _settingsManager, _countTracker, _refreshWorkspacesCommandContextItem, _pinService));
456+
count++;
457+
}
458+
_visibleItems.AddRange(itemsToAdd);
459+
386460
HasMoreItems = _cachedFilteredWorkspaces.Count > _settingsManager.PageSize;
387461
}
388462
}

WorkspaceLauncherForVSCode/Services/VisualStudio/Models/VisualStudioInstance.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
33
using System;
44
using System.Collections.Generic;
5-
using System.Linq;
65
using System.Text.Json;
76
using System.Xml;
87
using WorkspaceLauncherForVSCode.Classes;
@@ -47,21 +46,29 @@ public IEnumerable<CodeContainer> GetCodeContainers()
4746
var codeContainersString = GetCodeContainersPath();
4847
if (string.IsNullOrWhiteSpace(codeContainersString))
4948
{
50-
return Enumerable.Empty<CodeContainer>();
49+
return new List<CodeContainer>();
5150
}
5251

5352
try
5453
{
5554
var containers = JsonSerializer.Deserialize(codeContainersString, CodeContainerSerializerContext.Default.ListCodeContainer);
5655

57-
return containers == null
58-
? Enumerable.Empty<CodeContainer>()
59-
: containers.Select(c => new CodeContainer(c, this));
56+
if (containers == null)
57+
{
58+
return new List<CodeContainer>();
59+
}
60+
61+
var results = new List<CodeContainer>(containers.Count);
62+
foreach (var c in containers)
63+
{
64+
results.Add(new CodeContainer(c, this));
65+
}
66+
return results;
6067
}
6168
catch (Exception ex)
6269
{
6370
ErrorLogger.LogError(ex);
64-
return Enumerable.Empty<CodeContainer>();
71+
return new List<CodeContainer>();
6572
}
6673
}
6774

@@ -107,4 +114,4 @@ public IEnumerable<CodeContainer> GetCodeContainers()
107114
}
108115
}
109116
}
110-
}
117+
}

WorkspaceLauncherForVSCode/Services/VisualStudio/VisualStudioService.cs

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System.Collections.ObjectModel;
66
using System.Diagnostics;
77
using System.IO;
8-
using System.Linq;
98
using System.Text.Json;
109
using WorkspaceLauncherForVSCode.Classes;
1110
using WorkspaceLauncherForVSCode.Services.VisualStudio.Models.Json;
@@ -19,6 +18,7 @@ public class VisualStudioService
1918
private const string VsWhereDir = @"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer";
2019
private const string VsWhereBin = "vswhere.exe";
2120
private const string VisualStudioDataDir = @"%LOCALAPPDATA%\Microsoft\VisualStudio";
21+
private const int SingleDirectory = 0;
2222

2323
private List<VsCodeModels.VisualStudioInstance>? _instances;
2424

@@ -92,7 +92,16 @@ public void InitInstances(string[] excludedVersions)
9292
continue;
9393
}
9494

95-
if (excludedVersions.Contains(instance.Catalog.ProductLineVersion))
95+
bool isExcluded = false;
96+
foreach (var excluded in excludedVersions)
97+
{
98+
if (excluded == instance.Catalog.ProductLineVersion)
99+
{
100+
isExcluded = true;
101+
break;
102+
}
103+
}
104+
if (isExcluded)
96105
{
97106
continue;
98107
}
@@ -128,22 +137,47 @@ public void InitInstances(string[] excludedVersions)
128137
{
129138
if (_instances == null)
130139
{
131-
return Enumerable.Empty<VsCodeModels.CodeContainer>();
140+
return new List<VsCodeModels.CodeContainer>();
132141
}
133142

134-
var query = _instances.AsEnumerable();
135-
143+
var filteredInstances = new List<VsCodeModels.VisualStudioInstance>();
136144
if (!showPrerelease)
137145
{
138-
query = query.Where(i => !i.IsPrerelease);
146+
foreach (var instance in _instances)
147+
{
148+
if (!instance.IsPrerelease)
149+
{
150+
filteredInstances.Add(instance);
151+
}
152+
}
153+
}
154+
else
155+
{
156+
filteredInstances.AddRange(_instances);
157+
}
158+
159+
var results = new List<VsCodeModels.CodeContainer>();
160+
foreach (var instance in filteredInstances)
161+
{
162+
results.AddRange(instance.GetCodeContainers());
139163
}
140164

141-
return query.SelectMany(i => i.GetCodeContainers()).OrderBy(c => c.Name).ThenBy(c => c.Instance.IsPrerelease);
165+
results.Sort((a, b) =>
166+
{
167+
int nameCompare = string.Compare(a.Name, b.Name, StringComparison.Ordinal);
168+
if (nameCompare != 0)
169+
{
170+
return nameCompare;
171+
}
172+
return a.Instance.IsPrerelease.CompareTo(b.Instance.IsPrerelease);
173+
});
174+
175+
return results;
142176
}
143177
catch (Exception ex)
144178
{
145179
ErrorLogger.LogError(ex);
146-
return Enumerable.Empty<VsCodeModels.CodeContainer>();
180+
return new List<VsCodeModels.CodeContainer>();
147181
}
148182
}
149183

@@ -152,14 +186,19 @@ public void InitInstances(string[] excludedVersions)
152186
try
153187
{
154188
var dataPath = Environment.ExpandEnvironmentVariables(VisualStudioDataDir);
155-
var directory = Directory.EnumerateDirectories(dataPath, $"*{instanceId}", SearchOption.TopDirectoryOnly)
156-
.Select(d => new DirectoryInfo(d))
157-
.Where(d => !d.Name.StartsWith("SettingsBackup_", StringComparison.Ordinal))
158-
.ToArray();
189+
var matchingDirs = new List<DirectoryInfo>();
190+
foreach (var dir in Directory.EnumerateDirectories(dataPath, $"*{instanceId}", SearchOption.TopDirectoryOnly))
191+
{
192+
var dirInfo = new DirectoryInfo(dir);
193+
if (!dirInfo.Name.StartsWith("SettingsBackup_", StringComparison.Ordinal))
194+
{
195+
matchingDirs.Add(dirInfo);
196+
}
197+
}
159198

160-
if (directory.Length == 1)
199+
if (matchingDirs.Count == 1)
161200
{
162-
var applicationPrivateSettingspath = Path.Combine(directory[0].FullName, "ApplicationPrivateSettings.xml");
201+
var applicationPrivateSettingspath = Path.Combine(matchingDirs[SingleDirectory].FullName, "ApplicationPrivateSettings.xml");
163202

164203
if (File.Exists(applicationPrivateSettingspath))
165204
{
@@ -175,4 +214,4 @@ public void InitInstances(string[] excludedVersions)
175214
return null;
176215
}
177216
}
178-
}
217+
}

0 commit comments

Comments
 (0)