Skip to content

Commit 006d7c2

Browse files
authored
VS Go to definition from C# to F# (#14377)
* WIP * WIP * WIP * WIP * WIP: get a .ctor fixup * WIP: Events are just properties * WIP: Events are just properties * WIP * WIP: Strip generic parameters while searching * WIP: Add generic params when filtering for entity * Added operators suport * Added DUs and Records support * Small refactoring * PR suggestions + possible short-circuit in search based on the xmlsig * wip * wip * Added tests
1 parent 24291f2 commit 006d7c2

File tree

7 files changed

+371
-79
lines changed

7 files changed

+371
-79
lines changed

eng/Versions.props

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,11 @@
9696
<SystemRuntimeCompilerServicesUnsafeVersion>6.0.0</SystemRuntimeCompilerServicesUnsafeVersion>
9797
<SystemValueTupleVersion>4.5.0</SystemValueTupleVersion>
9898
<!-- Versions for package groups -->
99-
<RoslynVersion>4.4.0-3.22470.1</RoslynVersion>
100-
<VisualStudioEditorPackagesVersion>17.4.196-preview</VisualStudioEditorPackagesVersion>
101-
<MicrosoftVisualStudioShellPackagesVersion>17.4.0-preview-3-32916-145</MicrosoftVisualStudioShellPackagesVersion>
102-
<VisualStudioProjectSystemPackagesVersion>17.4.342-pre</VisualStudioProjectSystemPackagesVersion>
103-
<MicrosoftVisualStudioThreadingPackagesVersion>17.4.23-alpha</MicrosoftVisualStudioThreadingPackagesVersion>
99+
<RoslynVersion>4.5.0-1.22520.13</RoslynVersion>
100+
<VisualStudioEditorPackagesVersion>17.5.49-preview</VisualStudioEditorPackagesVersion>
101+
<MicrosoftVisualStudioShellPackagesVersion>17.5.0-preview-1-33020-520</MicrosoftVisualStudioShellPackagesVersion>
102+
<VisualStudioProjectSystemPackagesVersion>17.5.202-pre-g89e17c9f72</VisualStudioProjectSystemPackagesVersion>
103+
<MicrosoftVisualStudioThreadingPackagesVersion>17.4.27</MicrosoftVisualStudioThreadingPackagesVersion>
104104
<MicrosoftBuildOverallPackagesVersion>17.4.0-preview-22469-04</MicrosoftBuildOverallPackagesVersion>
105105
<!-- Roslyn packages -->
106106
<MicrosoftCodeAnalysisEditorFeaturesVersion>$(RoslynVersion)</MicrosoftCodeAnalysisEditorFeaturesVersion>
@@ -116,7 +116,7 @@
116116
<!-- Visual Studio Shell packages -->
117117
<MicrosoftVisualStudioInteropVersion>$(MicrosoftVisualStudioShellPackagesVersion)</MicrosoftVisualStudioInteropVersion>
118118
<MicrosoftInternalVisualStudioInteropVersion>$(MicrosoftVisualStudioShellPackagesVersion)</MicrosoftInternalVisualStudioInteropVersion>
119-
<MicrosoftVisualStudioImagingInterop140DesignTimeVersion>17.4.0-preview-3-32916-053</MicrosoftVisualStudioImagingInterop140DesignTimeVersion>
119+
<MicrosoftVisualStudioImagingInterop140DesignTimeVersion>17.5.0-preview-1-33019-447</MicrosoftVisualStudioImagingInterop140DesignTimeVersion>
120120
<MicrosoftVisualStudioShellInterop80Version>$(MicrosoftVisualStudioShellPackagesVersion)</MicrosoftVisualStudioShellInterop80Version>
121121
<MicrosoftVisualStudioShellInterop90Version>$(MicrosoftVisualStudioShellPackagesVersion)</MicrosoftVisualStudioShellInterop90Version>
122122
<MicrosoftVisualStudioShellInterop100Version>$(MicrosoftVisualStudioShellPackagesVersion)</MicrosoftVisualStudioShellInterop100Version>
@@ -133,8 +133,8 @@
133133
<MicrosoftVisualStudioShellDesignVersion>$(MicrosoftVisualStudioShellPackagesVersion)</MicrosoftVisualStudioShellDesignVersion>
134134
<MicrosoftVisualStudioShellFrameworkVersion>$(MicrosoftVisualStudioShellPackagesVersion)</MicrosoftVisualStudioShellFrameworkVersion>
135135
<MicrosoftVisualStudioPackageLanguageService150Version>$(MicrosoftVisualStudioShellPackagesVersion)</MicrosoftVisualStudioPackageLanguageService150Version>
136-
<MicrosoftVisualStudioManagedInterfacesVersion>17.4.0-preview-3-32916-053</MicrosoftVisualStudioManagedInterfacesVersion>
137-
<MicrosoftVisualStudioProjectAggregatorVersion>17.4.0-preview-3-32916-053</MicrosoftVisualStudioProjectAggregatorVersion>
136+
<MicrosoftVisualStudioManagedInterfacesVersion>17.5.0-preview-1-33019-447</MicrosoftVisualStudioManagedInterfacesVersion>
137+
<MicrosoftVisualStudioProjectAggregatorVersion>17.5.0-preview-1-33019-447</MicrosoftVisualStudioProjectAggregatorVersion>
138138
<MicrosoftVisualStudioGraphModelVersion>$(MicrosoftVisualStudioShellPackagesVersion)</MicrosoftVisualStudioGraphModelVersion>
139139
<MicrosoftVisualStudioImagingVersion>$(MicrosoftVisualStudioShellPackagesVersion)</MicrosoftVisualStudioImagingVersion>
140140
<MicrosoftVisualStudioDesignerInterfacesVersion>$(MicrosoftVisualStudioShellPackagesVersion)</MicrosoftVisualStudioDesignerInterfacesVersion>
@@ -171,7 +171,7 @@
171171
<MicrosoftVisualStudioProjectSystemManagedVersion>2.3.6152103</MicrosoftVisualStudioProjectSystemManagedVersion>
172172
<!-- Misc. Visual Studio packages -->
173173
<MicrosoftVSSDKBuildToolsVersion>17.1.4054</MicrosoftVSSDKBuildToolsVersion>
174-
<MicrosoftVisualStudioRpcContractsVersion>17.4.7-alpha</MicrosoftVisualStudioRpcContractsVersion>
174+
<MicrosoftVisualStudioRpcContractsVersion>17.5.9-alpha-g84529e7115</MicrosoftVisualStudioRpcContractsVersion>
175175
<MicrosoftVisualFSharpMicrosoftVisualStudioShellUIInternalVersion>17.0.0</MicrosoftVisualFSharpMicrosoftVisualStudioShellUIInternalVersion>
176176
<MicrosoftVisualStudioValidationVersion>17.0.64</MicrosoftVisualStudioValidationVersion>
177177
<MicrosoftVisualStudioWCFReferenceInteropVersion>9.0.30729</MicrosoftVisualStudioWCFReferenceInteropVersion>
@@ -204,8 +204,8 @@
204204
<NUnitLiteVersion>3.11.0</NUnitLiteVersion>
205205
<NunitXmlTestLoggerVersion>2.1.80</NunitXmlTestLoggerVersion>
206206
<RoslynToolsSignToolVersion>1.0.0-beta2-dev3</RoslynToolsSignToolVersion>
207-
<StreamJsonRpcVersion>2.13.23-alpha</StreamJsonRpcVersion>
208-
<NerdbankStreamsVersion>2.9.87-alpha</NerdbankStreamsVersion>
207+
<StreamJsonRpcVersion>2.14.6-alpha</StreamJsonRpcVersion>
208+
<NerdbankStreamsVersion>2.9.112</NerdbankStreamsVersion>
209209
<XUnitVersion>2.4.1</XUnitVersion>
210210
<XUnitRunnerVersion>2.4.2</XUnitRunnerVersion>
211211
<FluentAssertionsVersion>5.10.3</FluentAssertionsVersion>

src/Compiler/Symbols/Symbols.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1777,7 +1777,7 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
17771777
if isUnresolved() then false else
17781778
match fsharpInfo() with
17791779
| None -> false
1780-
| Some v ->
1780+
| Some v ->
17811781
v.IsCompilerGenerated
17821782

17831783
member _.InlineAnnotation =

vsintegration/src/FSharp.Editor/LanguageService/MetadataAsSource.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ module internal MetadataAsSource =
9494

9595
[<Sealed>]
9696
[<Export(typeof<FSharpMetadataAsSourceService>); Composition.Shared>]
97-
type internal FSharpMetadataAsSourceService() =
97+
type FSharpMetadataAsSourceService() =
9898

9999
let serviceProvider = ServiceProvider.GlobalProvider
100100
let projs = System.Collections.Concurrent.ConcurrentDictionary<string, IFSharpWorkspaceProjectContext>()

vsintegration/src/FSharp.Editor/LanguageService/WorkspaceExtensions.fs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,17 +91,16 @@ module private CheckerExtensions =
9191
}
9292

9393
[<RequireQualifiedAccess>]
94-
module private ProjectCache =
94+
module internal ProjectCache =
9595

9696
/// This is a cache to maintain FSharpParsingOptions and FSharpProjectOptions per Roslyn Project.
9797
/// The Roslyn Project is held weakly meaning when it is cleaned up by the GC, the FSharParsingOptions and FSharpProjectOptions will be cleaned up by the GC.
9898
/// At some point, this will be the main caching mechanism for FCS projects instead of FCS itself.
9999
let Projects = ConditionalWeakTable<Project, FSharpChecker * FSharpProjectOptionsManager * FSharpParsingOptions * FSharpProjectOptions>()
100100

101101
type Solution with
102-
103102
/// Get the instance of IFSharpWorkspaceService.
104-
member private this.GetFSharpWorkspaceService() =
103+
member internal this.GetFSharpWorkspaceService() =
105104
this.Workspace.Services.GetRequiredService<IFSharpWorkspaceService>()
106105

107106
type Document with
@@ -247,3 +246,20 @@ type Project with
247246
do! doc.FindFSharpReferencesAsync(symbol, (fun textSpan range -> onFound doc textSpan range), userOpName)
248247
|> RoslynHelpers.StartAsyncAsTask ct
249248
}
249+
250+
member this.GetFSharpCompilationOptionsAsync(ct: CancellationToken) =
251+
backgroundTask {
252+
if this.IsFSharp then
253+
match ProjectCache.Projects.TryGetValue(this) with
254+
| true, result -> return result
255+
| _ ->
256+
let service = this.Solution.GetFSharpWorkspaceService()
257+
let projectOptionsManager = service.FSharpProjectOptionsManager
258+
match! projectOptionsManager.TryGetOptionsByProject(this, ct) with
259+
| None -> return raise(OperationCanceledException("FSharp project options not found."))
260+
| Some(parsingOptions, projectOptions) ->
261+
let result = (service.Checker, projectOptionsManager, parsingOptions, projectOptions)
262+
return ProjectCache.Projects.GetValue(this, ConditionalWeakTable<_,_>.CreateValueCallback(fun _ -> result))
263+
else
264+
return raise(OperationCanceledException("Project is not a FSharp project."))
265+
}

0 commit comments

Comments
 (0)