Skip to content

Commit 8176794

Browse files
committed
Add signature file to current project.
1 parent c8c71c7 commit 8176794

File tree

1 file changed

+30
-18
lines changed

1 file changed

+30
-18
lines changed
Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Features.ContextActions
22

3-
open System
43
open System.IO
4+
open JetBrains.ProjectModel.ProjectsHost
5+
open JetBrains.RdBackend.Common.Features.ProjectModel
6+
open JetBrains.RdBackend.Common.Features.ProjectModel.View.Ordering
57
open JetBrains.ReSharper.Feature.Services.ContextActions
68
open JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Intentions
79
open type JetBrains.ReSharper.Psi.PsiSourceFileExtensions
@@ -20,22 +22,32 @@ type GenerateSignatureFileAction(dataProvider: FSharpContextActionDataProvider)
2022
not hasSignature
2123

2224
override this.ExecutePsiTransaction(solution, _) =
23-
let project = dataProvider.SourceFile.GetProject()
24-
25+
let projectFile = dataProvider.SourceFile.ToProjectFile()
2526
let physicalPath = dataProvider.SourceFile.ToProjectFile().Location.FileAccessPath
26-
let fsiFile = Path.ChangeExtension(physicalPath, ".fsi")
27-
let currentFSharpFile = dataProvider.PsiFile
28-
let fcsService = currentFSharpFile.FcsCheckerService
29-
let checkResult = fcsService.ParseAndCheckFile(currentFSharpFile.GetSourceFile(), "for signature file", true)
30-
do
31-
match checkResult with
32-
| None -> ()
33-
| Some { CheckResults = checkResult } ->
34-
35-
match checkResult.GenerateSignature() with
36-
| None -> ()
37-
| Some signatureSourceText ->
38-
let content = string signatureSourceText
39-
File.WriteAllText(fsiFile, content)
27+
let fsiFile = Path.ChangeExtension(physicalPath, ".fsi")
28+
29+
try
30+
let currentFSharpFile = dataProvider.PsiFile
31+
let fcsService = currentFSharpFile.FcsCheckerService
32+
let checkResult = fcsService.ParseAndCheckFile(currentFSharpFile.GetSourceFile(), "for signature file", true)
33+
do
34+
match checkResult with
35+
| None -> ()
36+
| Some { CheckResults = checkResult } ->
37+
38+
match checkResult.GenerateSignature() with
39+
| None -> ()
40+
| Some signatureSourceText ->
41+
let content = string signatureSourceText
42+
File.WriteAllText(fsiFile, content)
43+
with ex ->
44+
// TODO: show some balloon thing?
45+
()
46+
47+
solution.InvokeUnderTransaction(fun transactionCookie ->
48+
let virtualPath = FileSystemPath.TryParse(fsiFile).ToVirtualFileSystemPath()
49+
let relativeTo = RelativeTo(projectFile, RelativeToType.Before)
50+
transactionCookie.AddFile(projectFile.ParentFolder, virtualPath, context = OrderingContext(relativeTo))
51+
|> ignore)
4052

41-
Action<_>(ignore)
53+
null

0 commit comments

Comments
 (0)