From cbd97698ee7a51eb0ba055e958b9a9f0be8972f4 Mon Sep 17 00:00:00 2001 From: Kirill Glazyrin Date: Tue, 28 Jul 2020 00:48:59 +0300 Subject: [PATCH 1/5] Add project icon (#155) --- .gitignore | 1 - ReSharper.FSharp/.gitignore | 3 +++ rider-fsharp/.gitignore | 4 +++- rider-fsharp/.idea/icon.png | Bin 0 -> 2836 bytes rider-fsharp/.idea/icon_dark.png | Bin 0 -> 2836 bytes 5 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 rider-fsharp/.idea/icon.png create mode 100644 rider-fsharp/.idea/icon_dark.png diff --git a/.gitignore b/.gitignore index be98c49262..f542344247 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -**/.idea **/.DS_Store NuGet.Config .gradle/ \ No newline at end of file diff --git a/ReSharper.FSharp/.gitignore b/ReSharper.FSharp/.gitignore index 6e2f51f422..3e9f4d3bd3 100644 --- a/ReSharper.FSharp/.gitignore +++ b/ReSharper.FSharp/.gitignore @@ -4,6 +4,9 @@ RiderSdkPackageVersion.props *Generated.cs *Generated.fs +# Rider-specific files +.idea + # Build results [Dd]ebug/ [Rr]elease/ diff --git a/rider-fsharp/.gitignore b/rider-fsharp/.gitignore index cde97f70f4..fc884d7ed6 100644 --- a/rider-fsharp/.gitignore +++ b/rider-fsharp/.gitignore @@ -1,5 +1,7 @@ build classes -.idea +.idea/* +!.idea/*.png +testData/**/.idea .gradle *.iml diff --git a/rider-fsharp/.idea/icon.png b/rider-fsharp/.idea/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b27e0b125aa28a0f7dd1710d134e3871e0a26f6b GIT binary patch literal 2836 zcmZ{md0Z3M7RPUf2*V;|a3K{WlZh3}D<&xLT#!Tz1k@s}Sa`A|h~PpI#fSohOh6@K zWT{p`E8(^HfQnMhYbO8+ zx#-7eqbnn!(^Vc4BVU`IBHx{ukqnZvH*HCopOl_fb?tl%01naN;^k3$zUY6_v~Bjf z>4hf$LXXXt9Y4(9OS_hOEKi^hZvUthU!mNbg&D#w+;ps#%%g)HT*;No9m~pU?Su2} zRKenD@8rz8GuL-<&Zj9U(*Ld>8yjADJZ3`CeDXXGg9-fY)sk$q+PATI-2CTwq&nWw_v0g_R*eQH7Nu z!O9B6+~)y@?+_Ek1Gg?C<~{|AE+Zz20xK_D87^?}^PQma+F;3VZCi9KM^`RqwRMNVPN+iPl2;?pI-L1y8xlwaba z6tx1QBApm5DpRY7Sww;g!30w!%4Cu@dJT(cDFSo!=7l8I&Z76S6`^9%5i7-wd>Wr4 z0j@I36hc{z>sG6^7**=TC|8=I#mvu0FwHk_ic0qhQ-RPO|Z2a z#4=axo4NXQK(G&idZo!dm>J3il83N|fth1HQ?401`>%}OPU3eQ8~9e$m$IkQ@-}a% zEa}N6_oYj3ca(e?A3etK+xhZyMWb8R;M)=RWB-Y>+}f@EWThc~I&nh!LDRr3sbX|f zUhdewr58CN|G-$kyoJx`sXHS^Y2t*U-cMdLNAs{Cg3b|4B#Lz$>?L2X^`xFUGFW=y zOycENZ-8K8i;8ynz>YSxu3+}11^~5iDkY0O%#c~O5R9hdj=Z?5ISf!Si6tpU#1MKH!6+tQ|95mUbN9iVS;B!0df57^oWvB)bL z0#^t|?&B{U?wE}M_i`trUgSiWhGO{%Wz9k!6=2u(vSo)Gq;@n^UcK~P-)><f=z^-&W5muQF;ikUh5BI6`Ndm*p?`iZjz;!iw&)_x0*(lGOGx7 z=Y}tAlujOkN@Gt3ie<+)peKd8B}gc<%4%j3Y_A-vENodlKlM-ZAYShkYc=@=xQEZG zKh1-<(<)Dx*bQ?piR}ot$|~Z;vWpw7vQj&0yLQf>rW>{WVV^ZZ!!+V@>c>_A!y(+G z+`}r6Mq<;f^R+%_Br?<$4`X9pH?DTp?ObEI)EPT2njIr=+myBLK^}j1cGx^J|(yHjON8Jlos6J}|3yTvN>HoSoBO{X3ytM9Eg&Ho8@qd|U_>4-2>u zlvh?E9Ad$NDtDt$Fm}vSOcvvRTsIG{d=HILu8Y0< zw>O}~var*H%<`tzk;Vyj+j=H^kG*ZkVCMb{t`OIBSn=O@@U@Pd4G2nbJryF0Us#bn z2Z51)TMWc19g7cDx-0CF%7$f_TI;;l8nix?HW`xUqd=;QxM1SSYFp7>-02(?mulLr z;vG*?2QW-Y+L&>A`^;6qPeM8AWjv1kRM92VqBaosYNPM{xjVVF78H?xeR2SB}u>6~QA zBWRr3PMgL;f$arPhJKL4SoEX*&B^X_kN(M5wLI@=UGU2`uki}brA|xsoe+Nf)g4>8 z86UE>sq>4cv_7vXDIN?O>O13eE~m@wERlY_A1&_t?$X;fIABp%wQ>-*ot^&l`Ew) z`;%bCMGuC)!G=*={}V3ATZYq^4_XYt;K*h!rj~NBD%CSMa1y5%c*0dPOaX_iB49Ke z0`s~NAjGQ5yCL9?(-|`%&`$!}7zi}(1MEZybb4YkRSyJC;I!{71W>?s3jz)S_9+Ae zVX~OJ5a8hS4u6=`I0>AOsDW{GA6WDu1pyBBH0&M(G&sF*F#_Nj>J$PFfkmGqK!`nk zcq}$HM$m+W|))t>)`P)++94LJt48Q9mi35(G!8?C+09}!umX^Ft4pyXZ x%S_IYCvPNoZ;@{%|9>1M*M2M^<>@3m^^!?{F&Xc_XXK$c;UN*?v%#|b{{hcYf?xmu literal 0 HcmV?d00001 diff --git a/rider-fsharp/.idea/icon_dark.png b/rider-fsharp/.idea/icon_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b27e0b125aa28a0f7dd1710d134e3871e0a26f6b GIT binary patch literal 2836 zcmZ{md0Z3M7RPUf2*V;|a3K{WlZh3}D<&xLT#!Tz1k@s}Sa`A|h~PpI#fSohOh6@K zWT{p`E8(^HfQnMhYbO8+ zx#-7eqbnn!(^Vc4BVU`IBHx{ukqnZvH*HCopOl_fb?tl%01naN;^k3$zUY6_v~Bjf z>4hf$LXXXt9Y4(9OS_hOEKi^hZvUthU!mNbg&D#w+;ps#%%g)HT*;No9m~pU?Su2} zRKenD@8rz8GuL-<&Zj9U(*Ld>8yjADJZ3`CeDXXGg9-fY)sk$q+PATI-2CTwq&nWw_v0g_R*eQH7Nu z!O9B6+~)y@?+_Ek1Gg?C<~{|AE+Zz20xK_D87^?}^PQma+F;3VZCi9KM^`RqwRMNVPN+iPl2;?pI-L1y8xlwaba z6tx1QBApm5DpRY7Sww;g!30w!%4Cu@dJT(cDFSo!=7l8I&Z76S6`^9%5i7-wd>Wr4 z0j@I36hc{z>sG6^7**=TC|8=I#mvu0FwHk_ic0qhQ-RPO|Z2a z#4=axo4NXQK(G&idZo!dm>J3il83N|fth1HQ?401`>%}OPU3eQ8~9e$m$IkQ@-}a% zEa}N6_oYj3ca(e?A3etK+xhZyMWb8R;M)=RWB-Y>+}f@EWThc~I&nh!LDRr3sbX|f zUhdewr58CN|G-$kyoJx`sXHS^Y2t*U-cMdLNAs{Cg3b|4B#Lz$>?L2X^`xFUGFW=y zOycENZ-8K8i;8ynz>YSxu3+}11^~5iDkY0O%#c~O5R9hdj=Z?5ISf!Si6tpU#1MKH!6+tQ|95mUbN9iVS;B!0df57^oWvB)bL z0#^t|?&B{U?wE}M_i`trUgSiWhGO{%Wz9k!6=2u(vSo)Gq;@n^UcK~P-)><f=z^-&W5muQF;ikUh5BI6`Ndm*p?`iZjz;!iw&)_x0*(lGOGx7 z=Y}tAlujOkN@Gt3ie<+)peKd8B}gc<%4%j3Y_A-vENodlKlM-ZAYShkYc=@=xQEZG zKh1-<(<)Dx*bQ?piR}ot$|~Z;vWpw7vQj&0yLQf>rW>{WVV^ZZ!!+V@>c>_A!y(+G z+`}r6Mq<;f^R+%_Br?<$4`X9pH?DTp?ObEI)EPT2njIr=+myBLK^}j1cGx^J|(yHjON8Jlos6J}|3yTvN>HoSoBO{X3ytM9Eg&Ho8@qd|U_>4-2>u zlvh?E9Ad$NDtDt$Fm}vSOcvvRTsIG{d=HILu8Y0< zw>O}~var*H%<`tzk;Vyj+j=H^kG*ZkVCMb{t`OIBSn=O@@U@Pd4G2nbJryF0Us#bn z2Z51)TMWc19g7cDx-0CF%7$f_TI;;l8nix?HW`xUqd=;QxM1SSYFp7>-02(?mulLr z;vG*?2QW-Y+L&>A`^;6qPeM8AWjv1kRM92VqBaosYNPM{xjVVF78H?xeR2SB}u>6~QA zBWRr3PMgL;f$arPhJKL4SoEX*&B^X_kN(M5wLI@=UGU2`uki}brA|xsoe+Nf)g4>8 z86UE>sq>4cv_7vXDIN?O>O13eE~m@wERlY_A1&_t?$X;fIABp%wQ>-*ot^&l`Ew) z`;%bCMGuC)!G=*={}V3ATZYq^4_XYt;K*h!rj~NBD%CSMa1y5%c*0dPOaX_iB49Ke z0`s~NAjGQ5yCL9?(-|`%&`$!}7zi}(1MEZybb4YkRSyJC;I!{71W>?s3jz)S_9+Ae zVX~OJ5a8hS4u6=`I0>AOsDW{GA6WDu1pyBBH0&M(G&sF*F#_Nj>J$PFfkmGqK!`nk zcq}$HM$m+W|))t>)`P)++94LJt48Q9mi35(G!8?C+09}!umX^Ft4pyXZ x%S_IYCvPNoZ;@{%|9>1M*M2M^<>@3m^^!?{F&Xc_XXK$c;UN*?v%#|b{{hcYf?xmu literal 0 HcmV?d00001 From 55802dbee9ab0a33635384f60de9289b5690df70 Mon Sep 17 00:00:00 2001 From: Matt Constable Date: Sun, 15 Nov 2020 15:17:35 +0000 Subject: [PATCH 2/5] Split function annotation into argument annotation and return type annotation. --- .../FSharp.Psi.Features.fsproj | 4 +- .../FunctionArgumentTypesAnnotationAction.fs | 21 +++ .../FunctionReturnTypeAnnotationAction.fs | 16 ++ ...ionAnnotationAction.fs => SpecifyTypes.fs} | 141 ++++++++---------- .../Function - Formatting - Add space.fs | 0 .../Function - Formatting - Add space.fs.gold | 3 + .../Function - Local 01.fs | 0 .../Function - Local 01.fs.gold | 5 + ...ction - Parameters - Pattern 01 - Tuple.fs | 0 ... - Parameters - Pattern 01 - Tuple.fs.gold | 4 + ...nction - Parameters - Pattern 02 - Wild.fs | 0 ...n - Parameters - Pattern 02 - Wild.fs.gold | 4 + ...nction - Parameters - Pattern 03 - List.fs | 0 ...n - Parameters - Pattern 03 - List.fs.gold | 4 + ...Function - Parameters - Pattern 04 - As.fs | 0 ...ion - Parameters - Pattern 04 - As.fs.gold | 4 + ...- Parameters - Pattern 05 - Param owner.fs | 0 ...ameters - Pattern 05 - Param owner.fs.gold | 4 + .../Function - Parameters 01 - Parens.fs | 0 .../Function - Parameters 01 - Parens.fs.gold | 3 + .../Function - Parameters 03 - Tuple.fs | 0 .../Function - Parameters 03 - Tuple.fs.gold | 0 ...Function - Parameters 04 - Nested tuple.fs | 0 ...ion - Parameters 04 - Nested tuple.fs.gold | 2 +- ...unction - Parameters 05 - Nested parens.fs | 0 .../Function 01 - Recursive.fs} | 0 .../Function 01 - Recursive.fs.gold | 3 + .../Function 02 - Generic types.fs} | 0 .../Function 02 - Generic types.fs.gold | 4 + .../Function 03 - Specified return.fs} | 0 .../Function 03 - Specified return.fs.gold} | 0 .../Function 04 - Generalized.fs | 0 .../Function 04 - Generalized.fs.gold | 3 + .../Function 04 - Tuple.fs.gold | 0 .../availability/Class - member - 01.fs | 0 .../availability/Let bindings - Expr 01.fs | 12 ++ .../availability/Let bindings - Module 01.fs | 12 ++ .../Function - Formatting - Add space.fs | 3 + .../Function - Formatting - Add space.fs.gold | 3 + .../specifyReturnTypes/Function - Local 01.fs | 5 + .../Function - Local 01.fs.gold | 5 + .../Function - Return - Function 01.fs | 0 .../Function - Return - Function 01.fs.gold | 0 .../Function - Return - Function 02.fs | 0 .../Function - Return - Function 02.fs.gold | 0 ... Function 03 - Specified function param.fs | 0 ...tion 03 - Specified function param.fs.gold | 0 ... Return - Function 04 - Function params.fs | 0 ...rn - Function 04 - Function params.fs.gold | 0 ...unction - Return - Function 05 - Nested.fs | 0 ...on - Return - Function 05 - Nested.fs.gold | 0 .../Function - Return 01.fs | 0 .../Function - Return 01.fs.gold | 0 .../Function 01 - Unit to unit.fs | 0 .../Function 01 - Unit to unit.fs.gold | 0 .../Function 02 - Recursive.fs | 3 + .../Function 02 - Recursive.fs.gold | 3 + .../Function 03 - Generic types.fs | 4 + .../Function 03 - Generic types.fs.gold | 2 +- .../Function 04 - Generalized.fs | 3 + .../Function 04 - Generalized.fs.gold | 3 + .../Function 04 - Tuple.fs.gold | 4 + .../Value 01.fs | 0 .../Value 01.fs.gold | 0 .../Value 02 - Function.fs | 0 .../Value 02 - Function.fs.gold | 0 .../Value 03 - Function, tuple.fs | 0 .../Value 03 - Function, tuple.fs.gold | 0 .../availability/Class - member - 01.fs | 5 + .../availability/Let bindings - Expr 01.fs | 0 .../availability/Let bindings - Module 01.fs | 0 .../Function - Formatting - Add space.fs.gold | 3 - .../specifyTypes/Function - Local 01.fs.gold | 5 - ... - Parameters - Pattern 01 - Tuple.fs.gold | 4 - ...n - Parameters - Pattern 02 - Wild.fs.gold | 4 - ...n - Parameters - Pattern 03 - List.fs.gold | 4 - ...ion - Parameters - Pattern 04 - As.fs.gold | 4 - ...ameters - Pattern 05 - Param owner.fs.gold | 4 - .../Function - Parameters 01 - Parens.fs.gold | 3 - .../Function - Parameters 02 - Wrong types.fs | 3 - ...tion - Parameters 02 - Wrong types.fs.gold | 3 - .../Function 02 - Recursive.fs.gold | 3 - .../Function 04 - Generalized.fs.gold | 3 - .../Intentions/SpecifyTypesTest.fs | 62 +++++--- 84 files changed, 258 insertions(+), 139 deletions(-) create mode 100644 ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionArgumentTypesAnnotationAction.fs create mode 100644 ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionReturnTypeAnnotationAction.fs rename ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/{FunctionAnnotationAction.fs => SpecifyTypes.fs} (57%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Formatting - Add space.fs (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Formatting - Add space.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Local 01.fs (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Local 01.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Parameters - Pattern 01 - Tuple.fs (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 01 - Tuple.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Parameters - Pattern 02 - Wild.fs (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 02 - Wild.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Parameters - Pattern 03 - List.fs (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 03 - List.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Parameters - Pattern 04 - As.fs (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 04 - As.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Parameters - Pattern 05 - Param owner.fs (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters - Pattern 05 - Param owner.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Parameters 01 - Parens.fs (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function - Parameters 01 - Parens.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Parameters 03 - Tuple.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Parameters 03 - Tuple.fs.gold (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Parameters 04 - Nested tuple.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Parameters 04 - Nested tuple.fs.gold (54%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function - Parameters 05 - Nested parens.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes/Function 02 - Recursive.fs => specifyArgumentTypes/Function 01 - Recursive.fs} (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 01 - Recursive.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes/Function 03 - Generic types.fs => specifyArgumentTypes/Function 02 - Generic types.fs} (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 02 - Generic types.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes/Function 05 - Specified return.fs => specifyArgumentTypes/Function 03 - Specified return.fs} (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes/Function 05 - Specified return.fs.gold => specifyArgumentTypes/Function 03 - Specified return.fs.gold} (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function 04 - Generalized.fs (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/Function 04 - Generalized.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/Function 04 - Tuple.fs.gold (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyArgumentTypes}/availability/Class - member - 01.fs (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/availability/Let bindings - Expr 01.fs create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyArgumentTypes/availability/Let bindings - Module 01.fs create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Formatting - Add space.fs create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Formatting - Add space.fs.gold create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Local 01.fs create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function - Local 01.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return - Function 01.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return - Function 01.fs.gold (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return - Function 02.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return - Function 02.fs.gold (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return - Function 03 - Specified function param.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return - Function 03 - Specified function param.fs.gold (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return - Function 04 - Function params.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return - Function 04 - Function params.fs.gold (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return - Function 05 - Nested.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return - Function 05 - Nested.fs.gold (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return 01.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function - Return 01.fs.gold (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function 01 - Unit to unit.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function 01 - Unit to unit.fs.gold (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 02 - Recursive.fs create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 02 - Recursive.fs.gold create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 03 - Generic types.fs rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Function 03 - Generic types.fs.gold (51%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Generalized.fs create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Generalized.fs.gold create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/Function 04 - Tuple.fs.gold rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Value 01.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Value 01.fs.gold (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Value 02 - Function.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Value 02 - Function.fs.gold (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Value 03 - Function, tuple.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/Value 03 - Function, tuple.fs.gold (100%) create mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyReturnTypes/availability/Class - member - 01.fs rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/availability/Let bindings - Expr 01.fs (100%) rename ReSharper.FSharp/test/data/features/intentions/{specifyTypes => specifyReturnTypes}/availability/Let bindings - Module 01.fs (100%) delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Formatting - Add space.fs.gold delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Local 01.fs.gold delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 01 - Tuple.fs.gold delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 02 - Wild.fs.gold delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 03 - List.fs.gold delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 04 - As.fs.gold delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters - Pattern 05 - Param owner.fs.gold delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 01 - Parens.fs.gold delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 02 - Wrong types.fs delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function - Parameters 02 - Wrong types.fs.gold delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 02 - Recursive.fs.gold delete mode 100644 ReSharper.FSharp/test/data/features/intentions/specifyTypes/Function 04 - Generalized.fs.gold 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..718a1937a0 --- /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 argument 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 57% 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 694759fb3f..e415bcc819 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,49 @@ 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.head |> this.IsAnnotated |> not + override this.ExecutePsiTransaction _ = + let binding = dataProvider.GetSelectedElement() + + 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,44 +78,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 binding = dataProvider.GetSelectedElement() 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 - 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 - 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 - 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 8b5da0e9fa..c75a478be0 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() @@ -48,10 +36,48 @@ 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() + + +[] +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() From 373b3d68d3b110a88b0c317d705bf584179c77a5 Mon Sep 17 00:00:00 2001 From: Matt Constable Date: Sun, 15 Nov 2020 15:19:27 +0000 Subject: [PATCH 3/5] Prevent DotSettings.user files from being accidentally committed. --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 From fc915732f708363bcc01c50e4b1379b0a85f4be9 Mon Sep 17 00:00:00 2001 From: Matt Constable Date: Thu, 17 Dec 2020 08:27:11 +0000 Subject: [PATCH 4/5] Oops, missed bracket --- .../specifyReturnTypes/Function - Caret on let binding.fs.gold | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index f4df1c209d..08aa595032 100644 --- 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 @@ -1,3 +1,3 @@ module Module -let{caret} f a b: string = sprintf "%s %d" a b +let{caret} f (a) b: string = sprintf "%s %d" a b From 2c5813d3100558a01466afa2c4852ca85523b9f6 Mon Sep 17 00:00:00 2001 From: Matt Constable Date: Thu, 17 Dec 2020 08:28:47 +0000 Subject: [PATCH 5/5] Help string change --- .../src/Intentions/FunctionArgumentTypesAnnotationAction.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionArgumentTypesAnnotationAction.fs b/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionArgumentTypesAnnotationAction.fs index 718a1937a0..1601e79c8a 100644 --- a/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionArgumentTypesAnnotationAction.fs +++ b/ReSharper.FSharp/src/FSharp.Psi.Features/src/Intentions/FunctionArgumentTypesAnnotationAction.fs @@ -5,7 +5,7 @@ open JetBrains.ReSharper.Plugins.FSharp.Psi.Impl open JetBrains.ReSharper.Plugins.FSharp.Psi.Tree [] + Description = "Annotate function with parameter types")>] type FunctionArgumentTypesAnnotationAction(dataProvider: FSharpContextActionDataProvider) = inherit SpecifyTypes.FunctionAnnotationActionBase(dataProvider) @@ -15,7 +15,7 @@ type FunctionArgumentTypesAnnotationAction(dataProvider: FSharpContextActionData parametersOwner.ParametersEnumerable |> Seq.forall (fun pat -> pat.IgnoreInnerParens() :? ITypedPat) | _ -> true - override this.Text = "Add argument type annotations" + override this.Text = "Add parameter type annotations" override this.ApplyFunctionAnnotation parametersOwner binding mfv displayContext = if isNotNull parametersOwner then SpecifyTypes.specifyArgumentTypes parametersOwner binding mfv displayContext