@@ -9,6 +9,7 @@ open System.Collections.Concurrent
99open System.Collections .Generic
1010open System.Collections .Immutable
1111open System.ComponentModel .Composition
12+ open System.ComponentModel .Design
1213open System.Diagnostics
1314open System.IO
1415open System.Linq
@@ -305,53 +306,96 @@ type internal FSharpCheckerWorkspaceServiceFactory
305306member this.Checker = checkerProvider.Checker
306307member this.FSharpProjectOptionsManager = projectInfoManager}
307308
308- type
309- [<Guid( FSharpConstants.packageGuidString) >]
310- [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.IntelliSenseOptionPage>, " F#" , null , " IntelliSense" , " 6008" ) >]
311- [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.QuickInfoOptionPage>, " F#" , null , " QuickInfo" , " 6009" ) >]
312- [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.CodeFixesOptionPage>, " F#" , null , " Code Fixes" , " 6010" ) >]
313- [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.LanguageServicePerformanceOptionPage>, " F#" , null , " Performance" , " 6011" ) >]
314- [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.AdvancedSettingsOptionPage>, " F#" , null , " Advanced" , " 6012" ) >]
315- [<ProvideFSharpVersionRegistration( FSharpConstants.projectPackageGuidString, " Microsoft Visual F#" ) >]
316- [<ProvideLanguageService( languageService= typeof< FSharpLanguageService>,
317- strLanguageName= FSharpConstants.FSharpLanguageName,
318- languageResourceID= 100 ,
319- MatchBraces= true ,
320- MatchBracesAtCaret= true ,
321- ShowCompletion= true ,
322- ShowMatchingBrace= true ,
323- ShowSmartIndent= true ,
324- EnableAsyncCompletion= true ,
325- QuickInfo= true ,
326- DefaultToInsertSpaces= true ,
327- CodeSense= true ,
328- DefaultToNonHotURLs= true ,
329- RequestStockColors= true ,
330- EnableCommenting= true ,
331- CodeSenseDelay= 100 ,
332- ShowDropDownOptions= true ) >]
333- internal FSharpPackage() =
309+ [<Guid( FSharpConstants.packageGuidString) >]
310+ [<ProvideOptionPage( typeof< Microsoft.VisualStudio.FSharp.Interactive.FsiPropertyPage>,
311+ " F# Tools" , " F# Interactive" , // category/sub-category on Tools>Options...
312+ 6000 s, 6001 s, // resource id for localisation of the above
313+ true ) >]// true = supports automation
314+ [<ProvideKeyBindingTable( " {dee22b65-9761-4a26-8fb2-759b971d6dfc}" , 6001 s) >] // <-- resource ID for localised name
315+ [<ProvideToolWindow( typeof< Microsoft.VisualStudio.FSharp.Interactive.FsiToolWindow>,
316+ // The following should place the ToolWindow with the OutputWindow by default.
317+ Orientation= ToolWindowOrientation.Bottom,
318+ Style= VsDockStyle.Tabbed,
319+ PositionX= 0 ,
320+ PositionY= 0 ,
321+ Width= 360 ,
322+ Height= 120 ,
323+ Window= " 34E76E81-EE4A-11D0-AE2E-00A0C90FFFC3" ) >]
324+ [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.IntelliSenseOptionPage>, " F#" , null , " IntelliSense" , " 6008" ) >]
325+ [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.QuickInfoOptionPage>, " F#" , null , " QuickInfo" , " 6009" ) >]
326+ [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.CodeFixesOptionPage>, " F#" , null , " Code Fixes" , " 6010" ) >]
327+ [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.LanguageServicePerformanceOptionPage>, " F#" , null , " Performance" , " 6011" ) >]
328+ [<ProvideLanguageEditorOptionPage( typeof< OptionsUI.AdvancedSettingsOptionPage>, " F#" , null , " Advanced" , " 6012" ) >]
329+ [<ProvideFSharpVersionRegistration( FSharpConstants.projectPackageGuidString, " Microsoft Visual F#" ) >]
330+ // 64 represents a hex number. It needs to be greater than 37 so the TextMate editor will not be chosen as higher priority.
331+ [<ProvideEditorExtension( typeof< FSharpEditorFactory>, " .fs" , 64 ) >]
332+ [<ProvideEditorExtension( typeof< FSharpEditorFactory>, " .fsi" , 64 ) >]
333+ [<ProvideEditorExtension( typeof< FSharpEditorFactory>, " .fsscript" , 64 ) >]
334+ [<ProvideEditorExtension( typeof< FSharpEditorFactory>, " .fsx" , 64 ) >]
335+ [<ProvideEditorExtension( typeof< FSharpEditorFactory>, " .ml" , 64 ) >]
336+ [<ProvideEditorExtension( typeof< FSharpEditorFactory>, " .mli" , 64 ) >]
337+ [<ProvideEditorFactory( typeof< FSharpEditorFactory>, 101 s, CommonPhysicalViewAttributes= Constants.FSharpEditorFactoryPhysicalViewAttributes) >]
338+ [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .fs" ) >]
339+ [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .fsi" ) >]
340+ [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .fsx" ) >]
341+ [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .fsscript" ) >]
342+ [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .ml" ) >]
343+ [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .mli" ) >]
344+ [<ProvideLanguageService( languageService= typeof< FSharpLanguageService>,
345+ strLanguageName= FSharpConstants.FSharpLanguageName,
346+ languageResourceID= 100 ,
347+ MatchBraces= true ,
348+ MatchBracesAtCaret= true ,
349+ ShowCompletion= true ,
350+ ShowMatchingBrace= true ,
351+ ShowSmartIndent= true ,
352+ EnableAsyncCompletion= true ,
353+ QuickInfo= true ,
354+ DefaultToInsertSpaces= true ,
355+ CodeSense= true ,
356+ DefaultToNonHotURLs= true ,
357+ RequestStockColors= true ,
358+ EnableCommenting= true ,
359+ CodeSenseDelay= 100 ,
360+ ShowDropDownOptions= true ) >]
361+ type internal FSharpPackage () as this=
334362inherit AbstractPackage< FSharpPackage, FSharpLanguageService>()
335363
364+ let mutable vfsiToolWindow = Unchecked.defaultof< Microsoft.VisualStudio.FSharp.Interactive.FsiToolWindow>
365+ let GetToolWindowAsITestVFSI () =
366+ if vfsiToolWindow= Unchecked.defaultof<_> then
367+ vfsiToolWindow<- this.FindToolWindow( typeof< Microsoft.VisualStudio.FSharp.Interactive.FsiToolWindow>, 0 , true ) :?> Microsoft.VisualStudio.FSharp.Interactive.FsiToolWindow
368+ vfsiToolWindow:> Microsoft.VisualStudio.FSharp.Interactive.ITestVFSI
369+
370+ // FSI-LINKAGE-POINT: unsited init
371+ do Microsoft.VisualStudio.FSharp.Interactive.Hooks.fsiConsoleWindowPackageCtorUnsited( this:> Package)
372+
336373override this.Initialize () =
337374base .Initialize()
375+
338376 this.ComponentModel.GetService< SettingsPersistence.ISettings>() |> ignore
339377
378+ // FSI-LINKAGE-POINT: sited init
379+ let commandService = this.GetService( typeof< IMenuCommandService>) :?> OleMenuCommandService// FSI-LINKAGE-POINT
380+ Microsoft.VisualStudio.FSharp.Interactive.Hooks.fsiConsoleWindowPackageInitalizeSited( this:> Package) commandService
381+ // FSI-LINKAGE-POINT: private method GetDialogPage forces fsi options to be loaded
382+ let _fsiPropertyPage = this.GetDialogPage( typeof< Microsoft.VisualStudio.FSharp.Interactive.FsiPropertyPage>)
383+ ()
384+
340385override this.RoslynLanguageName = FSharpConstants.FSharpLanguageName
341386override this.CreateWorkspace () = this.ComponentModel.GetService< VisualStudioWorkspaceImpl>()
342387override this.CreateLanguageService () = FSharpLanguageService( this)
343- override this.CreateEditorFactories () = Seq.empty < IVsEditorFactory >
388+ override this.CreateEditorFactories () = seq { yield FSharpEditorFactory ( this ) :> IVsEditorFactory }
344389override this.RegisterMiscellaneousFilesWorkspaceInformation ( _ ) = ()
345390
346- type
347- [<Guid( FSharpConstants.languageServiceGuidString) >]
348- [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .fs" ) >]
349- [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .fsi" ) >]
350- [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .fsx" ) >]
351- [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .fsscript" ) >]
352- [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .ml" ) >]
353- [<ProvideLanguageExtension( typeof< FSharpLanguageService>, " .mli" ) >]
354- internal FSharpLanguageService( package: FSharpPackage) =
391+ interface Microsoft.VisualStudio.FSharp.Interactive.ITestVFSIwith
392+ member this.SendTextInteraction ( s : string ) =
393+ GetToolWindowAsITestVFSI() .SendTextInteraction( s)
394+ member this.GetMostRecentLines ( n : int ) : string [] =
395+ GetToolWindowAsITestVFSI() .GetMostRecentLines( n)
396+
397+ [<Guid( FSharpConstants.languageServiceGuidString) >]
398+ type internal FSharpLanguageService ( package : FSharpPackage ) =
355399inherit AbstractLanguageService< FSharpPackage, FSharpLanguageService>( package)
356400
357401let projectInfoManager = package.ComponentModel.DefaultExportProvider.GetExport< FSharpProjectOptionsManager>() .Value