Skip to content

Commit

Permalink
let the AddPrivateAccessModifier code fix handle getter setter access…
Browse files Browse the repository at this point in the history
… separately
  • Loading branch information
dawedawe committed Jan 17, 2025
1 parent b48b166 commit ca2ac7c
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 1 deletion.
20 changes: 19 additions & 1 deletion src/FsAutoComplete/CodeFixes/AddPrivateAccessModifier.fs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ let private getRangesAndPlacement input pos =
members
|> List.tryPick (fun m ->
match m with
// TODO: Need to handle setting get or set accessibility separately
| SynMemberDefn.AutoProperty(
accessibility = SynValSigAccess.GetSet(None, None, None); ident = ident; trivia = trivia) as a when
rangeContainsPos ident.idRange pos
Expand All @@ -124,6 +123,25 @@ let private getRangesAndPlacement input pos =
match tryGetDeclContainingRange path pos with
| Some r -> Some(editRange, r, After)
| _ -> None
| SynMemberDefn.AutoProperty(
accessibility = SynValSigAccess.GetSet(None, getAcc, setAcc)
trivia = { GetSetKeywords = Some getSetTrivia }) as a when rangeContainsPos getSetTrivia.Range pos ->

let editRange =
match (getAcc, setAcc, getSetTrivia) with
| (None, _, GetSetKeywords.Get getRange)
| (None, _, GetSetKeywords.GetSet(getRange, _)) when rangeContainsPos getRange pos ->
Some getRange.StartRange
| (_, None, GetSetKeywords.Set setRange)
| (_, None, GetSetKeywords.GetSet(_, setRange)) when rangeContainsPos setRange pos ->
Some setRange.StartRange
| _ -> None

let path = SyntaxNode.SynMemberDefn a :: path

match (editRange, tryGetDeclContainingRange path pos) with
| (Some editRange, Some r) -> Some(editRange, r, Before)
| _ -> None
| _ -> None)
// Type Abbreviation
| SynTypeDefn(
Expand Down
48 changes: 48 additions & 0 deletions test/FsAutoComplete.Tests.Lsp/CodeFixTests/Tests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1066,6 +1066,54 @@ let private addPrivateAccessModifierTests state =
Diagnostics.acceptAll
selectCodeFix

testCaseAsync "add private works for autoproperty getter"
<| CodeFix.check
server
"""
type MyClass() =
member val Name = "" with $0get, set
"""
Diagnostics.acceptAll
selectCodeFix
"""
type MyClass() =
member val Name = "" with private get, set
"""

testCaseAsync "add private works for autoproperty setter"
<| CodeFix.check
server
"""
type MyClass() =
member val Name = "" with get, s$0et
"""
Diagnostics.acceptAll
selectCodeFix
"""
type MyClass() =
member val Name = "" with get, private set
"""

testCaseAsync "add private is not offered for autoproperty getter if member access is already there"
<| CodeFix.checkNotApplicable
server
"""
type MyClass() =
member val private Name = "" with g$0et, set
"""
Diagnostics.acceptAll
selectCodeFix

testCaseAsync "add private is not offered for autoproperty setter if member access is already there"
<| CodeFix.checkNotApplicable
server
"""
type MyClass() =
member val private Name = "" with get, set$0
"""
Diagnostics.acceptAll
selectCodeFix

testCaseAsync "add private is not offered for DU type definition" // ref finding might not show us type inferred usages
<| CodeFix.checkNotApplicable
server
Expand Down

0 comments on commit ca2ac7c

Please sign in to comment.