Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,13 @@ module private FSharpProjectOptionsHelpers =
let v2 = p2.GetDependentVersionAsync(ct).Result
v1 <> v2))

let inline isProjectInvalidated (oldProject: Project) (newProject: Project) ct =
hasProjectVersionChanged oldProject newProject
|| hasDependentVersionChanged oldProject newProject ct
let isProjectInvalidated (oldProject: Project) (newProject: Project) ct =
let hasProjectVersionChanged = hasProjectVersionChanged oldProject newProject

if newProject.AreFSharpInMemoryCrossProjectReferencesEnabled then
hasProjectVersionChanged || hasDependentVersionChanged oldProject newProject ct
else
hasProjectVersionChanged

[<RequireQualifiedAccess>]
type private FSharpProjectOptionsMessage =
Expand Down Expand Up @@ -272,20 +276,21 @@ type private FSharpProjectOptionsReactor(checker: FSharpChecker) =

let referencedProjects = ResizeArray()

for projectReference in project.ProjectReferences do
let referencedProject = project.Solution.GetProject(projectReference.ProjectId)

if referencedProject.Language = FSharpConstants.FSharpLanguageName then
match! tryComputeOptions referencedProject ct with
| None -> canBail <- true
| Some (_, projectOptions) ->
referencedProjects.Add(
FSharpReferencedProject.FSharpReference(referencedProject.OutputFilePath, projectOptions)
)
elif referencedProject.SupportsCompilation then
let! comp = referencedProject.GetCompilationAsync(ct) |> Async.AwaitTask
let peRef = createPEReference referencedProject comp
referencedProjects.Add(peRef)
if project.AreFSharpInMemoryCrossProjectReferencesEnabled then
for projectReference in project.ProjectReferences do
let referencedProject = project.Solution.GetProject(projectReference.ProjectId)

if referencedProject.Language = FSharpConstants.FSharpLanguageName then
match! tryComputeOptions referencedProject ct with
| None -> canBail <- true
| Some (_, projectOptions) ->
referencedProjects.Add(
FSharpReferencedProject.FSharpReference(referencedProject.OutputFilePath, projectOptions)
)
elif referencedProject.SupportsCompilation then
let! comp = referencedProject.GetCompilationAsync(ct) |> Async.AwaitTask
let peRef = createPEReference referencedProject comp
referencedProjects.Add(peRef)

if canBail then
return None
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@ type internal FSharpWorkspaceServiceFactory [<Composition.ImportingConstructor>]

let useSyntaxTreeCache = editorOptions.LanguageServicePerformance.UseSyntaxTreeCache

let enableInMemoryCrossProjectReferences =
editorOptions.LanguageServicePerformance.EnableInMemoryCrossProjectReferences

let enableFastFindReferences =
editorOptions.LanguageServicePerformance.EnableFastFindReferencesAndRename

Expand Down Expand Up @@ -156,6 +159,7 @@ type internal FSharpWorkspaceServiceFactory [<Composition.ImportingConstructor>]
nameof enableLiveBuffers, enableLiveBuffers
nameof useSyntaxTreeCache, useSyntaxTreeCache
nameof enableParallelReferenceResolution, enableParallelReferenceResolution
nameof enableInMemoryCrossProjectReferences, enableInMemoryCrossProjectReferences
nameof enableFastFindReferences, enableFastFindReferences
nameof isInlineParameterNameHintsEnabled, isInlineParameterNameHintsEnabled
nameof isInlineTypeHintsEnabled, isInlineTypeHintsEnabled
Expand Down
5 changes: 5 additions & 0 deletions vsintegration/src/FSharp.Editor/Options/EditorOptions.fs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ type CodeFixesOptions =
[<CLIMutable>]
type LanguageServicePerformanceOptions =
{
EnableInMemoryCrossProjectReferences: bool
AllowStaleCompletionResults: bool
TimeUntilStaleCompletion: int
EnableParallelReferenceResolution: bool
Expand All @@ -92,6 +93,7 @@ type LanguageServicePerformanceOptions =

static member Default =
{
EnableInMemoryCrossProjectReferences = true
AllowStaleCompletionResults = true
TimeUntilStaleCompletion = 2000 // In ms, so this is 2 seconds
EnableParallelReferenceResolution = false
Expand Down Expand Up @@ -227,6 +229,9 @@ module EditorOptionsExtensions =
member private this.EditorOptions =
this.Solution.Workspace.Services.GetService<EditorOptions>()

member this.AreFSharpInMemoryCrossProjectReferencesEnabled =
this.EditorOptions.LanguageServicePerformance.EnableInMemoryCrossProjectReferences

member this.IsFSharpCodeFixesAlwaysPlaceOpensAtTopLevelEnabled =
this.EditorOptions.CodeFixes.AlwaysPlaceOpensAtTopLevel

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@
<StackPanel>
<GroupBox Header="{x:Static local:Strings.Project_Performance}">
<StackPanel>
<CheckBox x:Name="enableInMemoryCrossProjectReferences"
IsChecked="{Binding EnableInMemoryCrossProjectReferences}"
Content="{x:Static local:Strings.Enable_in_memory_cross_project_references}"
ToolTip="{x:Static local:Strings.Tooltip_in_memory_cross_project_references}"/>
<CheckBox x:Name="enablePartialTypeChecking"
IsChecked="{Binding EnablePartialTypeChecking}"
Content="{x:Static local:Strings.Enable_partial_type_checking}" />
Expand Down
18 changes: 18 additions & 0 deletions vsintegration/src/FSharp.UIResources/Strings.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions vsintegration/src/FSharp.UIResources/Strings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,9 @@
<data name="Show_completion_list_after_a_character_is_typed" xml:space="preserve">
<value>_Show completion list after a character is typed</value>
</data>
<data name="Enable_in_memory_cross_project_references" xml:space="preserve">
<value>_Enable in-memory cross project references</value>
</data>
<data name="Show_navigation_links_as" xml:space="preserve">
<value>S_how navigation links as</value>
</data>
Expand Down Expand Up @@ -192,6 +195,9 @@
<data name="Enable_Stale_IntelliSense_Results" xml:space="preserve">
<value>Enable stale data for IntelliSense features</value>
</data>
<data name="Tooltip_in_memory_cross_project_references" xml:space="preserve">
<value>In-memory cross-project references store project-level data in memory to allow IDE features to work across projects.</value>
</data>
<data name="Enter_key_always" xml:space="preserve">
<value>Always add new line on enter</value>
</data>
Expand Down
10 changes: 10 additions & 0 deletions vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading