public GitIgnoreParser()

in src/Cli/func/Common/GitIgnoreParser.cs [29:80]


        public GitIgnoreParser(string gitIgnoreContent)
        {
            var parsed = gitIgnoreContent
                .Split('\n')
                .Select(l => l.Trim())
                .Where(l => !l.StartsWith("#"))
                .Where(l => !string.IsNullOrEmpty(l))
                .Aggregate(new List<List<string>>() { new List<string>(), new List<string>() }, (lists, line) =>
                {
                    var isNegative = line.StartsWith("!");
                    if (isNegative)
                    {
                        line = line.Substring(1);
                    }

                    if (line.StartsWith("/"))
                    {
                        line = line.Substring(1);
                    }

                    if (isNegative)
                    {
                        lists[1].Add(line);
                    }
                    else
                    {
                        lists[0].Add(line);
                    }

                    return lists;
                })
                .Select(l =>
                {
                    return l
                        .OrderBy(i => i)
                        .Select(i => new[] { PrepareRegexPattern(i), PreparePartialRegex(i) })
                        .Aggregate(new List<List<string>>() { new List<string>(), new List<string>() }, (list, prepared) =>
                        {
                            list[0].Add(prepared[0]);
                            list[1].Add(prepared[1]);
                            return list;
                        });
                })
                .Select(item => new[]
                {
                    item[0].Count > 0 ? new Regex("^((" + string.Join(")|(", item[0]) + "))\\b", RegexOptions.ECMAScript) : new Regex("$^", RegexOptions.ECMAScript),
                    item[1].Count > 0 ? new Regex("^((" + string.Join(")|(", item[1]) + "))\\b", RegexOptions.ECMAScript) : new Regex("$^", RegexOptions.ECMAScript)
                })
                .ToArray();
            _positive = parsed[0];
            _negative = parsed[1];
        }