@@ -2561,29 +2561,20 @@ let mkWithGetSet (withKeyword: range option) (getSet: GetSetKeywords option) =
2561
2561
2562
2562
let mkPropertyGetSetBinding
2563
2563
( creationAide : CreationAide )
2564
+ ( accessibility : SynAccess option )
2564
2565
( leadingKeyword : SingleTextNode )
2565
2566
( binding : SynBinding )
2566
2567
: PropertyGetSetBindingNode =
2567
2568
match binding with
2568
2569
| SynBinding(
2569
- headPat = SynPat.LongIdent(
2570
- longDotId = lid; extraId = Some extraIdent; accessibility = ao; argPats = SynArgPats.Pats ps)
2570
+ headPat = SynPat.LongIdent( extraId = Some extraIdent; argPats = SynArgPats.Pats ps)
2571
2571
returnInfo = returnInfo
2572
2572
expr = expr
2573
2573
trivia = { EqualsRange = Some mEq
2574
2574
InlineKeyword = inlineKw }) ->
2575
2575
let e = parseExpressionInSynBinding returnInfo expr
2576
2576
let returnTypeNode = mkBindingReturnInfo creationAide returnInfo
2577
2577
2578
- // Only use the accessibility of the property binding if the keyword came after the member identifier.
2579
- let accessibility =
2580
- ao
2581
- |> Option.bind ( fun vis ->
2582
- if rangeBeforePos lid.Range vis.Range.Start then
2583
- Some vis
2584
- else
2585
- None)
2586
-
2587
2578
let pats =
2588
2579
match ps with
2589
2580
| [ SynPat.Tuple( false , [ p1; p2; p3 ], [ comma ], _) ] ->
@@ -2628,7 +2619,9 @@ let mkMemberDefn (creationAide: CreationAide) (md: SynMemberDefn) =
2628
2619
| SynMemberDefn.ImplicitInherit( t, e, _, StartRange 7 ( mInherit, _)) ->
2629
2620
mkInheritConstructor creationAide t e mInherit memberDefinitionRange
2630
2621
|> MemberDefn.ImplicitInherit
2631
- | SynMemberDefn.GetSetMember( Some( SynBinding( ao,
2622
+
2623
+ // Transforms: `member this.Y with get() = "meh"` into `member this.Y = "meh"`
2624
+ | SynMemberDefn.GetSetMember( Some( SynBinding(_,
2632
2625
kind,
2633
2626
isInline,
2634
2627
isMutable,
@@ -2638,10 +2631,10 @@ let mkMemberDefn (creationAide: CreationAide) (md: SynMemberDefn) =
2638
2631
SynPat.LongIdent( lid,
2639
2632
extraId,
2640
2633
typarDecls,
2641
- SynArgPats.Pats [ SynPat.Paren( SynPat.Const ( SynConst.Unit ,
2642
- _),
2643
- _ ) ],
2644
- None ,
2634
+ SynArgPats.Pats [ SynPat.Paren(
2635
+ pat = SynPat.Const (
2636
+ constant = SynConst.Unit ) ) ],
2637
+ ao ,
2645
2638
mPat),
2646
2639
ri,
2647
2640
e,
@@ -2652,12 +2645,11 @@ let mkMemberDefn (creationAide: CreationAide) (md: SynMemberDefn) =
2652
2645
_,
2653
2646
{ GetKeyword = Some _ }) ->
2654
2647
2655
- let pat =
2656
- SynPat.LongIdent( lid, extraId, typarDecls, SynArgPats.Pats([]), None, mPat)
2648
+ let pat = SynPat.LongIdent( lid, extraId, typarDecls, SynArgPats.Pats([]), ao, mPat)
2657
2649
2658
2650
mkBinding
2659
2651
creationAide
2660
- ( SynBinding( ao , kind, isInline, isMutable, ats, px, valData, pat, ri, e, bindingRange, dp, trivia))
2652
+ ( SynBinding( None , kind, isInline, isMutable, ats, px, valData, pat, ri, e, bindingRange, dp, trivia))
2661
2653
|> MemberDefn.Member
2662
2654
| SynMemberDefn.Member(
2663
2655
memberDefn = SynBinding(
@@ -2784,15 +2776,12 @@ let mkMemberDefn (creationAide: CreationAide) (md: SynMemberDefn) =
2784
2776
SetKeyword = Some setKeyword
2785
2777
WithKeyword = withKeyword
2786
2778
AndKeyword = andKeyword }) ->
2787
- let firstAccessibility , firstBinding , lastBinding =
2779
+
2780
+ let firstAccessibility , firstBinding , firstKeyword , lastBinding , lastKeyword =
2788
2781
if Position.posLt getKeyword.Start setKeyword.Start then
2789
- visGet,
2790
- mkPropertyGetSetBinding creationAide ( stn " get" getKeyword) getBinding,
2791
- Some( mkPropertyGetSetBinding creationAide ( stn " set" setKeyword) setBinding)
2782
+ visGet, getBinding, ( stn " get" getKeyword), setBinding, ( stn " set" setKeyword)
2792
2783
else
2793
- visSet,
2794
- mkPropertyGetSetBinding creationAide ( stn " set" setKeyword) setBinding,
2795
- Some( mkPropertyGetSetBinding creationAide ( stn " get" getKeyword) getBinding)
2784
+ visSet, setBinding, ( stn " set" setKeyword), getBinding, ( stn " get" getKeyword)
2796
2785
2797
2786
// Only use the accessibility of the first binding if the keyword came before the member identifier.
2798
2787
let accessibility =
@@ -2803,6 +2792,22 @@ let mkMemberDefn (creationAide: CreationAide) (md: SynMemberDefn) =
2803
2792
else
2804
2793
None)
2805
2794
2795
+ let firstBinding =
2796
+ match firstBinding with
2797
+ | SynBinding( headPat = SynPat.LongIdent( accessibility = Some vis)) when
2798
+ rangeBeforePos memberName.Range vis.Range.Start
2799
+ ->
2800
+ mkPropertyGetSetBinding creationAide ( Some vis) firstKeyword firstBinding
2801
+ | _ -> mkPropertyGetSetBinding creationAide None firstKeyword firstBinding
2802
+
2803
+ let lastBinding =
2804
+ match lastBinding with
2805
+ | SynBinding( headPat = SynPat.LongIdent( accessibility = Some vis)) when
2806
+ rangeBeforePos memberName.Range vis.Range.Start
2807
+ ->
2808
+ mkPropertyGetSetBinding creationAide ( Some vis) lastKeyword lastBinding
2809
+ | _ -> mkPropertyGetSetBinding creationAide None lastKeyword lastBinding
2810
+
2806
2811
MemberDefnPropertyGetSetNode(
2807
2812
mkXmlDoc px,
2808
2813
mkAttributes creationAide ats,
@@ -2813,27 +2818,25 @@ let mkMemberDefn (creationAide: CreationAide) (md: SynMemberDefn) =
2813
2818
stn " with" withKeyword,
2814
2819
firstBinding,
2815
2820
Option.map ( stn " and" ) andKeyword,
2816
- lastBinding,
2821
+ Some lastBinding,
2817
2822
memberDefinitionRange
2818
2823
)
2819
2824
|> MemberDefn.PropertyGetSet
2820
2825
| SynMemberDefn.GetSetMember( None,
2821
2826
Some( SynBinding(
2822
- accessibility = ao
2823
2827
attributes = ats
2824
2828
xmlDoc = px
2825
- headPat = SynPat.LongIdent( longDotId = memberName)
2829
+ headPat = SynPat.LongIdent( longDotId = memberName; accessibility = ao )
2826
2830
trivia = { LeadingKeyword = lk
2827
2831
InlineKeyword = inlineKw }) as binding),
2828
2832
_,
2829
2833
{ WithKeyword = withKeyword
2830
2834
GetKeyword = getKeyword
2831
2835
SetKeyword = setKeyword })
2832
2836
| SynMemberDefn.GetSetMember( Some( SynBinding(
2833
- accessibility = ao
2834
2837
attributes = ats
2835
2838
xmlDoc = px
2836
- headPat = SynPat.LongIdent( longDotId = memberName)
2839
+ headPat = SynPat.LongIdent( longDotId = memberName; accessibility = ao )
2837
2840
trivia = { LeadingKeyword = lk
2838
2841
InlineKeyword = inlineKw }) as binding),
2839
2842
None,
@@ -2842,17 +2845,26 @@ let mkMemberDefn (creationAide: CreationAide) (md: SynMemberDefn) =
2842
2845
GetKeyword = getKeyword
2843
2846
SetKeyword = setKeyword }) ->
2844
2847
2848
+ let visMember , visProperty =
2849
+ match ao with
2850
+ | None -> None, None
2851
+ | Some ao ->
2852
+ if rangeBeforePos ao.Range memberName.Range.Start then
2853
+ Some ao, None
2854
+ else
2855
+ None, Some ao
2856
+
2845
2857
match getKeyword, setKeyword with
2846
2858
| Some getKeyword, None ->
2847
2859
let bindingNode =
2848
- mkPropertyGetSetBinding creationAide ( stn " get" getKeyword) binding
2860
+ mkPropertyGetSetBinding creationAide visProperty ( stn " get" getKeyword) binding
2849
2861
2850
2862
MemberDefnPropertyGetSetNode(
2851
2863
mkXmlDoc px,
2852
2864
mkAttributes creationAide ats,
2853
2865
mkSynLeadingKeyword lk,
2854
2866
Option.map ( stn " inline" ) inlineKw,
2855
- mkSynAccess ao ,
2867
+ mkSynAccess visMember ,
2856
2868
mkSynLongIdent memberName,
2857
2869
stn " with" withKeyword,
2858
2870
bindingNode,
@@ -2863,14 +2875,14 @@ let mkMemberDefn (creationAide: CreationAide) (md: SynMemberDefn) =
2863
2875
|> MemberDefn.PropertyGetSet
2864
2876
| None, Some setKeyword ->
2865
2877
let bindingNode =
2866
- mkPropertyGetSetBinding creationAide ( stn " set" setKeyword) binding
2878
+ mkPropertyGetSetBinding creationAide visProperty ( stn " set" setKeyword) binding
2867
2879
2868
2880
MemberDefnPropertyGetSetNode(
2869
2881
mkXmlDoc px,
2870
2882
mkAttributes creationAide ats,
2871
2883
mkSynLeadingKeyword lk,
2872
2884
Option.map ( stn " inline" ) inlineKw,
2873
- mkSynAccess ao ,
2885
+ mkSynAccess visMember ,
2874
2886
mkSynLongIdent memberName,
2875
2887
stn " with" withKeyword,
2876
2888
bindingNode,
0 commit comments