Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5096e69

Browse files
authored
Merge pull requestdotnet#4652 from Microsoft/merges/master-to-dev15.8
Merge master to dev15.8
2 parents453df4d +4537cbe commit5096e69

File tree

14 files changed

+328
-390
lines changed

14 files changed

+328
-390
lines changed

‎vsintegration/src/FSharp.Editor/Commands/FsiCommandService.fs‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@ open Microsoft.VisualStudio.FSharp.Interactive
1717

1818
typeinternalFsiCommandFilter(serviceProvider: System.IServiceProvider)=
1919

20-
letprojectSystemPackage=
20+
letloadPackage(guidString:string)=
2121
lazy(
2222
letshell= serviceProvider.GetService(typeof<SVsShell>):?> IVsShell
23-
letpackageToBeLoadedGuid= ref(Guid"{91a04a73-4f2c-4e7c-ad38-c1a68e7da05c}")// FSharp ProjectSystem guid
23+
letpackageToBeLoadedGuid= ref(Guid(guidString))
2424
match shell.LoadPackage packageToBeLoadedGuidwith
2525
| VSConstants.S_OK, pkg->
2626
pkg:?> Package
2727
|_->null)
2828

29+
letfsiPackage= loadPackage FSharpConstants.fsiPackageGuidString
30+
2931
let mutablenextTarget=null
3032

3133
memberx.AttachToViewAdapter(viewAdapter:IVsTextView)=
@@ -38,13 +40,13 @@ type internal FsiCommandFilter(serviceProvider: System.IServiceProvider) =
3840
interface IOleCommandTargetwith
3941
memberx.Exec(pguidCmdGroup,nCmdId,nCmdexecopt,pvaIn,pvaOut)=
4042
if pguidCmdGroup= VSConstants.VsStd11&& nCmdId= uint32 VSConstants.VSStd11CmdID.ExecuteSelectionInInteractivethen
41-
Hooks.OnMLSendprojectSystemPackage.Value FsiEditorSendAction.ExecuteSelectionnullnull
43+
Hooks.OnMLSendfsiPackage.Value FsiEditorSendAction.ExecuteSelectionnullnull
4244
VSConstants.S_OK
4345
elif pguidCmdGroup= VSConstants.VsStd11&& nCmdId= uint32 VSConstants.VSStd11CmdID.ExecuteLineInInteractivethen
44-
Hooks.OnMLSendprojectSystemPackage.Value FsiEditorSendAction.ExecuteLinenullnull
46+
Hooks.OnMLSendfsiPackage.Value FsiEditorSendAction.ExecuteLinenullnull
4547
VSConstants.S_OK
4648
elif pguidCmdGroup= Guids.guidInteractive&& nCmdId= uint32 Guids.cmdIDDebugSelectionthen
47-
Hooks.OnMLSendprojectSystemPackage.Value FsiEditorSendAction.DebugSelectionnullnull
49+
Hooks.OnMLSendfsiPackage.Value FsiEditorSendAction.DebugSelectionnullnull
4850
VSConstants.S_OK
4951
elifnot(isNull nextTarget)then
5052
nextTarget.Exec(&pguidCmdGroup, nCmdId, nCmdexecopt, pvaIn, pvaOut)
@@ -62,7 +64,7 @@ type internal FsiCommandFilter(serviceProvider: System.IServiceProvider) =
6264
elif pguidCmdGroup= Guids.guidInteractivethen
6365
for i=0to int cCmds-1do
6466
if prgCmds.[i].cmdID= uint32 Guids.cmdIDDebugSelectionthen
65-
letdbgState= Hooks.GetDebuggerStateprojectSystemPackage.Value
67+
letdbgState= Hooks.GetDebuggerStatefsiPackage.Value
6668
if dbgState= FsiDebuggerState.AttachedNotToFSIthen
6769
prgCmds.[i].cmdf<- uint32 OLECMDF.OLECMDF_INVISIBLE
6870
else

‎vsintegration/src/FSharp.Editor/Common/Constants.fs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ module internal FSharpConstants =
1010
[<Literal>]
1111
/// "871D2A70-12A2-4e42-9440-425DD92A4116"
1212
letpackageGuidString="871D2A70-12A2-4e42-9440-425DD92A4116"
13+
14+
[<Literal>]
15+
/// "871D2A70-12A2-4e42-9440-425DD92A4116" - FSharp Package
16+
letfsiPackageGuidString="871D2A70-12A2-4e42-9440-425DD92A4116"
1317

1418
[<Literal>]
1519
/// "BC6DD5A5-D4D6-4dab-A00D-A51242DBAF1B"

‎vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
<CompileInclude="Options\SettingsPersistence.fs" />
3939
<CompileInclude="Options\UIHelpers.fs" />
4040
<CompileInclude="Options\EditorOptions.fs" />
41+
<CompileInclude="LanguageService\FSharpEditorFactory.fs" />
42+
<CompileInclude="LanguageService\TextViewCreationListener.fs" />
4143
<CompileInclude="LanguageService\Tokenizer.fs" />
4244
<CompileInclude="LanguageService\Symbols.fs" />
4345
<CompileInclude="LanguageService\FSharpCheckerExtensions.fs" />
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
namespaceMicrosoft.VisualStudio.FSharp.Editor
2+
3+
openSystem
4+
openSystem.Runtime.InteropServices
5+
openMicrosoft.VisualStudio
6+
openMicrosoft.VisualStudio.Editor
7+
openMicrosoft.VisualStudio.Shell
8+
openMicrosoft.VisualStudio.Shell.Interop
9+
openMicrosoft.VisualStudio.TextManager.Interop
10+
openMicrosoft.VisualStudio.Utilities
11+
openMicrosoft.VisualStudio.ComponentModelHost
12+
13+
typeShellPackage= Microsoft.VisualStudio.Shell.Package
14+
15+
[<RequireQualifiedAccess>]
16+
moduleConstants=
17+
18+
[<Literal>]
19+
letFSharpEditorFactoryIdString="8a5aa6cf-46e3-4520-a70a-7393d15233e9"
20+
21+
[<Literal>]
22+
letFSharpContentType="F#"
23+
24+
// _VSPHYSICALVIEWATTRIBUTES.PVA_SupportsPreview = 2
25+
// F# doesn't allow to express a cast of an enum as a literal; we have to put the number here directly.
26+
[<Literal>]
27+
letFSharpEditorFactoryPhysicalViewAttributes=2
28+
29+
[<Guid(Constants.FSharpEditorFactoryIdString)>]
30+
typeFSharpEditorFactory(parentPackage: ShellPackage)=
31+
32+
letserviceProvider=
33+
if parentPackage=nullthen
34+
nullArg"parentPackage"
35+
parentPackage:> IServiceProvider
36+
letcomponentModel= serviceProvider.GetService(typeof<SComponentModel>):?> IComponentModel
37+
leteditorAdaptersFactoryService= componentModel.GetService<IVsEditorAdaptersFactoryService>()
38+
letcontentTypeRegistryService= componentModel.GetService<IContentTypeRegistryService>()
39+
40+
letsetWindowBuffer oleServiceProvider(textBuffer:IVsTextBuffer)(ppunkDocView:byref<nativeint>)(ppunkDocData:byref<nativeint>)(pbstrEditorCaption:byref<string>)=
41+
// If the text buffer is marked as read-only, ensure that the padlock icon is displayed
42+
// next the new window's title and that [Read Only] is appended to title.
43+
letreadOnlyFlags=
44+
(BUFFERSTATEFLAGS.BSF_FILESYS_READONLY||| BUFFERSTATEFLAGS.BSF_USER_READONLY)
45+
|> LanguagePrimitives.EnumToValue
46+
|> uint32
47+
48+
let mutabletextBufferFlags=0u
49+
letreadOnlyStatus=
50+
if(ErrorHandler.Succeeded(textBuffer.GetStateFlags(&textBufferFlags))&&0u<>(textBufferFlags&&& readOnlyFlags))then
51+
READONLYSTATUS.ROSTATUS_ReadOnly
52+
else
53+
READONLYSTATUS.ROSTATUS_NotReadOnly
54+
55+
letcodeWindow= editorAdaptersFactoryService.CreateVsCodeWindowAdapter(oleServiceProvider);
56+
codeWindow.SetBuffer(textBuffer:?> IVsTextLines)
57+
|> ignore
58+
codeWindow.GetEditorCaption(readOnlyStatus,&pbstrEditorCaption)
59+
|> ignore
60+
61+
ppunkDocView<- Marshal.GetIUnknownForObject(codeWindow);
62+
ppunkDocData<- Marshal.GetIUnknownForObject(textBuffer);
63+
64+
VSConstants.S_OK;
65+
66+
let mutableoleServiceProviderOpt= None
67+
68+
interface IVsEditorFactorywith
69+
70+
member__.Close()= VSConstants.S_OK
71+
72+
member__.CreateEditorInstance(_grfCreateDoc,_pszMkDocument,_pszPhysicalView,_pvHier,_itemid,punkDocDataExisting,ppunkDocView,ppunkDocData,pbstrEditorCaption,pguidCmdUI,pgrfCDW)=
73+
ppunkDocView<- IntPtr.Zero
74+
ppunkDocData<- IntPtr.Zero
75+
pbstrEditorCaption<- String.Empty
76+
77+
//pguidCmdUI is the highest priority Guid that Visual Studio Shell looks at when translating key strokes into editor commands.
78+
//Here we intentionally set it to Guid.Empty so it will not play a part in translating keystrokes at all. The next highest priority
79+
//will be commands tied to this FSharpEditorFactory (such as Alt-Enter).
80+
//However, because we are setting pguidCmdUI, we are not going to get typical text editor commands bound to this editor unless we inherit
81+
//those keybindings on the IVsWindowFrame in which our editor lives.
82+
pguidCmdUI<- Guid.Empty
83+
pgrfCDW<-0
84+
85+
match oleServiceProviderOptwith
86+
| None-> VSConstants.E_FAIL
87+
| Some oleServiceProvider->
88+
// Is this document already open? If so, let's see if it's a IVsTextBuffer we should re-use. This allows us
89+
// to properly handle multiple windows open for the same document.
90+
if punkDocDataExisting<> IntPtr.Zerothen
91+
match Marshal.GetObjectForIUnknown(punkDocDataExisting)with
92+
|:? IVsTextBufferas textBuffer->
93+
setWindowBuffer oleServiceProvider textBuffer&ppunkDocView&ppunkDocData&pbstrEditorCaption
94+
|_->
95+
VSConstants.VS_E_INCOMPATIBLEDOCDATA
96+
else
97+
// We need to create a text buffer now.
98+
letcontentType= contentTypeRegistryService.GetContentType(Constants.FSharpContentType)
99+
lettextBuffer= editorAdaptersFactoryService.CreateVsTextBufferAdapter(oleServiceProvider, contentType)
100+
setWindowBuffer oleServiceProvider textBuffer&ppunkDocView&ppunkDocData&pbstrEditorCaption
101+
102+
member__.MapLogicalView(rguidLogicalView,pbstrPhysicalView)=
103+
pbstrPhysicalView<-null
104+
105+
match rguidLogicalViewwith
106+
| xwhen
107+
x= VSConstants.LOGVIEWID.Primary_guid||
108+
x= VSConstants.LOGVIEWID.Debugging_guid||
109+
x= VSConstants.LOGVIEWID.Code_guid||
110+
x= VSConstants.LOGVIEWID.TextView_guid->
111+
VSConstants.S_OK
112+
|_->
113+
VSConstants.E_NOTIMPL
114+
115+
member__.SetSite(packageServiceProvider)=
116+
oleServiceProviderOpt<- Some packageServiceProvider
117+
VSConstants.S_OK
118+

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

Lines changed: 82 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ open System.Collections.Concurrent
99
openSystem.Collections.Generic
1010
openSystem.Collections.Immutable
1111
openSystem.ComponentModel.Composition
12+
openSystem.ComponentModel.Design
1213
openSystem.Diagnostics
1314
openSystem.IO
1415
openSystem.Linq
@@ -56,10 +57,10 @@ type internal FSharpCheckerProvider
5657
letmmd= amd.GetModules().[0]
5758
letmmr= mmd.GetMetadataReader()
5859

59-
// "lifetime is timed to Metadata you got from the GetMetadata(…). As long as you hold it strongly, raw
60+
// "lifetime is timed to Metadata you got from the GetMetadata(…). As long as you hold it strongly, raw
6061
// memory we got from metadata reader will be alive. Once you are done, just let everything go and
6162
// let finalizer handle resource rather than calling Dispose from Metadata directly. It is shared metadata.
62-
// You shouldn’t dispose it directly."
63+
// You shouldn’t dispose it directly."
6364

6465
letobjToHold= box md
6566

@@ -305,54 +306,96 @@ type internal FSharpCheckerWorkspaceServiceFactory
305306
memberthis.Checker= checkerProvider.Checker
306307
memberthis.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.CodeLensOptionPage>,"F#",null,"Code Lens","6012")>]
315-
[<ProvideLanguageEditorOptionPage(typeof<OptionsUI.AdvancedSettingsOptionPage>,"F#",null,"Advanced","6012")>]
316-
[<ProvideFSharpVersionRegistration(FSharpConstants.projectPackageGuidString,"Microsoft Visual F#")>]
317-
[<ProvideLanguageService(languageService= typeof<FSharpLanguageService>,
318-
strLanguageName= FSharpConstants.FSharpLanguageName,
319-
languageResourceID=100,
320-
MatchBraces=true,
321-
MatchBracesAtCaret=true,
322-
ShowCompletion=true,
323-
ShowMatchingBrace=true,
324-
ShowSmartIndent=true,
325-
EnableAsyncCompletion=true,
326-
QuickInfo=true,
327-
DefaultToInsertSpaces=true,
328-
CodeSense=true,
329-
DefaultToNonHotURLs=true,
330-
RequestStockColors=true,
331-
EnableCommenting=true,
332-
CodeSenseDelay=100,
333-
ShowDropDownOptions=true)>]
334-
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+
6000s,6001s,// resource id for localisation of the above
313+
true)>]// true = supports automation
314+
[<ProvideKeyBindingTable("{dee22b65-9761-4a26-8fb2-759b971d6dfc}",6001s)>]// <-- 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>,101s, 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+
typeinternalFSharpPackage()as this=
335362
inherit AbstractPackage<FSharpPackage, FSharpLanguageService>()
336363

364+
let mutablevfsiToolWindow= Unchecked.defaultof<Microsoft.VisualStudio.FSharp.Interactive.FsiToolWindow>
365+
letGetToolWindowAsITestVFSI()=
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+
337373
overridethis.Initialize()=
338374
base.Initialize()
375+
339376
this.ComponentModel.GetService<SettingsPersistence.ISettings>()|> ignore
340377

378+
// FSI-LINKAGE-POINT: sited init
379+
letcommandService= 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+
341385
overridethis.RoslynLanguageName= FSharpConstants.FSharpLanguageName
342386
overridethis.CreateWorkspace()= this.ComponentModel.GetService<VisualStudioWorkspaceImpl>()
343387
overridethis.CreateLanguageService()= FSharpLanguageService(this)
344-
overridethis.CreateEditorFactories()=Seq.empty<IVsEditorFactory>
388+
overridethis.CreateEditorFactories()=seq{yield FSharpEditorFactory(this):> IVsEditorFactory}
345389
overridethis.RegisterMiscellaneousFilesWorkspaceInformation(_)=()
346390

347-
type
348-
[<Guid(FSharpConstants.languageServiceGuidString)>]
349-
[<ProvideLanguageExtension(typeof<FSharpLanguageService>,".fs")>]
350-
[<ProvideLanguageExtension(typeof<FSharpLanguageService>,".fsi")>]
351-
[<ProvideLanguageExtension(typeof<FSharpLanguageService>,".fsx")>]
352-
[<ProvideLanguageExtension(typeof<FSharpLanguageService>,".fsscript")>]
353-
[<ProvideLanguageExtension(typeof<FSharpLanguageService>,".ml")>]
354-
[<ProvideLanguageExtension(typeof<FSharpLanguageService>,".mli")>]
355-
internal FSharpLanguageService(package: FSharpPackage)=
391+
interface Microsoft.VisualStudio.FSharp.Interactive.ITestVFSIwith
392+
memberthis.SendTextInteraction(s:string)=
393+
GetToolWindowAsITestVFSI().SendTextInteraction(s)
394+
memberthis.GetMostRecentLines(n:int):string[]=
395+
GetToolWindowAsITestVFSI().GetMostRecentLines(n)
396+
397+
[<Guid(FSharpConstants.languageServiceGuidString)>]
398+
typeinternalFSharpLanguageService(package: FSharpPackage)=
356399
inherit AbstractLanguageService<FSharpPackage, FSharpLanguageService>(package)
357400

358401
letprojectInfoManager= package.ComponentModel.DefaultExportProvider.GetExport<FSharpProjectOptionsManager>().Value

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp