Skip to content

Commit

Permalink
Inherit from FSharpContextActionBase.
Browse files Browse the repository at this point in the history
  • Loading branch information
nojaf committed Jul 28, 2022
1 parent cf3210c commit c8c71c7
Showing 1 changed file with 27 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -1,22 +1,33 @@
namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Features.ContextActions

open System
open System.IO
open JetBrains.Application.UI.ActionsRevised.Menu
open JetBrains.ReSharper.Feature.Services.ContextActions
open JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Intentions
open type JetBrains.ReSharper.Psi.PsiSourceFileExtensions

[<ContextAction(Group = "F#", Name = "Generate signature file for current file", Priority = 1s,
Description = "Generate signature file for current file.")>]
type GenerateSignatureFileAction(dataProvider: FSharpContextActionDataProvider) =
interface IExecutableAction with
member this.Update(context, presentation, nextUpdate) =
let sourceFile = dataProvider.SourceFile.Name
let fsiFile = Path.ChangeExtension(sourceFile, ".fsi")
not (File.Exists fsiFile)

member this.Execute(context, nextExecute) =
let sourceFile = dataProvider.SourceFile.Name
let fsiFile = Path.ChangeExtension(sourceFile, ".fsi")
let currentFSharpFile = dataProvider.PsiFile
let fcsService = currentFSharpFile.FcsCheckerService
let checkResult = fcsService.ParseAndCheckFile(currentFSharpFile.GetSourceFile(), "for signature file", true)
inherit FSharpContextActionBase(dataProvider)

override this.Text = "Generate signature file for current file"

override this.IsAvailable _ =
let currentFSharpFile = dataProvider.PsiFile
let fcsService = currentFSharpFile.FcsCheckerService
let hasSignature = fcsService.FcsProjectProvider.HasPairFile dataProvider.SourceFile
not hasSignature

override this.ExecutePsiTransaction(solution, _) =
let project = dataProvider.SourceFile.GetProject()

let physicalPath = dataProvider.SourceFile.ToProjectFile().Location.FileAccessPath
let fsiFile = Path.ChangeExtension(physicalPath, ".fsi")
let currentFSharpFile = dataProvider.PsiFile
let fcsService = currentFSharpFile.FcsCheckerService
let checkResult = fcsService.ParseAndCheckFile(currentFSharpFile.GetSourceFile(), "for signature file", true)
do
match checkResult with
| None -> ()
| Some { CheckResults = checkResult } ->
Expand All @@ -25,4 +36,6 @@ type GenerateSignatureFileAction(dataProvider: FSharpContextActionDataProvider)
| None -> ()
| Some signatureSourceText ->
let content = string signatureSourceText
File.WriteAllText(fsiFile, content)
File.WriteAllText(fsiFile, content)

Action<_>(ignore)

0 comments on commit c8c71c7

Please sign in to comment.