提交 586a61ea 编写于 作者: P Paul Harrington

Merge pull request #1874 from pharring/AutoCompleteBraceChars

Expand LINQ expression for building auto-completion brace chars to reduce JIT time in the "open file" scenario.
......@@ -106,7 +106,7 @@ public bool TryGetController(ITextView textView, ITextBuffer subjectBuffer, out
return false;
}
var autobraceCompletionCharSet = GetAllAutoBraceCompletionChars(subjectBuffer);
var autobraceCompletionCharSet = GetAllAutoBraceCompletionChars(subjectBuffer.ContentType);
controller = Controller.GetInstance(
textView, subjectBuffer,
_editorOperationsFactoryService, _undoHistoryRegistry, _completionPresenter,
......@@ -116,16 +116,32 @@ public bool TryGetController(ITextView textView, ITextBuffer subjectBuffer, out
return true;
}
private ImmutableHashSet<char> GetAllAutoBraceCompletionChars(ITextBuffer subjectBuffer)
private ImmutableHashSet<char> GetAllAutoBraceCompletionChars(IContentType bufferContentType)
{
ImmutableHashSet<char> set;
if (!_autoBraceCompletionCharSet.TryGetValue(subjectBuffer.ContentType, out set))
if (!_autoBraceCompletionCharSet.TryGetValue(bufferContentType, out set))
{
set = _autoBraceCompletionChars
.Where(l => l.Metadata.ContentTypes.Any(v => subjectBuffer.ContentType.IsOfType(v)))
.SelectMany(l => l.Metadata.OpeningBraces).ToImmutableHashSet();
var builder = ImmutableHashSet.CreateBuilder<char>();
foreach (var completion in _autoBraceCompletionChars)
{
var metadata = completion.Metadata;
foreach (var contentType in metadata.ContentTypes)
{
if (bufferContentType.IsOfType(contentType))
{
foreach (var ch in metadata.OpeningBraces)
{
builder.Add(ch);
}
_autoBraceCompletionCharSet[subjectBuffer.ContentType] = set;
break;
}
}
}
set = builder.ToImmutable();
_autoBraceCompletionCharSet[bufferContentType] = set;
}
return set;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册