コード例 #1
0
        public List <LineInfo> GetMatchesInFilePeek(string path, int lineNumber, int peekSize,
                                                    IContentSelector contentSelector)
        {
            CachedFileContent cache = LoadFile(path);

            return(GetMatchesInContent(cache, contentSelector, lineNumber - peekSize, lineNumber + peekSize));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        public List <LineInfo> GetMatchesInFile(string path, IContentSelector contentSelector)
        {
            CachedFileContent cache = LoadFile(path);

            return(GetMatchesInContent(cache, contentSelector, 1, cache.Content.Count));
        }