Skip to content

Commit 770ab1f

Browse files
committed
Raw outline of feature proposal.
1 parent 4c6e9bc commit 770ab1f

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

ReSharper.FSharp/src/FSharp.Psi.Intentions/FSharp.Psi.Intentions.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<Compile Include="src\Intentions\SetNameAction.fs" />
2626
<Compile Include="src\Intentions\LetToUseAction.fs" />
2727
<Compile Include="src\Intentions\RenameFileToMatchTypeNameAction.fs" />
28+
<Compile Include="src\Intentions\GenerateSignatureFileAction.fs" />
2829
<Compile Include="src\QuickFixes\FSharpQuickFixBase.fs" />
2930
<Compile Include="src\QuickFixes\RemoveUnusedOpensFix.fs" />
3031
<Compile Include="src\QuickFixes\ReplaceUseWithLetFix.fs" />
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Features.ContextActions
2+
3+
open System.IO
4+
open JetBrains.Application.UI.ActionsRevised.Menu
5+
open JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Intentions
6+
7+
type GenerateSignatureFileAction(dataProvider: FSharpContextActionDataProvider) =
8+
interface IExecutableAction with
9+
member this.Update(context, presentation, nextUpdate) =
10+
let sourceFile = dataProvider.SourceFile.Name
11+
let fsiFile = Path.ChangeExtension(sourceFile, ".fsi")
12+
not (File.Exists fsiFile)
13+
14+
member this.Execute(context, nextExecute) =
15+
let sourceFile = dataProvider.SourceFile.Name
16+
let fsiFile = Path.ChangeExtension(sourceFile, ".fsi")
17+
let currentFSharpFile = dataProvider.PsiFile
18+
let fcsService = currentFSharpFile.FcsCheckerService
19+
let checkResult = fcsService.ParseAndCheckFile(currentFSharpFile.GetSourceFile(), "for signature file", true)
20+
match checkResult with
21+
| None -> ()
22+
| Some { CheckResults = checkResult } ->
23+
24+
match checkResult.GenerateSignature() with
25+
| None -> ()
26+
| Some signatureSourceText ->
27+
let content = string signatureSourceText
28+
File.WriteAllText(fsiFile, content)

0 commit comments

Comments
 (0)