提交 dcd5ed21 编写于 作者: C CyrusNajmabadi

Fast path.

上级 64b98d70
......@@ -331,43 +331,33 @@ private static bool ContainsSpaceOrAsterisk(string text)
//
// 2) For each word try to match the word against the candidate value.
//
// 3) Matching is as follows:
//
// a) Check if the word matches the candidate entirely, in an case insensitive or
// sensitive manner. If it does, return that there was an exact match.
//
// b) Check if the word is a prefix of the candidate, in a case insensitive or
// sensitive manner. If it does, return that there was a prefix match.
//
// c) If the word is entirely lowercase, then check if it is contained anywhere in the
// candidate in a case insensitive manner. If so, return that there was a substring
// match.
//
// Note: We only have a substring match if the lowercase part is prefix match of
// some word part. That way we don't match something like 'Class' when the user
// types 'a'. But we would match 'FooAttribute' (since 'Attribute' starts with
// 'a').
//
// d) If the word was not entirely lowercase, then check if it is contained in the
// candidate in a case *sensitive* manner. If so, return that there was a substring
// match.
//
// e) If the word was entirely lowercase, then attempt a special lower cased camel cased
// match. i.e. cofipro would match CodeFixProvider.
//
// f) If the word was not entirely lowercase, then attempt a normal camel cased match.
// i.e. CoFiPro would match CodeFixProvider, but CofiPro would not.
//
// g) The word is all lower case. Is it a case insensitive substring of the candidate starting
// on a part boundary of the candidate?
// 3) Matching logic is outlined in NonFuzzyMatchPatternChunk. It's not repeated here to
// prevent having multiple places to keep up to date.
//
// Only if all words have some sort of match is the pattern considered matched.
// Special case a simple pattern (alpha-numeric with no spaces). This is the common
// case and we want to prevent unnecessary overhead.
var subWordTextChunks = segment.SubWordTextChunks;
if (subWordTextChunks.Length == 1)
{
var result = MatchPatternChunk(
candidate, subWordTextChunks[0], punctuationStripped: true, fuzzyMatch: fuzzyMatch);
if (result == null)
{
return false;
}
matches.Add(result.Value);
return true;
}
else
{
var tempMatches = ArrayBuilder<PatternMatch>.GetInstance();
try
{
var subWordTextChunks = segment.SubWordTextChunks;
foreach (var subWordTextChunk in subWordTextChunks)
{
// Try to match the candidate with this word
......@@ -389,6 +379,7 @@ private static bool ContainsSpaceOrAsterisk(string text)
tempMatches.Free();
}
}
}
private static bool IsWordChar(char ch)
=> char.IsLetterOrDigit(ch) || ch == '_';
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册