2016-09-01 26 views
-1

私はVisual Studioの "Displaying Matching Braces"拡張の例を調べており、コードを理解するための助けが必要です。Visual Studioのマッチングブレース拡張の例はどのように機能しますか?

最初の「BraceMatchingTagger」が作成された後、すべてのキャレット移動に対して「UpdateAtCaretPosition」関数が呼び出されます。この関数は、TagsChangedイベントを発生させています。私はここまで続く。ただし、

1)誰がこのイベントを処理していますか?

2)誰がGetTagsを呼び出しますか?

私の理解では、キャレットを移動すると「TagsChanged」イベントが発生します。エディタは何とかこれを処理します。後で、拡張機能の "GetTags"がエディタによって呼び出されます。これは正しいですか?これらの関数が呼び出される順番については完全にはっきりしていません。

誰かがこれを助けることができますか?

答えて

0

ご理解の方。 TagsChangedはVisual Studioによって処理され、UpdateAtCaretPositionが返された後GetTagsを呼び出します。呼び出しシーケンスは次のとおりです(Runtime Flowを使用して作成)。

void BraceMatchingTagger.CaretPositionChanged(CaretElement{_blinkInterval=530, _newOpacity=1., _preferredXCoordinate=2., _preferredYOffset=88., _displayedHeight=15., _displayedWidth=1., _updateNeeded=false, _isClosed=false, _emptySelection=true, _isHidden=false, _forceVirtualSpace=false, _caretGeometryNeedsToBeUpdated=true, _isContainedByView=true, _overwriteMode=false}, CaretPositionChangedEventArgs) 
    void BraceMatchingTagger.UpdateAtCaretPosition(CaretPosition) 
    . BraceMatchingTagger.GetTags(NormalizedSnapshotSpanCollection) 
    . <GetTags>d__20.System.Collections.Generic.IEnumerable<Microsoft.VisualStudio.Text.Tagging.ITagSpan<Microsoft.VisualStudio.Text.Tagging.TextMarkerTag>>.GetEnumerator() 
    true <GetTags>d__20.MoveNext() 
    true BraceMatchingTagger.FindMatchingCloseChar(SnapshotPoint{position=27}, {, }, 7, .) 
    . <GetTags>d__20.System.Collections.Generic.IEnumerator<Microsoft.VisualStudio.Text.Tagging.ITagSpan<Microsoft.VisualStudio.Text.Tagging.TextMarkerTag>>.get_Current() 
    true...false <GetTags>d__20.MoveNext() 
    void <GetTags>d__20.System.IDisposable.Dispose() 
関連する問題