Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit039c708

Browse files
vasily-kirichenkoKevinRansom
authored andcommitted
Fix signature help for ctors of aliases and provided types innew T() expressions (#5018)
* fix signature help for ctors of aliases and provided types in `new T()` expressions* less allocations* refactoring and commenting
1 parentd47027d commit039c708

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

‎src/fsharp/service/service.fs‎

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -518,14 +518,23 @@ type TypeCheckInfo
518518
| Item.Types(_, ty::_)when(isInterfaceTy g ty)->true
519519
|_->false
520520

521+
521522
// Return only items with the specified name
522523
letFilterDeclItemsByResidue(getItem:'a->Item)residue(items:'a list)=
524+
letattributedResidue= residue+"Attribute"
525+
letnameMatchesResidue name=(residue= name)||(attributedResidue= name)
526+
523527
items|> List.filter(fun x->
524528
letitem= getItem x
525529
letn1= item.DisplayName
526530
match itemwith
527-
| Item.Types_| Item.CtorGroup_-> residue+"Attribute"= n1|| residue= n1
528-
|_-> residue= n1)
531+
| Item.Types_-> nameMatchesResidue n1
532+
| Item.CtorGroup(_, meths)->
533+
nameMatchesResidue n1||
534+
meths|> List.exists(fun meth->
535+
lettcref= meth.ApparentEnclosingTyconRef
536+
tcref.IsProvided|| nameMatchesResidue tcref.DisplayName)
537+
|_-> residue= n1)
529538

530539
/// Post-filter items to make sure they have precisely the right name
531540
/// This also checks that there are some remaining results
@@ -1122,7 +1131,15 @@ type TypeCheckInfo
11221131
(fun()->
11231132
match GetDeclItemsForNamesAtPosition(ctok, None,namesOpt,None,None,line,lineStr,colAtEndOfNames,ResolveTypeNamesToCtors,ResolveOverloads.No,(fun()->[]),fun _->false)with
11241133
| None-> FSharpMethodGroup("",[||])
1125-
| Some(items, denv,_, m)-> FSharpMethodGroup.Create(infoReader, m, denv, items|> List.map(fun x-> x.ItemWithInst)))
1134+
| Some(items, denv,_, m)->
1135+
// GetDeclItemsForNamesAtPosition returns Items.Types and Item.CtorGroup for `new T(|)`,
1136+
// the Item.Types is not needed here as it duplicates (at best) parameterless ctor.
1137+
letctors= items|> List.filter(fun x->match x.Itemwith Item.CtorGroup_->true|_->false)
1138+
letitems=
1139+
match ctorswith
1140+
|[]-> items
1141+
| ctors-> ctors
1142+
FSharpMethodGroup.Create(infoReader, m, denv, items|> List.map(fun x-> x.ItemWithInst)))
11261143
(fun msg->
11271144
Trace.TraceInformation(sprintf"FCS: recovering from error in GetMethods: '%s'" msg)
11281145
FSharpMethodGroup(msg,[||]))

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp