diff --git a/.gitignore b/.gitignore
index f542344247..c66b175e19 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
**/.DS_Store
NuGet.Config
-.gradle/
\ No newline at end of file
+.gradle/
+ReSharper.Fsharp.sln.DotSettings.user
diff --git a/ReSharper.FSharp/src/FSharp.Psi.Features/FSharp.Psi.Features.fsproj b/ReSharper.FSharp/src/FSharp.Psi.Features/FSharp.Psi.Features.fsproj
index 86889c7aa4..457cb67b8c 100644
--- a/ReSharper.FSharp/src/FSharp.Psi.Features/FSharp.Psi.Features.fsproj
+++ b/ReSharper.FSharp/src/FSharp.Psi.Features/FSharp.Psi.Features.fsproj
@@ -122,6 +122,7 @@
+
@@ -131,11 +132,12 @@
-
+
+
QUICKFIX
JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Daemon.QuickFixes
diff --git a/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionArgumentTypesAnnotationAction.fs b/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionArgumentTypesAnnotationAction.fs
new file mode 100644
index 0000000000..1601e79c8a
--- /dev/null
+++ b/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionArgumentTypesAnnotationAction.fs
@@ -0,0 +1,21 @@
+namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Intentions
+
+open JetBrains.ReSharper.Feature.Services.ContextActions
+open JetBrains.ReSharper.Plugins.FSharp.Psi.Impl
+open JetBrains.ReSharper.Plugins.FSharp.Psi.Tree
+
+[]
+type FunctionArgumentTypesAnnotationAction(dataProvider: FSharpContextActionDataProvider) =
+ inherit SpecifyTypes.FunctionAnnotationActionBase(dataProvider)
+
+ override this.IsAnnotated (binding: IBinding) =
+ match binding.HeadPattern with
+ | :? IParametersOwnerPat as parametersOwner ->
+ parametersOwner.ParametersEnumerable |> Seq.forall (fun pat -> pat.IgnoreInnerParens() :? ITypedPat)
+ | _ -> true
+
+ override this.Text = "Add parameter type annotations"
+ override this.ApplyFunctionAnnotation parametersOwner binding mfv displayContext =
+ if isNotNull parametersOwner then
+ SpecifyTypes.specifyArgumentTypes parametersOwner binding mfv displayContext
diff --git a/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionReturnTypeAnnotationAction.fs b/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionReturnTypeAnnotationAction.fs
new file mode 100644
index 0000000000..2c618da8ea
--- /dev/null
+++ b/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionReturnTypeAnnotationAction.fs
@@ -0,0 +1,16 @@
+namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Intentions
+
+open JetBrains.ReSharper.Feature.Services.ContextActions
+open JetBrains.ReSharper.Plugins.FSharp.Psi.Tree
+
+[]
+type FunctionReturnTypeAnnotationAction(dataProvider: FSharpContextActionDataProvider) =
+ inherit SpecifyTypes.FunctionAnnotationActionBase(dataProvider)
+
+ override this.IsAnnotated (binding: IBinding) = isNotNull binding.ReturnTypeInfo
+
+ override x.Text = "Add return type annotation"
+ override this.ApplyFunctionAnnotation _parametersOwner binding mfv displayContext =
+ if isNull binding.ReturnTypeInfo then
+ SpecifyTypes.specifyBindingReturnType binding mfv displayContext
diff --git a/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionAnnotationAction.fs b/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/SpecifyTypes.fs
similarity index 56%
rename from ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionAnnotationAction.fs
rename to ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/SpecifyTypes.fs
index f0db101a8e..91bab96bcf 100644
--- a/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionAnnotationAction.fs
+++ b/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/SpecifyTypes.fs
@@ -2,7 +2,6 @@
open FSharp.Compiler.SourceCodeServices
open JetBrains.Application.Settings
-open JetBrains.ReSharper.Feature.Services.ContextActions
open JetBrains.ReSharper.Plugins.FSharp.Psi
open JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Util
open JetBrains.ReSharper.Plugins.FSharp.Psi.Impl
@@ -12,49 +11,50 @@ open JetBrains.ReSharper.Plugins.FSharp.Services.Formatter
open JetBrains.ReSharper.Psi.ExtensionsAPI
open JetBrains.ReSharper.Psi.ExtensionsAPI.Tree
open JetBrains.ReSharper.Psi.Tree
+open JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Intentions
open JetBrains.ReSharper.Resources.Shell
module SpecifyTypes =
- let specifyBindingReturnType (binding: IBinding) (mfv: FSharpMemberOrFunctionOrValue) displayContext =
- let typeString =
- let fullType = mfv.FullType
- if fullType.IsFunctionType then
- let specifiedTypesCount =
- match binding.HeadPattern with
- | :? IParametersOwnerPat as pat -> pat.Parameters.Count
- | _ -> 0
-
- let types = FcsTypesUtil.getFunctionTypeArgs fullType
- if types.Length <= specifiedTypesCount then mfv.ReturnParameter.Type.Format(displayContext) else
-
- let remainingTypes = types |> List.skip specifiedTypesCount
- remainingTypes
- |> List.map (fun fcsType ->
- let typeString = fcsType.Format(displayContext)
- if fcsType.IsFunctionType then sprintf "(%s)" typeString else typeString)
- |> String.concat " -> "
- else
- mfv.ReturnParameter.Type.Format(displayContext)
-
+ []
+ type FunctionAnnotationActionBase(dataProvider: FSharpContextActionDataProvider) =
+ inherit FSharpContextActionBase(dataProvider)
+
+ abstract member IsAnnotated: IBinding -> bool
+ abstract member ApplyFunctionAnnotation: IParametersOwnerPat -> IBinding -> FSharpMemberOrFunctionOrValue -> FSharpDisplayContext -> unit
+
+ override this.IsAvailable _ =
+ let letBindings = dataProvider.GetSelectedElement()
+ if isNull letBindings then false else
+
+ let bindings = letBindings.Bindings
+ if bindings.Count <> 1 then false else
+
+ isAtLetExprKeywordOrNamedPat dataProvider letBindings &&
+ bindings |> Seq.exactlyOne |> this.IsAnnotated |> not
+ override this.ExecutePsiTransaction _ =
+ let letBindings = dataProvider.GetSelectedElement()
+ let binding = letBindings.Bindings |> Seq.exactlyOne
+
+ use writeCookie = WriteLockCookie.Create(binding.IsPhysical())
+ use disableFormatter = new DisableCodeFormatter()
+
+ let namedPat = binding.HeadPattern.As()
+ if isNull namedPat then () else
+
+ let symbolUse = namedPat.GetFSharpSymbolUse()
+ if isNull symbolUse then () else
+
+ let mfv = symbolUse.Symbol :?> FSharpMemberOrFunctionOrValue
+ let displayContext = symbolUse.DisplayContext
+
+ let parametersOwner = namedPat.As()
+ this.ApplyFunctionAnnotation parametersOwner binding mfv displayContext
+ let specifyArgumentTypes
+ (parameterOwner: IParametersOwnerPat)
+ (binding: IBinding)
+ (mfv: FSharpMemberOrFunctionOrValue)
+ (displayContext: FSharpDisplayContext) =
let factory = binding.CreateElementFactory()
- let typeUsage = factory.CreateTypeUsage(typeString)
-
- let pat = binding.HeadPattern
- let returnTypeInfo = ModificationUtil.AddChildAfter(pat, factory.CreateReturnTypeInfo(typeUsage))
-
- let settingsStore = pat.GetSettingsStoreWithEditorConfig()
- if settingsStore.GetValue(fun (key: FSharpFormatSettingsKey) -> key.SpaceBeforeColon) then
- ModificationUtil.AddChildBefore(returnTypeInfo, Whitespace()) |> ignore
-
-
-[]
-type FunctionAnnotationAction(dataProvider: FSharpContextActionDataProvider) =
- inherit FSharpContextActionBase(dataProvider)
-
- let specifyParameterTypes
- (parameterOwner: IParametersOwnerPat) (factory: IFSharpElementFactory)
- (mfv: FSharpMemberOrFunctionOrValue) displayContext =
let addParens pattern =
let parenPat = factory.CreateParenPat()
@@ -79,45 +79,36 @@ type FunctionAnnotationAction(dataProvider: FSharpContextActionDataProvider) =
replaceWithCopy parameter parenPat
- let isAnnotated (binding: IBinding) =
- isNotNull binding.ReturnTypeInfo &&
-
- match binding.HeadPattern with
- | :? IParametersOwnerPat as parametersOwner ->
- parametersOwner.ParametersEnumerable |> Seq.forall (fun pat -> pat.IgnoreInnerParens() :? ITypedPat)
- | _ -> true
-
- override x.Text = "Add type annotations"
-
- override x.IsAvailable _ =
- let letBindings = dataProvider.GetSelectedElement()
- if isNull letBindings then false else
+ let specifyBindingReturnType
+ (binding: IBinding)
+ (mfv: FSharpMemberOrFunctionOrValue)
+ (displayContext: FSharpDisplayContext) =
+ let typeString =
+ let fullType = mfv.FullType
+ if fullType.IsFunctionType then
+ let specifiedTypesCount =
+ match binding.HeadPattern with
+ | :? IParametersOwnerPat as pat -> pat.Parameters.Count
+ | _ -> 0
- let bindings = letBindings.Bindings
- if bindings.Count <> 1 then false else
+ let types = FcsTypesUtil.getFunctionTypeArgs fullType
+ if types.Length <= specifiedTypesCount then mfv.ReturnParameter.Type.Format(displayContext) else
- isAtLetExprKeywordOrNamedPat dataProvider letBindings && not (isAnnotated bindings.[0])
+ let remainingTypes = types |> List.skip specifiedTypesCount
+ remainingTypes
+ |> List.map (fun fcsType ->
+ let typeString = fcsType.Format(displayContext)
+ if fcsType.IsFunctionType then sprintf "(%s)" typeString else typeString)
+ |> String.concat " -> "
+ else
+ mfv.ReturnParameter.Type.Format(displayContext)
- override x.ExecutePsiTransaction _ =
- let letBindings = dataProvider.GetSelectedElement()
- let binding = letBindings.Bindings |> Seq.exactlyOne
let factory = binding.CreateElementFactory()
+ let typeUsage = factory.CreateTypeUsage(typeString)
- use writeCookie = WriteLockCookie.Create(binding.IsPhysical())
- use disableFormatter = new DisableCodeFormatter()
-
- let namedPat = binding.HeadPattern.As()
- if isNull namedPat then () else
-
- let symbolUse = namedPat.GetFSharpSymbolUse()
- if isNull symbolUse then () else
-
- let mfv = symbolUse.Symbol :?> FSharpMemberOrFunctionOrValue
- let displayContext = symbolUse.DisplayContext
-
- let parametersOwner = namedPat.As()
- if isNotNull parametersOwner then
- specifyParameterTypes parametersOwner factory mfv displayContext
+ let pat = binding.HeadPattern
+ let returnTypeInfo = ModificationUtil.AddChildAfter(pat, factory.CreateReturnTypeInfo(typeUsage))
- if isNull binding.ReturnTypeInfo then
- SpecifyTypes.specifyBindingReturnType binding mfv displayContext
+ let settingsStore = pat.GetSettingsStoreWithEditorConfig()
+ if settingsStore.GetValue(fun (key: FSharpFormatSettingsKey) -> key.SpaceBeforeColon) then
+ ModificationUtil.AddChildBefore(returnTypeInfo, Whitespace()) |> ignore
\ No newline at end of file
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Caret on let binding.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Caret on let binding.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Caret on let binding.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Caret on let binding.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Caret on let binding.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Caret on let binding.fs.gold
new file mode 100644
index 0000000000..07114fa4dd
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Caret on let binding.fs.gold
@@ -0,0 +1,3 @@
+module Module
+
+let{caret} f (a: string) (b: int) = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Formatting - Add space.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Formatting - Add space.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Formatting - Add space.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Formatting - Add space.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Formatting - Add space.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Formatting - Add space.fs.gold
new file mode 100644
index 0000000000..05047c1165
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Formatting - Add space.fs.gold
@@ -0,0 +1,3 @@
+module Module
+
+let f{caret} (a : string) (b : int) = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Local 01.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Local 01.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Local 01.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Local 01.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Local 01.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Local 01.fs.gold
new file mode 100644
index 0000000000..a03ae339e0
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Local 01.fs.gold
@@ -0,0 +1,5 @@
+module Module
+
+do
+ let f{caret} (a: string) (b: int) = sprintf "%s %d" a b
+ ()
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 01 - Tuple.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 01 - Tuple.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 01 - Tuple.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 01 - Tuple.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 01 - Tuple.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 01 - Tuple.fs.gold
new file mode 100644
index 0000000000..9fbe4c3832
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 01 - Tuple.fs.gold
@@ -0,0 +1,4 @@
+module Module
+
+let f{caret} ((a, b): int * int) =
+ a + b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 02 - Wild.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 02 - Wild.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 02 - Wild.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 02 - Wild.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 02 - Wild.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 02 - Wild.fs.gold
new file mode 100644
index 0000000000..4748c4bcca
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 02 - Wild.fs.gold
@@ -0,0 +1,4 @@
+module Module
+
+let f{caret} (_: 'a) =
+ ()
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 03 - List.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 03 - List.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 03 - List.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 03 - List.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 03 - List.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 03 - List.fs.gold
new file mode 100644
index 0000000000..e8624832af
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 03 - List.fs.gold
@@ -0,0 +1,4 @@
+module Module
+
+let f{caret} ([]: 'a list) =
+ ()
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 04 - As.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 04 - As.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 04 - As.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 04 - As.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 04 - As.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 04 - As.fs.gold
new file mode 100644
index 0000000000..e3b06bde75
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 04 - As.fs.gold
@@ -0,0 +1,4 @@
+module Module
+
+let f{caret} (a as b: int) =
+ a + b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 05 - Param owner.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 05 - Param owner.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 05 - Param owner.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 05 - Param owner.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 05 - Param owner.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 05 - Param owner.fs.gold
new file mode 100644
index 0000000000..e611d79f72
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 05 - Param owner.fs.gold
@@ -0,0 +1,4 @@
+module Module
+
+let f{caret} (Some 123: int option) =
+ ()
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 01 - Parens.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 01 - Parens.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 01 - Parens.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 01 - Parens.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 01 - Parens.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 01 - Parens.fs.gold
new file mode 100644
index 0000000000..45c5d7d73b
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 01 - Parens.fs.gold
@@ -0,0 +1,3 @@
+module Module
+
+let f{caret} (a: string) (b: int) = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 03 - Tuple.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 03 - Tuple.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 03 - Tuple.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 03 - Tuple.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 03 - Tuple.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 03 - Tuple.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 03 - Tuple.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 03 - Tuple.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 04 - Nested tuple.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 04 - Nested tuple.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 04 - Nested tuple.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 04 - Nested tuple.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 04 - Nested tuple.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 04 - Nested tuple.fs.gold
similarity index 54%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 04 - Nested tuple.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 04 - Nested tuple.fs.gold
index 8583ae10c8..1357ef8dd6 100644
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 04 - Nested tuple.fs.gold
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 04 - Nested tuple.fs.gold
@@ -1,5 +1,5 @@
module Module
-let f{caret} (a: string) (b: int * ('a * string)): string =
+let f{caret} (a: string) (b: int * ('a * string)) =
let b1, (_, b3) = b
sprintf "%s %d %s" a b1 b3
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 05 - Nested parens.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 05 - Nested parens.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 05 - Nested parens.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 05 - Nested parens.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 02 - Recursive.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 01 - Recursive.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 02 - Recursive.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 01 - Recursive.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 01 - Recursive.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 01 - Recursive.fs.gold
new file mode 100644
index 0000000000..6a70dc1698
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 01 - Recursive.fs.gold
@@ -0,0 +1,3 @@
+module Module
+
+let rec f{caret} (a: string) = a + ""
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 03 - Generic types.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 02 - Generic types.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 03 - Generic types.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 02 - Generic types.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 02 - Generic types.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 02 - Generic types.fs.gold
new file mode 100644
index 0000000000..fd974d6a8b
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 02 - Generic types.fs.gold
@@ -0,0 +1,4 @@
+module Module
+
+let f{caret} (a: seq) =
+ String.concat ", " a
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 05 - Specified return.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 03 - Specified return.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 05 - Specified return.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 03 - Specified return.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 05 - Specified return.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 03 - Specified return.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 05 - Specified return.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 03 - Specified return.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 04 - Generalized.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 04 - Generalized.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 04 - Generalized.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 04 - Generalized.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 04 - Generalized.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 04 - Generalized.fs.gold
new file mode 100644
index 0000000000..bc7263e423
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 04 - Generalized.fs.gold
@@ -0,0 +1,3 @@
+module Module
+
+let f{caret} (a: 'a) (b: 'b) = a, b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 04 - Tuple.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 04 - Tuple.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 04 - Tuple.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 04 - Tuple.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/availability/Class - member - 01.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/availability/Class - member - 01.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/availability/Class - member - 01.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/availability/Class - member - 01.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/availability/Let bindings - Expr 01.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/availability/Let bindings - Expr 01.fs
new file mode 100644
index 0000000000..933261c8df
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/availability/Let bindings - Expr 01.fs
@@ -0,0 +1,12 @@
+do
+ {off}
+
+ let x{off} = 1
+ let{off} x{off}: int = 1
+
+ let{off} (x{off}: int): int = 1
+ let{off} ((x{off}: int)): int = 1
+ let{off} ((x{off}: string)): int = 1
+
+ let{on} foo{on} {off}x {off}= {off}()
+ (){off}
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/availability/Let bindings - Module 01.fs b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/availability/Let bindings - Module 01.fs
new file mode 100644
index 0000000000..c72ff01386
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/availability/Let bindings - Module 01.fs
@@ -0,0 +1,12 @@
+module Module
+
+{off}
+
+let x1{off} = 1
+let{off} x2{off}: int = 1
+
+let{off} (x3{off}: int): int = 1
+let{off} ((x4{off}: int)): int = 1
+
+{off}[]{off}
+let{on} foo{on} {off}x {off}= {off}()
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Caret on let binding.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Caret on let binding.fs
new file mode 100644
index 0000000000..eefd285429
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Caret on let binding.fs
@@ -0,0 +1,3 @@
+module Module
+
+let{caret} f (a) b = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Caret on let binding.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Caret on let binding.fs.gold
new file mode 100644
index 0000000000..08aa595032
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Caret on let binding.fs.gold
@@ -0,0 +1,3 @@
+module Module
+
+let{caret} f (a) b: string = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Formatting - Add space.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Formatting - Add space.fs
new file mode 100644
index 0000000000..f1dd374a3a
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Formatting - Add space.fs
@@ -0,0 +1,3 @@
+module Module
+
+let f{caret} (a) b = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Formatting - Add space.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Formatting - Add space.fs.gold
new file mode 100644
index 0000000000..4e521b3404
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Formatting - Add space.fs.gold
@@ -0,0 +1,3 @@
+module Module
+
+let f{caret} (a) b : string = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Local 01.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Local 01.fs
new file mode 100644
index 0000000000..3d40fcd434
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Local 01.fs
@@ -0,0 +1,5 @@
+module Module
+
+do
+ let f{caret} (a: string) b = sprintf "%s %d" a b
+ ()
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Local 01.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Local 01.fs.gold
new file mode 100644
index 0000000000..3b87ce6790
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Local 01.fs.gold
@@ -0,0 +1,5 @@
+module Module
+
+do
+ let f{caret} (a: string) b: string = sprintf "%s %d" a b
+ ()
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 01.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 01.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 01.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 01.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 01.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 01.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 01.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 01.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 02.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 02.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 02.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 02.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 02.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 02.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 02.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 02.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 03 - Specified function param.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 03 - Specified function param.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 03 - Specified function param.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 03 - Specified function param.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 03 - Specified function param.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 03 - Specified function param.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 03 - Specified function param.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 03 - Specified function param.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 04 - Function params.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 04 - Function params.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 04 - Function params.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 04 - Function params.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 04 - Function params.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 04 - Function params.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 04 - Function params.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 04 - Function params.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 05 - Nested.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 05 - Nested.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 05 - Nested.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 05 - Nested.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 05 - Nested.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 05 - Nested.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return - Function 05 - Nested.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return - Function 05 - Nested.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return 01.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return 01.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return 01.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return 01.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return 01.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return 01.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Return 01.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Return 01.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 01 - Unit to unit.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 01 - Unit to unit.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 01 - Unit to unit.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 01 - Unit to unit.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 01 - Unit to unit.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 01 - Unit to unit.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 01 - Unit to unit.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 01 - Unit to unit.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 02 - Recursive.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 02 - Recursive.fs
new file mode 100644
index 0000000000..c8e44439d8
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 02 - Recursive.fs
@@ -0,0 +1,3 @@
+module Module
+
+let rec f{caret} a = a + ""
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 02 - Recursive.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 02 - Recursive.fs.gold
new file mode 100644
index 0000000000..a036736b83
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 02 - Recursive.fs.gold
@@ -0,0 +1,3 @@
+module Module
+
+let rec f{caret} a: string = a + ""
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 03 - Generic types.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 03 - Generic types.fs
new file mode 100644
index 0000000000..66e30f9d98
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 03 - Generic types.fs
@@ -0,0 +1,4 @@
+module Module
+
+let f{caret} a =
+ String.concat ", " a
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 03 - Generic types.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 03 - Generic types.fs.gold
similarity index 51%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 03 - Generic types.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 03 - Generic types.fs.gold
index 5f21dc3452..cf3541cf48 100644
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 03 - Generic types.fs.gold
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 03 - Generic types.fs.gold
@@ -1,4 +1,4 @@
module Module
-let f{caret} (a: seq): string =
+let f{caret} a: string =
String.concat ", " a
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Generalized.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Generalized.fs
new file mode 100644
index 0000000000..1918e63342
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Generalized.fs
@@ -0,0 +1,3 @@
+module Module
+
+let f{caret} a b = a, b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Generalized.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Generalized.fs.gold
new file mode 100644
index 0000000000..3035b55646
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Generalized.fs.gold
@@ -0,0 +1,3 @@
+module Module
+
+let f{caret} a b: 'a * 'b = a, b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Tuple.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Tuple.fs.gold
new file mode 100644
index 0000000000..d065dccc0c
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Tuple.fs.gold
@@ -0,0 +1,4 @@
+module Module
+
+let f{caret} (a: string * seq): string =
+ a ||> String.concat
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 01.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 01.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 01.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 01.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 01.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 01.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 01.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 01.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 02 - Function.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 02 - Function.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 02 - Function.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 02 - Function.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 02 - Function.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 02 - Function.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 02 - Function.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 02 - Function.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 03 - Function, tuple.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 03 - Function, tuple.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 03 - Function, tuple.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 03 - Function, tuple.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 03 - Function, tuple.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 03 - Function, tuple.fs.gold
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/Value 03 - Function, tuple.fs.gold
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Value 03 - Function, tuple.fs.gold
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/availability/Class - member - 01.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/availability/Class - member - 01.fs
new file mode 100644
index 0000000000..017f098879
--- /dev/null
+++ b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/availability/Class - member - 01.fs
@@ -0,0 +1,5 @@
+module Module
+
+type NumberPrinter(num) =
+ // Class members aren't supported yet
+ member x.print{off}() = sprintf{off} "%d" num
\ No newline at end of file
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/availability/Let bindings - Expr 01.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/availability/Let bindings - Expr 01.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/availability/Let bindings - Expr 01.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/availability/Let bindings - Expr 01.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/availability/Let bindings - Module 01.fs b/ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/availability/Let bindings - Module 01.fs
similarity index 100%
rename from ReSharper.FSharp/test/data/features/intentions/specifyTypes/availability/Let bindings - Module 01.fs
rename to ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/availability/Let bindings - Module 01.fs
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Caret on let binding.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Caret on let binding.fs.gold
deleted file mode 100644
index 0b4f24f287..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Caret on let binding.fs.gold
+++ /dev/null
@@ -1,3 +0,0 @@
-module Module
-
-let{caret} f (a: string) (b: int): string = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Formatting - Add space.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Formatting - Add space.fs.gold
deleted file mode 100644
index 0e5888aa4d..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Formatting - Add space.fs.gold
+++ /dev/null
@@ -1,3 +0,0 @@
-module Module
-
-let f{caret} (a : string) (b : int) : string = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Local 01.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Local 01.fs.gold
deleted file mode 100644
index eaea46e40a..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Local 01.fs.gold
+++ /dev/null
@@ -1,5 +0,0 @@
-module Module
-
-do
- let f{caret} (a: string) (b: int): string = sprintf "%s %d" a b
- ()
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 01 - Tuple.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 01 - Tuple.fs.gold
deleted file mode 100644
index ceed55f944..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 01 - Tuple.fs.gold
+++ /dev/null
@@ -1,4 +0,0 @@
-module Module
-
-let f{caret} ((a, b): int * int): int =
- a + b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 02 - Wild.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 02 - Wild.fs.gold
deleted file mode 100644
index 679874cbca..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 02 - Wild.fs.gold
+++ /dev/null
@@ -1,4 +0,0 @@
-module Module
-
-let f{caret} (_: 'a): unit =
- ()
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 03 - List.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 03 - List.fs.gold
deleted file mode 100644
index 72e352e6a3..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 03 - List.fs.gold
+++ /dev/null
@@ -1,4 +0,0 @@
-module Module
-
-let f{caret} ([]: 'a list): unit =
- ()
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 04 - As.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 04 - As.fs.gold
deleted file mode 100644
index cc0bb8cb7d..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 04 - As.fs.gold
+++ /dev/null
@@ -1,4 +0,0 @@
-module Module
-
-let f{caret} (a as b: int): int =
- a + b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 05 - Param owner.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 05 - Param owner.fs.gold
deleted file mode 100644
index 2b9ddc174a..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 05 - Param owner.fs.gold
+++ /dev/null
@@ -1,4 +0,0 @@
-module Module
-
-let f{caret} (Some 123: int option): unit =
- ()
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 01 - Parens.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 01 - Parens.fs.gold
deleted file mode 100644
index ccc06948d1..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 01 - Parens.fs.gold
+++ /dev/null
@@ -1,3 +0,0 @@
-module Module
-
-let f{caret} (a: string) (b: int): string = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 02 - Wrong types.fs b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 02 - Wrong types.fs
deleted file mode 100644
index 8d503c316d..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 02 - Wrong types.fs
+++ /dev/null
@@ -1,3 +0,0 @@
-module Module
-
-let f{caret} (a: int) (b: string) = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 02 - Wrong types.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 02 - Wrong types.fs.gold
deleted file mode 100644
index 0d8f515bb7..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 02 - Wrong types.fs.gold
+++ /dev/null
@@ -1,3 +0,0 @@
-module Module
-
-let f{caret} (a: int) (b: string): string = sprintf "%s %d" a b
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 02 - Recursive.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 02 - Recursive.fs.gold
deleted file mode 100644
index 513328c5dc..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 02 - Recursive.fs.gold
+++ /dev/null
@@ -1,3 +0,0 @@
-module Module
-
-let rec f{caret} (a: string): string = a + ""
diff --git a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 04 - Generalized.fs.gold b/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 04 - Generalized.fs.gold
deleted file mode 100644
index 844fe98bd8..0000000000
--- a/ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 04 - Generalized.fs.gold
+++ /dev/null
@@ -1,3 +0,0 @@
-module Module
-
-let f{caret} (a: 'a) (b: 'b): 'a * 'b = a, b
diff --git a/ReSharper.FSharp/test/src/FSharp.Tests/Intentions/SpecifyTypesTest.fs b/ReSharper.FSharp/test/src/FSharp.Tests/Intentions/SpecifyTypesTest.fs
index e851137024..3086218842 100644
--- a/ReSharper.FSharp/test/src/FSharp.Tests/Intentions/SpecifyTypesTest.fs
+++ b/ReSharper.FSharp/test/src/FSharp.Tests/Intentions/SpecifyTypesTest.fs
@@ -8,30 +8,18 @@ open JetBrains.ReSharper.TestFramework
open NUnit.Framework
[]
-type SpecifyTypesActionTest() =
- inherit FSharpContextActionExecuteTestBase()
+type FunctionReturnTypeAnnotationActionTest() =
+ inherit FSharpContextActionExecuteTestBase()
- override x.ExtraPath = "specifyTypes"
-
- [] member x.``Function - Parameters 01 - Parens``() = x.DoNamedTest()
- [] member x.``Function - Parameters 02 - Wrong types``() = x.DoNamedTest()
- [] member x.``Function - Parameters 03 - Tuple``() = x.DoNamedTest()
- [] member x.``Function - Parameters 04 - Nested tuple``() = x.DoNamedTest()
+ override x.ExtraPath = "specifyReturnTypes"
[] member x.``Function 01 - Unit to unit``() = x.DoNamedTest()
[] member x.``Function 02 - Recursive``() = x.DoNamedTest()
[] member x.``Function 03 - Generic types``() = x.DoNamedTest()
[] member x.``Function 04 - Generalized``() = x.DoNamedTest()
- [] member x.``Function 05 - Specified return``() = x.DoNamedTest()
[] member x.``Function - Local 01``() = x.DoNamedTest()
- [] member x.``Function - Parameters - Pattern 01 - Tuple``() = x.DoNamedTest()
- [] member x.``Function - Parameters - Pattern 02 - Wild``() = x.DoNamedTest()
- [] member x.``Function - Parameters - Pattern 03 - List``() = x.DoNamedTest()
- [] member x.``Function - Parameters - Pattern 04 - As``() = x.DoNamedTest()
- [] member x.``Function - Parameters - Pattern 05 - Param owner``() = x.DoNamedTest()
-
[] member x.``Function - Return - Function 01``() = x.DoNamedTest()
[] member x.``Function - Return - Function 02``() = x.DoNamedTest()
[] member x.``Function - Return - Function 03 - Specified function param``() = x.DoNamedTest()
@@ -50,10 +38,50 @@ type SpecifyTypesActionTest() =
[]
-type SpecifyTypesActionAvailabilityTest() =
- inherit FSharpContextActionAvailabilityTestBase()
+type FunctionReturnTypeAnnotationActionAvailabilityTest() =
+ inherit FSharpContextActionAvailabilityTestBase()
+
+ override x.ExtraPath = "specifyReturnTypes"
+
+ [] member x.``Let bindings - Expr 01``() = x.DoNamedTest()
+ [] member x.``Let bindings - Module 01``() = x.DoNamedTest()
+
+ [] member x.``Class - member - 01``() = x.DoNamedTest()
+
+[]
+type FunctionArgumentTypesAnnotationActionTest() =
+ inherit FSharpContextActionExecuteTestBase()
+
+ override x.ExtraPath = "specifyArgumentTypes"
+
+ [] member x.``Function - Parameters 01 - Parens``() = x.DoNamedTest()
+ [] member x.``Function - Parameters 03 - Tuple``() = x.DoNamedTest()
+ [] member x.``Function - Parameters 04 - Nested tuple``() = x.DoNamedTest()
+
+ [] member x.``Function 01 - Recursive``() = x.DoNamedTest()
+ [] member x.``Function 02 - Generic types``() = x.DoNamedTest()
+ [] member x.``Function 03 - Specified return``() = x.DoNamedTest()
+ [] member x.``Function 04 - Generalized``() = x.DoNamedTest()
+
+ [] member x.``Function - Local 01``() = x.DoNamedTest()
+
+ [] member x.``Function - Parameters - Pattern 01 - Tuple``() = x.DoNamedTest()
+ [] member x.``Function - Parameters - Pattern 02 - Wild``() = x.DoNamedTest()
+ [] member x.``Function - Parameters - Pattern 03 - List``() = x.DoNamedTest()
+ [] member x.``Function - Parameters - Pattern 04 - As``() = x.DoNamedTest()
+ [] member x.``Function - Parameters - Pattern 05 - Param owner``() = x.DoNamedTest()
+
+ [, "SpaceBeforeColon", "true")>]
+ [] member x.``Function - Formatting - Add space``() = x.DoNamedTest()
+
+ [] member x.``Function - Caret on let binding``() = x.DoNamedTest()
+
+
+[]
+type FunctionArgumentTypesAnnotationActionAvailabilityTest() =
+ inherit FSharpContextActionAvailabilityTestBase()
- override x.ExtraPath = "specifyTypes"
+ override x.ExtraPath = "specifyArgumentTypes"
[] member x.``Let bindings - Expr 01``() = x.DoNamedTest()
[] member x.``Let bindings - Module 01``() = x.DoNamedTest()