From 709ee871718f0f4360a544754f02017a01af65a7 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 19 Feb 2015 17:39:30 -0800 Subject: [PATCH] Fix spelling the pattern matcher, and avoid recomputing already computed data. --- .../Core/Shared/Utilities/PatternMatcher.cs | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Features/Core/Shared/Utilities/PatternMatcher.cs b/src/Features/Core/Shared/Utilities/PatternMatcher.cs index 403b1a03109..7560f78de37 100644 --- a/src/Features/Core/Shared/Utilities/PatternMatcher.cs +++ b/src/Features/Core/Shared/Utilities/PatternMatcher.cs @@ -138,7 +138,7 @@ public TextChunk(string text) private readonly bool _invalidPattern; private readonly Segment _fullPatternSegment; - private readonly Segment[] _dotSeparatedSegements; + private readonly Segment[] _dotSeparatedSegments; private readonly Dictionary> _stringToWordSpans = new Dictionary>(); private readonly Func> _breakIntoWordSpans = StringBreaker.BreakIntoWordParts; @@ -165,13 +165,13 @@ public PatternMatcher(string pattern, CultureInfo culture, bool verbatimIdentifi _compareInfo = culture.CompareInfo; _fullPatternSegment = new Segment(pattern, verbatimIdentifierPrefixIsWordCharacter); - _dotSeparatedSegements = pattern.Split(DotCharacterArray, StringSplitOptions.RemoveEmptyEntries) + _dotSeparatedSegments = pattern.Split(DotCharacterArray, StringSplitOptions.RemoveEmptyEntries) .Select(text => new Segment(text.Trim(), verbatimIdentifierPrefixIsWordCharacter)) .ToArray(); - _invalidPattern = _dotSeparatedSegements.Length == 0 || _dotSeparatedSegements.Any(s => s.IsInvalid); + _invalidPattern = _dotSeparatedSegments.Length == 0 || _dotSeparatedSegments.Any(s => s.IsInvalid); } - public bool IsDottedPattern => _dotSeparatedSegements.Length > 1; + public bool IsDottedPattern => _dotSeparatedSegments.Length > 1; private bool SkipMatch(string candidate) { @@ -202,7 +202,7 @@ public IEnumerable GetMatchesForLastSegmentOfPattern(string candid return null; } - return MatchSegment(candidate, _dotSeparatedSegements.Last()); + return MatchSegment(candidate, _dotSeparatedSegments.Last()); } /// @@ -227,7 +227,7 @@ public IEnumerable GetMatches(string candidate, string dottedConta // First, check that the last part of the dot separated pattern matches the name of the // candidate. If not, then there's no point in proceeding and doing the more // expensive work. - var candidateMatch = MatchSegment(candidate, _dotSeparatedSegements.Last()); + var candidateMatch = MatchSegment(candidate, _dotSeparatedSegments.Last()); if (candidateMatch == null) { return null; @@ -238,7 +238,7 @@ public IEnumerable GetMatches(string candidate, string dottedConta // -1 because the last part was checked against the name, and only the rest // of the parts are checked against the container. - if (_dotSeparatedSegements.Length - 1 > containerParts.Length) + if (_dotSeparatedSegments.Length - 1 > containerParts.Length) { // There weren't enough container parts to match against the pattern parts. // So this definitely doesn't match. @@ -249,11 +249,11 @@ public IEnumerable GetMatches(string candidate, string dottedConta // the dotted parts match up correctly. var totalMatch = candidateMatch.ToList(); - for (int i = _dotSeparatedSegements.Length - 2, j = containerParts.Length - 1; + for (int i = _dotSeparatedSegments.Length - 2, j = containerParts.Length - 1; i >= 0; i--, j--) { - var segment = _dotSeparatedSegements[i]; + var segment = _dotSeparatedSegments[i]; var containerName = containerParts[j]; var containerMatch = MatchSegment(containerName, segment); if (containerMatch == null) @@ -403,8 +403,7 @@ private static bool ContainsUpperCaseLetter(string pattern) // (Pattern: fogbar, Candidate: quuxfogbarFogBar). if (chunk.Text.Length < candidate.Length) { - var firstInstance = _compareInfo.IndexOf(candidate, chunk.Text, CompareOptions.IgnoreCase); - if (firstInstance != -1 && char.IsUpper(candidate[firstInstance])) + if (index != -1 && char.IsUpper(candidate[index])) { return new PatternMatch(PatternMatchKind.Substring, punctuationStripped, isCaseSensitive: false); } -- GitLab