search v2
This commit is contained in:
10
src/SharpIDE.Application/Features/Search/SearchResult.cs
Normal file
10
src/SharpIDE.Application/Features/Search/SearchResult.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
using SharpIDE.Application.Features.SolutionDiscovery;
|
||||
|
||||
namespace SharpIDE.Application.Features.Search;
|
||||
|
||||
public class SearchResult
|
||||
{
|
||||
public required SharpIdeFile File { get; set; }
|
||||
public required int LineNumber { get; set; }
|
||||
public required string LineText { get; set; }
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Concurrent;
|
||||
using System.Diagnostics;
|
||||
using System.IO.MemoryMappedFiles;
|
||||
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
|
||||
|
||||
@@ -6,24 +7,34 @@ namespace SharpIDE.Application.Features.Search;
|
||||
|
||||
public static class SearchService
|
||||
{
|
||||
public static async Task FindInFiles(SharpIdeSolutionModel solutionModel, string searchTerm)
|
||||
public static async Task<List<SearchResult>> FindInFiles(SharpIdeSolutionModel solutionModel, string searchTerm)
|
||||
{
|
||||
if (searchTerm.Length < 4)
|
||||
{
|
||||
return;
|
||||
return [];
|
||||
}
|
||||
|
||||
var timer = Stopwatch.StartNew();
|
||||
var files = solutionModel.AllFiles;
|
||||
ConcurrentBag<string> results = [];
|
||||
ConcurrentBag<SearchResult> results = [];
|
||||
await Parallel.ForEachAsync(files, async (file, ct) =>
|
||||
{
|
||||
await foreach (var (index, line) in File.ReadLinesAsync(file.Path, ct).Index().WithCancellation(ct))
|
||||
{
|
||||
if (line.Contains(searchTerm, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
results.Add($"{file.Path} (Line {index + 1}): {line.Trim()}");
|
||||
results.Add(new SearchResult
|
||||
{
|
||||
File = file,
|
||||
LineNumber = index + 1,
|
||||
LineText = line.Trim()
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
timer.Stop();
|
||||
Console.WriteLine($"Search completed in {timer.ElapsedMilliseconds} ms. Found {results.Count} results.");
|
||||
return results.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user