Skip to content

Commit 49fd9d7

Browse files
authored
Merge pull request #8469 from dotnet/merges/master-to-feature/and-bang
Merge master to feature/and-bang
2 parents 83f6808 + 3cefbba commit 49fd9d7

22 files changed

+250
-23
lines changed

src/fsharp/AttributeChecking.fs

+2-1
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,10 @@ let private CheckILAttributes (g: TcGlobals) isByrefLikeTyconRef cattrs m =
265265
| _ ->
266266
CompleteD
267267

268+
let langVersionPrefix = "--langversion:preview"
269+
268270
/// Check F# attributes for 'ObsoleteAttribute', 'CompilerMessageAttribute' and 'ExperimentalAttribute',
269271
/// returning errors and warnings as data
270-
let langVersionPrefix = "--langversion:preview"
271272
let CheckFSharpAttributes (g:TcGlobals) attribs m =
272273
let isExperimentalAttributeDisabled (s:string) =
273274
if g.compilingFslib then

src/fsharp/service/service.fs

+10-4
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
742742
member bc.ParseAndCheckProject(options, userOpName) =
743743
reactor.EnqueueAndAwaitOpAsync(userOpName, "ParseAndCheckProject", options.ProjectFileName, fun ctok -> bc.ParseAndCheckProjectImpl(options, ctok, userOpName))
744744

745-
member __.GetProjectOptionsFromScript(filename, sourceText, loadedTimeStamp, otherFlags, useFsiAuxLib: bool option, useSdkRefs: bool option, assumeDotNetFramework: bool option, extraProjectInfo: obj option, optionsStamp: int64 option, userOpName) =
745+
member __.GetProjectOptionsFromScript(filename, sourceText, previewEnabled, loadedTimeStamp, otherFlags, useFsiAuxLib: bool option, useSdkRefs: bool option, assumeDotNetFramework: bool option, extraProjectInfo: obj option, optionsStamp: int64 option, userOpName) =
746746
reactor.EnqueueAndAwaitOpAsync (userOpName, "GetProjectOptionsFromScript", filename, fun ctok ->
747747
cancellable {
748748
use errors = new ErrorScope()
@@ -751,10 +751,16 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
751751
let useFsiAuxLib = defaultArg useFsiAuxLib true
752752
let useSdkRefs = defaultArg useSdkRefs true
753753
let reduceMemoryUsage = ReduceMemoryFlag.Yes
754+
let previewEnabled = defaultArg previewEnabled false
754755

755756
// Do we assume .NET Framework references for scripts?
756757
let assumeDotNetFramework = defaultArg assumeDotNetFramework true
757-
let otherFlags = defaultArg otherFlags [| |]
758+
let extraFlags =
759+
if previewEnabled then
760+
[| "--langversion:preview" |]
761+
else
762+
[||]
763+
let otherFlags = defaultArg otherFlags extraFlags
758764
let useSimpleResolution =
759765
#if ENABLE_MONO_SUPPORT
760766
runningOnMono || otherFlags |> Array.exists (fun x -> x = "--simpleresolution")
@@ -1142,9 +1148,9 @@ type FSharpChecker(legacyReferenceResolver,
11421148
backgroundCompiler.ParseAndCheckProject(options, userOpName)
11431149

11441150
/// For a given script file, get the ProjectOptions implied by the #load closure
1145-
member __.GetProjectOptionsFromScript(filename, source, ?loadedTimeStamp, ?otherFlags, ?useFsiAuxLib, ?useSdkRefs, ?assumeDotNetFramework, ?extraProjectInfo: obj, ?optionsStamp: int64, ?userOpName: string) =
1151+
member __.GetProjectOptionsFromScript(filename, source, ?previewEnabled, ?loadedTimeStamp, ?otherFlags, ?useFsiAuxLib, ?useSdkRefs, ?assumeDotNetFramework, ?extraProjectInfo: obj, ?optionsStamp: int64, ?userOpName: string) =
11461152
let userOpName = defaultArg userOpName "Unknown"
1147-
backgroundCompiler.GetProjectOptionsFromScript(filename, source, loadedTimeStamp, otherFlags, useFsiAuxLib, useSdkRefs, assumeDotNetFramework, extraProjectInfo, optionsStamp, userOpName)
1153+
backgroundCompiler.GetProjectOptionsFromScript(filename, source, previewEnabled, loadedTimeStamp, otherFlags, useFsiAuxLib, useSdkRefs, assumeDotNetFramework, extraProjectInfo, optionsStamp, userOpName)
11481154

11491155
member __.GetProjectOptionsFromCommandLineArgs(projectFileName, argv, ?loadedTimeStamp, ?extraProjectInfo: obj) =
11501156
let loadedTimeStamp = defaultArg loadedTimeStamp DateTime.MaxValue // Not 'now', we don't want to force reloading

src/fsharp/service/service.fsi

+1-1
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ type public FSharpChecker =
228228
/// so that an 'unload' and 'reload' action will cause the script to be considered as a new project,
229229
/// so that references are re-resolved.</param>
230230
/// <param name="userOpName">An optional string used for tracing compiler operations associated with this request.</param>
231-
member GetProjectOptionsFromScript : filename: string * sourceText: ISourceText * ?loadedTimeStamp: DateTime * ?otherFlags: string[] * ?useFsiAuxLib: bool * ?useSdkRefs: bool * ?assumeDotNetFramework: bool * ?extraProjectInfo: obj * ?optionsStamp: int64 * ?userOpName: string -> Async<FSharpProjectOptions * FSharpErrorInfo list>
231+
member GetProjectOptionsFromScript : filename: string * sourceText: ISourceText * ?previewEnabled:bool * ?loadedTimeStamp: DateTime * ?otherFlags: string[] * ?useFsiAuxLib: bool * ?useSdkRefs: bool * ?assumeDotNetFramework: bool * ?extraProjectInfo: obj * ?optionsStamp: int64 * ?userOpName: string -> Async<FSharpProjectOptions * FSharpErrorInfo list>
232232

233233
/// <summary>
234234
/// <para>Get the FSharpProjectOptions implied by a set of command line arguments.</para>

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ open System.Threading
2020
open Microsoft.VisualStudio.Shell.Interop
2121
open Microsoft.VisualStudio.LanguageServices.Implementation.TaskList
2222
open Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices
23+
open Microsoft.VisualStudio.FSharp.Interactive.Session
2324

2425
[<AutoOpen>]
2526
module private FSharpProjectOptionsHelpers =
@@ -97,7 +98,7 @@ type private FSharpProjectOptionsReactor (_workspace: VisualStudioWorkspace, set
9798
match singleFileCache.TryGetValue(document.Id) with
9899
| false, _ ->
99100
let! sourceText = document.GetTextAsync(ct) |> Async.AwaitTask
100-
let! scriptProjectOptions, _ = checkerProvider.Checker.GetProjectOptionsFromScript(document.FilePath, sourceText.ToFSharpSourceText())
101+
let! scriptProjectOptions, _ = checkerProvider.Checker.GetProjectOptionsFromScript(document.FilePath, sourceText.ToFSharpSourceText(), SessionsProperties.fsiPreview)
101102
let projectOptions =
102103
if isScriptFile document.FilePath then
103104
scriptProjectOptions

vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ open Microsoft.VisualStudio.TextManager.Interop
1111
open Microsoft.VisualStudio.Text
1212
open FSharp.Compiler.SourceCodeServices
1313
open Microsoft.VisualStudio.FSharp.LanguageService.SiteProvider
14+
open Microsoft.VisualStudio.FSharp.Interactive.Session
1415

1516
#nowarn "44" // use of obsolete CheckFileInProjectAllowingStaleCachedResults
1617

@@ -94,7 +95,7 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED
9495
lazy // This portion is executed on the language service thread
9596
let timestamp = if source=null then System.DateTime(2000,1,1) else source.OpenedTime // source is null in unit tests
9697
let checker = getInteractiveChecker()
97-
let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(fileName, FSharp.Compiler.Text.SourceText.ofString sourceText, timestamp, [| |]) |> Async.RunSynchronously
98+
let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(fileName, FSharp.Compiler.Text.SourceText.ofString sourceText, SessionsProperties.fsiPreview, timestamp, [| |]) |> Async.RunSynchronously
9899
let referencedProjectFileNames = [| |]
99100
let projectSite = ProjectSitesAndFiles.CreateProjectSiteForScript(fileName, referencedProjectFileNames, checkOptions)
100101
{ ProjectSite = projectSite

vsintegration/src/FSharp.VS.FSI/Properties.resx

+10
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,14 @@
148148
<data name="FSharpInteractiveDebugging" xml:space="preserve">
149149
<value>Debugging</value>
150150
</data>
151+
<data name="FSharpInteractivePreview" xml:space="preserve">
152+
<value>FSI Preview</value>
153+
</data>
154+
<data name="FSharpInteractivePreviewModeDescr" xml:space="preserve">
155+
<value>Enable preview of in-development language features in F# Interactive</value>
156+
</data>
157+
<data name="FSharpInteractivePreviewMode" xml:space="preserve">
158+
<value>Enable preview language features</value>
159+
</data>
160+
151161
</root>

vsintegration/src/FSharp.VS.FSI/fsiLanguageService.fs

+13-8
Original file line numberDiff line numberDiff line change
@@ -36,30 +36,35 @@ module internal ContentType =
3636
[<ClassInterface(ClassInterfaceType.AutoDual)>]
3737
[<Guid("4489e9de-6ac1-3cd6-bff8-a904fd0e82d4")>]
3838
type FsiPropertyPage() =
39-
inherit DialogPage()
40-
39+
inherit DialogPage()
40+
4141
[<ResourceCategory(SRProperties.FSharpInteractiveMisc)>]
42-
[<ResourceDisplayName(SRProperties.FSharpInteractive64Bit)>]
43-
[<ResourceDescription(SRProperties.FSharpInteractive64BitDescr)>]
42+
[<ResourceDisplayName(SRProperties.FSharpInteractive64Bit)>]
43+
[<ResourceDescription(SRProperties.FSharpInteractive64BitDescr)>]
4444
member this.FsiPreferAnyCPUVersion with get() = SessionsProperties.useAnyCpuVersion and set (x:bool) = SessionsProperties.useAnyCpuVersion <- x
4545

4646
[<ResourceCategory(SRProperties.FSharpInteractiveMisc)>]
4747
[<ResourceDisplayName(SRProperties.FSharpInteractiveOptions)>]
48-
[<ResourceDescription(SRProperties.FSharpInteractiveOptionsDescr)>]
48+
[<ResourceDescription(SRProperties.FSharpInteractiveOptionsDescr)>]
4949
member this.FsiCommandLineArgs with get() = SessionsProperties.fsiArgs and set (x:string) = SessionsProperties.fsiArgs <- x
5050

5151
[<ResourceCategory(SRProperties.FSharpInteractiveMisc)>]
5252
[<ResourceDisplayName(SRProperties.FSharpInteractiveShadowCopy)>]
53-
[<ResourceDescription(SRProperties.FSharpInteractiveShadowCopyDescr)>]
53+
[<ResourceDescription(SRProperties.FSharpInteractiveShadowCopyDescr)>]
5454
member this.FsiShadowCopy with get() = SessionsProperties.fsiShadowCopy and set (x:bool) = SessionsProperties.fsiShadowCopy <- x
5555

5656
[<ResourceCategory(SRProperties.FSharpInteractiveDebugging)>]
5757
[<ResourceDisplayName(SRProperties.FSharpInteractiveDebugMode)>]
58-
[<ResourceDescription(SRProperties.FSharpInteractiveDebugModeDescr)>]
58+
[<ResourceDescription(SRProperties.FSharpInteractiveDebugModeDescr)>]
5959
member this.FsiDebugMode with get() = SessionsProperties.fsiDebugMode and set (x:bool) = SessionsProperties.fsiDebugMode <- x
6060

61+
[<ResourceCategory(SRProperties.FSharpInteractivePreview)>]
62+
[<ResourceDisplayName(SRProperties.FSharpInteractivePreviewMode)>]
63+
[<ResourceDescription(SRProperties.FSharpInteractivePreviewModeDescr)>]
64+
member this.FsiPreview with get() = SessionsProperties.fsiPreview and set (x:bool) = SessionsProperties.fsiPreview <- x
65+
6166
// CompletionSet
62-
type internal FsiCompletionSet(imageList,source:Source) =
67+
type internal FsiCompletionSet(imageList,source:Source) =
6368
inherit CompletionSet(imageList, source)
6469

6570
// Declarations

vsintegration/src/FSharp.VS.FSI/sessions.fs

+14-6
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ module SessionsProperties =
7070
let mutable fsiArgs = "--optimize"
7171
let mutable fsiShadowCopy = true
7272
let mutable fsiDebugMode = false
73+
let mutable fsiPreview = false
7374

7475
// This code pre-dates the events/object system.
7576
// Later: Tidy up.
@@ -218,7 +219,7 @@ let fsiStartInfo channelName =
218219

219220
let addBoolOption name value args = sprintf "%s --%s%s" args name (if value then "+" else "-")
220221
let addStringOption name value args = sprintf "%s --%s:%O" args name value
221-
222+
222223
let procArgs =
223224
""
224225
|> addStringOption "fsi-server-output-codepage" outCP
@@ -227,11 +228,18 @@ let fsiStartInfo channelName =
227228
|> addStringOption "fsi-server" channelName
228229
|> (fun s -> s + sprintf " %s" SessionsProperties.fsiArgs)
229230
|> addBoolOption "shadowcopyreferences" SessionsProperties.fsiShadowCopy
230-
|> (fun args -> if SessionsProperties.fsiDebugMode then
231-
// for best debug experience, need optimizations OFF and debug info ON
232-
// tack these on the the end, they will override whatever comes earlier
233-
args |> addBoolOption "optimize" false |> addBoolOption "debug" true
234-
else args)
231+
|> (fun args ->
232+
// for best debug experience, need optimizations OFF and debug info ON
233+
// tack these on the the end, they will override whatever comes earlier
234+
if SessionsProperties.fsiDebugMode then
235+
args |> addBoolOption "optimize" false |> addBoolOption "debug" true
236+
else
237+
args)
238+
|> (fun args ->
239+
if SessionsProperties.fsiPreview then
240+
args |> addStringOption "langversion" "preview"
241+
else
242+
args)
235243

236244
procInfo.Arguments <- procArgs
237245
procInfo.CreateNoWindow <- true

vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf

+15
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727
<target state="translated">Různé</target>
2828
<note />
2929
</trans-unit>
30+
<trans-unit id="FSharpInteractivePreview">
31+
<source>FSI Preview</source>
32+
<target state="new">FSI Preview</target>
33+
<note />
34+
</trans-unit>
35+
<trans-unit id="FSharpInteractivePreviewMode">
36+
<source>Enable preview language features</source>
37+
<target state="new">Enable preview language features</target>
38+
<note />
39+
</trans-unit>
40+
<trans-unit id="FSharpInteractivePreviewModeDescr">
41+
<source>Enable preview of in-development language features in F# Interactive</source>
42+
<target state="new">Enable preview of in-development language features in F# Interactive</target>
43+
<note />
44+
</trans-unit>
3045
<trans-unit id="FSharpInteractiveShadowCopy">
3146
<source>Shadow copy assemblies</source>
3247
<target state="translated">Sestavení stínových kopií</target>

vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf

+15
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727
<target state="translated">Verschiedene</target>
2828
<note />
2929
</trans-unit>
30+
<trans-unit id="FSharpInteractivePreview">
31+
<source>FSI Preview</source>
32+
<target state="new">FSI Preview</target>
33+
<note />
34+
</trans-unit>
35+
<trans-unit id="FSharpInteractivePreviewMode">
36+
<source>Enable preview language features</source>
37+
<target state="new">Enable preview language features</target>
38+
<note />
39+
</trans-unit>
40+
<trans-unit id="FSharpInteractivePreviewModeDescr">
41+
<source>Enable preview of in-development language features in F# Interactive</source>
42+
<target state="new">Enable preview of in-development language features in F# Interactive</target>
43+
<note />
44+
</trans-unit>
3045
<trans-unit id="FSharpInteractiveShadowCopy">
3146
<source>Shadow copy assemblies</source>
3247
<target state="translated">Schattenkopie-Assemblys</target>

vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf

+15
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727
<target state="translated">Varios</target>
2828
<note />
2929
</trans-unit>
30+
<trans-unit id="FSharpInteractivePreview">
31+
<source>FSI Preview</source>
32+
<target state="new">FSI Preview</target>
33+
<note />
34+
</trans-unit>
35+
<trans-unit id="FSharpInteractivePreviewMode">
36+
<source>Enable preview language features</source>
37+
<target state="new">Enable preview language features</target>
38+
<note />
39+
</trans-unit>
40+
<trans-unit id="FSharpInteractivePreviewModeDescr">
41+
<source>Enable preview of in-development language features in F# Interactive</source>
42+
<target state="new">Enable preview of in-development language features in F# Interactive</target>
43+
<note />
44+
</trans-unit>
3045
<trans-unit id="FSharpInteractiveShadowCopy">
3146
<source>Shadow copy assemblies</source>
3247
<target state="translated">Ensamblados de instantánea</target>

vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf

+15
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727
<target state="translated">Divers</target>
2828
<note />
2929
</trans-unit>
30+
<trans-unit id="FSharpInteractivePreview">
31+
<source>FSI Preview</source>
32+
<target state="new">FSI Preview</target>
33+
<note />
34+
</trans-unit>
35+
<trans-unit id="FSharpInteractivePreviewMode">
36+
<source>Enable preview language features</source>
37+
<target state="new">Enable preview language features</target>
38+
<note />
39+
</trans-unit>
40+
<trans-unit id="FSharpInteractivePreviewModeDescr">
41+
<source>Enable preview of in-development language features in F# Interactive</source>
42+
<target state="new">Enable preview of in-development language features in F# Interactive</target>
43+
<note />
44+
</trans-unit>
3045
<trans-unit id="FSharpInteractiveShadowCopy">
3146
<source>Shadow copy assemblies</source>
3247
<target state="translated">Assemblys de cliché instantané</target>

vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf

+15
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727
<target state="translated">Varie</target>
2828
<note />
2929
</trans-unit>
30+
<trans-unit id="FSharpInteractivePreview">
31+
<source>FSI Preview</source>
32+
<target state="new">FSI Preview</target>
33+
<note />
34+
</trans-unit>
35+
<trans-unit id="FSharpInteractivePreviewMode">
36+
<source>Enable preview language features</source>
37+
<target state="new">Enable preview language features</target>
38+
<note />
39+
</trans-unit>
40+
<trans-unit id="FSharpInteractivePreviewModeDescr">
41+
<source>Enable preview of in-development language features in F# Interactive</source>
42+
<target state="new">Enable preview of in-development language features in F# Interactive</target>
43+
<note />
44+
</trans-unit>
3045
<trans-unit id="FSharpInteractiveShadowCopy">
3146
<source>Shadow copy assemblies</source>
3247
<target state="translated">Assembly copie shadow</target>

vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf

+15
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727
<target state="translated">その他</target>
2828
<note />
2929
</trans-unit>
30+
<trans-unit id="FSharpInteractivePreview">
31+
<source>FSI Preview</source>
32+
<target state="new">FSI Preview</target>
33+
<note />
34+
</trans-unit>
35+
<trans-unit id="FSharpInteractivePreviewMode">
36+
<source>Enable preview language features</source>
37+
<target state="new">Enable preview language features</target>
38+
<note />
39+
</trans-unit>
40+
<trans-unit id="FSharpInteractivePreviewModeDescr">
41+
<source>Enable preview of in-development language features in F# Interactive</source>
42+
<target state="new">Enable preview of in-development language features in F# Interactive</target>
43+
<note />
44+
</trans-unit>
3045
<trans-unit id="FSharpInteractiveShadowCopy">
3146
<source>Shadow copy assemblies</source>
3247
<target state="translated">シャドウ コピーのアセンブリ</target>

vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf

+15
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727
<target state="translated">기타</target>
2828
<note />
2929
</trans-unit>
30+
<trans-unit id="FSharpInteractivePreview">
31+
<source>FSI Preview</source>
32+
<target state="new">FSI Preview</target>
33+
<note />
34+
</trans-unit>
35+
<trans-unit id="FSharpInteractivePreviewMode">
36+
<source>Enable preview language features</source>
37+
<target state="new">Enable preview language features</target>
38+
<note />
39+
</trans-unit>
40+
<trans-unit id="FSharpInteractivePreviewModeDescr">
41+
<source>Enable preview of in-development language features in F# Interactive</source>
42+
<target state="new">Enable preview of in-development language features in F# Interactive</target>
43+
<note />
44+
</trans-unit>
3045
<trans-unit id="FSharpInteractiveShadowCopy">
3146
<source>Shadow copy assemblies</source>
3247
<target state="translated">섀도 복사본 어셈블리</target>

vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf

+15
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727
<target state="translated">Różne</target>
2828
<note />
2929
</trans-unit>
30+
<trans-unit id="FSharpInteractivePreview">
31+
<source>FSI Preview</source>
32+
<target state="new">FSI Preview</target>
33+
<note />
34+
</trans-unit>
35+
<trans-unit id="FSharpInteractivePreviewMode">
36+
<source>Enable preview language features</source>
37+
<target state="new">Enable preview language features</target>
38+
<note />
39+
</trans-unit>
40+
<trans-unit id="FSharpInteractivePreviewModeDescr">
41+
<source>Enable preview of in-development language features in F# Interactive</source>
42+
<target state="new">Enable preview of in-development language features in F# Interactive</target>
43+
<note />
44+
</trans-unit>
3045
<trans-unit id="FSharpInteractiveShadowCopy">
3146
<source>Shadow copy assemblies</source>
3247
<target state="translated">Zestawy kopii w tle</target>

0 commit comments

Comments
 (0)