From 08d09cb3fce978e8104ee2173c7c84d6a3708e32 Mon Sep 17 00:00:00 2001 From: Vlad Zarytovskii Date: Mon, 23 Jan 2023 15:59:11 +0100 Subject: [PATCH 1/2] Fix IFSharpFindDefinitionService MEF export --- vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj | 1 + vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs | 1 - .../src/FSharp.Editor/Navigation/GoToDefinitionService.fs | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index 7d75ba27ad8..8063fb00ce8 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -86,6 +86,7 @@ + diff --git a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs index bb84e395b8d..882b2ab574b 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs @@ -699,7 +699,6 @@ type internal FSharpNavigation | FSharpGoToDefinitionResult.NavigableItem(navItem) -> Some navItem | _ -> None ) - |> Task.FromResult member _.TryGoToDefinition(position, cancellationToken) = let gtd = GoToDefinition(metadataAsSource) diff --git a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs index db2f3c92274..ccf40e36ce9 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs @@ -29,7 +29,7 @@ type internal FSharpGoToDefinitionService /// Invoked with Peek Definition. member _.FindDefinitionsAsync (document: Document, position: int, cancellationToken: CancellationToken) = let navigation = FSharpNavigation(statusBar, metadataAsSource, document, rangeStartup) - navigation.FindDefinitions(position, cancellationToken) + navigation.FindDefinitions(position, cancellationToken) |> Task.FromResult /// Invoked with Go to Definition. /// Try to navigate to the definiton of the symbol at the symbolRange in the originDocument From 0bfcd5969e1e74904b5b9c81b104610e3bebddac Mon Sep 17 00:00:00 2001 From: Vlad Zarytovskii Date: Mon, 23 Jan 2023 15:59:56 +0100 Subject: [PATCH 2/2] Add service --- .../Navigation/FindDefinitionService.fs | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 vsintegration/src/FSharp.Editor/Navigation/FindDefinitionService.fs diff --git a/vsintegration/src/FSharp.Editor/Navigation/FindDefinitionService.fs b/vsintegration/src/FSharp.Editor/Navigation/FindDefinitionService.fs new file mode 100644 index 00000000000..fca8f8ef964 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/Navigation/FindDefinitionService.fs @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System.Composition +open System.Threading + +open FSharp.Compiler.Text.Range + +open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.ExternalAccess.FSharp.GoToDefinition + +open Microsoft.VisualStudio.Shell +open Microsoft.VisualStudio.Shell.Interop +open System.Collections.Immutable +open System.Threading.Tasks + +[)>] +[)>] +type internal FSharpFindDefinitionService + [] + (metadataAsSource: FSharpMetadataAsSourceService) = + + let statusBar = StatusBar(ServiceProvider.GlobalProvider.GetService()) + + interface IFSharpFindDefinitionService with + member _.FindDefinitionsAsync (document: Document, position: int, cancellationToken: CancellationToken) = + let navigation = FSharpNavigation(statusBar, metadataAsSource, document, rangeStartup) + let definitions = navigation.FindDefinitions(position, cancellationToken) + ImmutableArray.CreateRange(definitions) |> Task.FromResult