/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/VisualBasic/NavigationBar/VisualBasicEditorNavigationBarItemService.vb
80 строк
4 KB
Cyrus Najmabadi
Organize VB imports
27 июн 2025, 21:53
27 июн 2025, 21:53
e9c47fd
Код
Авторство
О чём код?
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. Imports System.Composition Imports System.Threading Imports Microsoft.CodeAnalysis.Editor.Extensibility.NavigationBar Imports Microsoft.CodeAnalysis.Editor.Shared.Utilities Imports Microsoft.CodeAnalysis.Editor.VisualBasic.Utilities Imports Microsoft.CodeAnalysis.Host.Mef Imports Microsoft.CodeAnalysis.NavigationBar.RoslynNavigationBarItem Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Imports Microsoft.VisualStudio.Text Imports Microsoft.VisualStudio.Text.Editor Imports Microsoft.VisualStudio.Text.Operations Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.NavigationBar <ExportLanguageService(GetType(INavigationBarItemService), LanguageNames.VisualBasic), [Shared]> Partial Friend Class VisualBasicEditorNavigationBarItemService Inherits AbstractEditorNavigationBarItemService Private Shared ReadOnly GeneratedSymbolAnnotation As SyntaxAnnotation = New SyntaxAnnotation() Private ReadOnly _editorOperationsFactoryService As IEditorOperationsFactoryService Private ReadOnly _textUndoHistoryRegistry As ITextUndoHistoryRegistry <ImportingConstructor> <Obsolete(MefConstruction.ImportingConstructorMessage, True)> Public Sub New( threadingContext As IThreadingContext, editorOperationsFactoryService As IEditorOperationsFactoryService, textUndoHistoryRegistry As ITextUndoHistoryRegistry) MyBase.New(threadingContext) _editorOperationsFactoryService = editorOperationsFactoryService _textUndoHistoryRegistry = textUndoHistoryRegistry End Sub Friend Overrides Async Function GetNavigationLocationAsync( document As Document, item As NavigationBarItem, symbolItem As SymbolItem, textVersion As ITextVersion, cancellationToken As CancellationToken) As Task(Of (documentId As DocumentId, position As Integer, virtualSpace As Integer)) Dim navigationLocation = Await MyBase.GetNavigationLocationAsync( document, item, symbolItem, textVersion, cancellationToken).ConfigureAwait(False) Dim destinationDocument = document.Project.Solution.GetDocument(navigationLocation.documentId) Dim root = Await destinationDocument.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(False) ' If the symbol is a method symbol, we'll figure out the right location which may be in virtual space Dim methodBlock = root.FindToken(navigationLocation.position).GetAncestor(Of MethodBlockBaseSyntax)() If methodBlock IsNot Nothing Then Dim text = Await destinationDocument.GetValueTextAsync(cancellationToken).ConfigureAwait(False) Dim navPoint = NavigationPointHelpers.GetNavigationPoint(text, indentSize:=4, methodBlock) Return (navigationLocation.documentId, navPoint.Position, navPoint.VirtualSpaces) End If Return navigationLocation End Function Protected Overrides Async Function TryNavigateToItemAsync( document As Document, item As WrappedNavigationBarItem, textView As ITextView, textVersion As ITextVersion, cancellationToken As CancellationToken) As Task(Of Boolean) Dim underlying = item.UnderlyingItem Dim generateCodeItem = TryCast(underlying, AbstractGenerateCodeItem) Dim symbolItem = TryCast(underlying, SymbolItem) If generateCodeItem IsNot Nothing Then Await GenerateCodeForItemAsync(document, generateCodeItem, textView, cancellationToken).ConfigureAwait(False) Return True ElseIf symbolItem IsNot Nothing Then Await NavigateToSymbolItemAsync(document, item, symbolItem, textVersion, cancellationToken).ConfigureAwait(False) Return True End If Return False End Function End Class End Namespace