Skip to content

Commit 3416b51

Browse files
authored
Fix 944 (#967)
* Preserve the abstract keyword instead of the member for signature type members. Fixes #944 * Bumped alpha version and corrected unit test. * Preserve both keywords
1 parent a67f3a3 commit 3416b51

File tree

8 files changed

+46
-8
lines changed

8 files changed

+46
-8
lines changed

RELEASE_NOTES.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
### 4.0.0-alpha-013 - 07/2020
1+
### 4.0.0-alpha-014 - 07/2020
22
* WIP for [#705](https://github.com/fsprojects/fantomas/issues/705)
33
* FCS 36.0.3
44
* Replaced json configuration with .editorconfig

src/Fantomas.CoreGlobalTool.Tests/Fantomas.CoreGlobalTool.Tests.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFramework>netcoreapp3.1</TargetFramework>
55
<IsPackable>false</IsPackable>
66
<GenerateProgramFile>false</GenerateProgramFile>
7-
<Version>4.0.0-alpha-013</Version>
7+
<Version>4.0.0-alpha-014</Version>
88
<NoWarn>FS0988</NoWarn>
99
</PropertyGroup>
1010
<ItemGroup>

src/Fantomas.CoreGlobalTool/Fantomas.CoreGlobalTool.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFramework>netcoreapp3.1</TargetFramework>
55
<ToolCommandName>fantomas</ToolCommandName>
66
<PackAsTool>True</PackAsTool>
7-
<Version>4.0.0-alpha-013</Version>
7+
<Version>4.0.0-alpha-014</Version>
88
<AssemblyName>fantomas-tool</AssemblyName>
99
</PropertyGroup>
1010
<ItemGroup>

src/Fantomas.Tests/Fantomas.Tests.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<Import Project="..\netfx.props" />
33
<PropertyGroup>
4-
<Version>4.0.0-alpha-013</Version>
4+
<Version>4.0.0-alpha-014</Version>
55
<NoWarn>FS0988</NoWarn>
66
<TargetFramework>netcoreapp3.1</TargetFramework>
77
</PropertyGroup>

src/Fantomas.Tests/SignatureTests.fs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ type internal Foo2 =
524524
namespace Foo
525525
526526
type internal Foo2 =
527-
member Bar<'k> : unit -> unit when 'k: comparison
527+
abstract member Bar<'k> : unit -> unit when 'k: comparison
528528
"""
529529

530530
[<Test>]
@@ -663,3 +663,23 @@ namespace B
663663
type Foo =
664664
member Item : 't -> unit when 't : comparison with set
665665
"""
666+
667+
[<Test>]
668+
let ``preserve abstract member in type, 944`` () =
669+
formatSourceString true """
670+
namespace Baz
671+
672+
type Foo =
673+
abstract member Bar : Type
674+
abstract Bar2 : Type
675+
member Bar3 : Type
676+
""" { config with SpaceBeforeColon = true }
677+
|> prepend newline
678+
|> should equal """
679+
namespace Baz
680+
681+
type Foo =
682+
abstract member Bar : Type
683+
abstract Bar2 : Type
684+
member Bar3 : Type
685+
"""

src/Fantomas/CodePrinter.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -860,7 +860,7 @@ and genMemberFlagsForMemberBinding astContext (mf:MemberFlags) (rangeOfBindingAn
860860
tn.ContentItself
861861
|> Option.bind (fun tc ->
862862
match tc with
863-
| Keyword({ Content = ("override" | "default" | "member" | "abstract") as kw }) -> Some (!- (kw + " "))
863+
| Keyword({ Content = ("override" | "default" | "member" | "abstract" | "abstract member") as kw }) -> Some (!- (kw + " "))
864864
| _ -> None
865865
)
866866
)

src/Fantomas/Fantomas.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<PropertyGroup>
55
<TargetFramework>netstandard2.0</TargetFramework>
66
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
7-
<Version>4.0.0-alpha-013</Version>
7+
<Version>4.0.0-alpha-014</Version>
88
<Description>Source code formatter for F#</Description>
99
</PropertyGroup>
1010
<ItemGroup>

src/Fantomas/Trivia.fs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,25 @@ let private addTriviaToTriviaNode
282282

283283
| { Item = Keyword({ Content = keyword} as kw); Range = range } when (keyword = "override" || keyword = "default" || keyword = "member" || keyword = "abstract") ->
284284
findMemberDefnMemberNodeOnLine triviaNodes range.StartLine
285-
|> updateTriviaNode (fun tn -> tn.ContentItself <- Some (Keyword(kw))) triviaNodes
285+
|> updateTriviaNode (fun tn ->
286+
match tn.Type, tn.ContentItself with
287+
| MainNode ("SynMemberSig.Member"), Some (Keyword ({ Content = existingKeywordContent } as token)) when existingKeywordContent =
288+
"abstract"
289+
&& keyword =
290+
"member" ->
291+
// Combine the two tokens to appear as one
292+
let tokenInfo =
293+
{ token.TokenInfo with
294+
RightColumn = kw.TokenInfo.RightColumn }
295+
296+
let combinedKeyword =
297+
{ token with
298+
Content = "abstract member"
299+
TokenInfo = tokenInfo }
300+
301+
tn.ContentItself <- Some(Keyword(combinedKeyword))
302+
| _ -> tn.ContentItself <- Some(Keyword(kw))
303+
) triviaNodes
286304

287305
| { Item = Keyword({ TokenInfo = {TokenName = tn}} as kw); Range = range } when (tn = "QMARK") ->
288306
findConstNodeAfter triviaNodes range

0 commit comments

Comments
 (0)