public List <LineInfo> GetMatchesInFilePeek(string path, int lineNumber, int peekSize, IContentSelector contentSelector) { CachedFileContent cache = LoadFile(path); return(GetMatchesInContent(cache, contentSelector, lineNumber - peekSize, lineNumber + peekSize)); }
private CachedFileContent LoadFile(string path) { CachedFileContent cache; if (!_filesContentCache.TryGetValue(path, out cache)) { List <string> lines = File.ReadLines(path).ToList(); cache = new CachedFileContent(path, lines); _filesContentCache.AddOrUpdate(path, cache, (s, file) => cache); } return(cache); }
private List <LineInfo> GetMatchesInContent(CachedFileContent fileContent, IContentSelector contentSelector, int lineMin, int lineMax) { List <LineInfo> lineInfos = new List <LineInfo>(); var index = 1; foreach (string line in fileContent.Content) { if (index >= lineMin && index <= lineMax) { LineInfo lineInfo = fileContent.GetCachedLinfoForLine(index - 1); if (lineInfo == null) { lineInfo = new LineInfo(line, index, contentSelector.GetMatches(line).OrderBy(l => l.Begin).ToList()); fileContent.SetCachedLinfoForLine(index - 1, lineInfo); } lineInfos.Add(lineInfo); } ++index; } return(lineInfos); }
public List <LineInfo> GetMatchesInFile(string path, IContentSelector contentSelector) { CachedFileContent cache = LoadFile(path); return(GetMatchesInContent(cache, contentSelector, 1, cache.Content.Count)); }