提交 709ee871 编写于 作者: C Cyrus Najmabadi

Fix spelling the pattern matcher, and avoid recomputing already computed data.

上级 92476dc1
......@@ -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<string, List<TextSpan>> _stringToWordSpans = new Dictionary<string, List<TextSpan>>();
private readonly Func<string, List<TextSpan>> _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<PatternMatch> GetMatchesForLastSegmentOfPattern(string candid
return null;
}
return MatchSegment(candidate, _dotSeparatedSegements.Last());
return MatchSegment(candidate, _dotSeparatedSegments.Last());
}
/// <summary>
......@@ -227,7 +227,7 @@ public IEnumerable<PatternMatch> 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<PatternMatch> 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<PatternMatch> 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);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册