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

Commit2851370

Browse files
committed
initial version of completion for named parameters
1 parentea00c4b commit2851370

File tree

3 files changed

+57
-21
lines changed

3 files changed

+57
-21
lines changed

‎src/fsharp/vs/ServiceUntypedParse.fs‎

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ type internal CompletionContext =
7070
// completing records field
7171
| RecordFieldofRecordContext
7272
| RangeOperator
73-
| NewObjectofpos*HashSet<string>
73+
// completing named parameters\setters in parameter list of constructor\method calls
74+
// end of name ast node * list of properties\parameters that were already set
75+
| ParameterListofpos*HashSet<string>
7476

7577
//----------------------------------------------------------------------------
7678
// Untyped scope
@@ -772,7 +774,7 @@ module internal UntypedParseInfoImpl =
772774
| Some m-> m.End
773775
| None-> id.idRange.End
774776

775-
let(|NewObject|_|)e=
777+
let(|NewObjectOrMethodCall|_|)e=
776778
match ewith
777779
|(SynExpr.New(_, SynType.LongIdent typeName, arg,_))->
778780
// new A()
@@ -808,9 +810,9 @@ module internal UntypedParseInfoImpl =
808810

809811
let(|PartOfParameterList|_|)precedingArgument path=
810812
match pathwith
811-
| TS.Expr(SynExpr.Paren_)::TS.Expr(NewObject(args))::_->
813+
| TS.Expr(SynExpr.Paren_)::TS.Expr(NewObjectOrMethodCall(args))::_->
812814
if Option.isSome precedingArgumentthen Noneelse Some args
813-
| TS.Expr(SynExpr.Tuple(elements, commas,_))::TS.Expr(SynExpr.Paren_)::TS.Expr(NewObject(args))::_->
815+
| TS.Expr(SynExpr.Tuple(elements, commas,_))::TS.Expr(SynExpr.Paren_)::TS.Expr(NewObjectOrMethodCall(args))::_->
814816
match precedingArgumentwith
815817
| None-> Some args
816818
| Some e->
@@ -836,20 +838,26 @@ module internal UntypedParseInfoImpl =
836838
// new A($)
837839
| SynExpr.Const(SynConst.Unit, m)when rangeContainsPos m pos->
838840
match pathwith
839-
| TS.Expr(NewObject args)::_-> Some(CompletionContext.NewObject args)
840-
|_-> defaultTraverse expr
841+
| TS.Expr(NewObjectOrMethodCall args)::_->
842+
Some(CompletionContext.ParameterList args)
843+
|_->
844+
defaultTraverse expr
841845
// new (... A$)
842846
| SynExpr.Ident idwhen id.idRange.End= pos->
843847
match pathwith
844-
| PartOfParameterList None args-> Some(CompletionContext.NewObject args)
845-
|_-> defaultTraverse expr
848+
| PartOfParameterList None args->
849+
Some(CompletionContext.ParameterList args)
850+
|_->
851+
defaultTraverse expr
846852
// new (A$ = 1)
847853
// new (A = 1,$)
848854
| Setter idwhen id.idRange.End= pos|| rangeBeforePos expr.Range pos->
849855
letprecedingArgument=if id.idRange.End= posthen Noneelse Some expr
850856
match pathwith
851-
| PartOfParameterList precedingArgument args-> Some(CompletionContext.NewObject args)
852-
|_-> defaultTraverse expr
857+
| PartOfParameterList precedingArgument args->
858+
Some(CompletionContext.ParameterList args)
859+
|_->
860+
defaultTraverse expr
853861
|_-> defaultTraverse expr
854862

855863
memberthis.VisitRecordField(path,copyOpt,field)=

‎src/fsharp/vs/ServiceUntypedParse.fsi‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ type internal CompletionContext =
6767
// completing records field
6868
| RecordFieldofRecordContext
6969
| RangeOperator
70-
// completingpropertysetters in constructor call
71-
// end ofconstructor ast node * list of properties that were already set
72-
|NewObjectofpos*HashSet<string>
70+
// completingnamed parameters\setters inparameter list ofconstructor\method calls
71+
// end ofname ast node * list of properties\parameters that were already set
72+
|ParameterListofpos*HashSet<string>
7373

7474
// implementation details used by other code in the compiler
7575
moduleinternalUntypedParseInfoImpl=

‎src/fsharp/vs/service.fs‎

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -598,13 +598,42 @@ type TypeCheckInfo
598598
letGetPreciseItemsFromNameResolutionVS(line,colAtEndOfNames,membersByResidue,filterCtors,resolveOverloads,hasTextChangedSinceLastTypecheck)=
599599
GetPreciseItemsFromNameResolution(Pos.fromVS line colAtEndOfNames, membersByResidue, filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck)
600600

601-
letGetSettableFields endOfExprPos hasTextChangedSinceLastTypecheck=
601+
letCollectParameters(methods:MethInfo list)amap m:Item list=
602+
methods
603+
|> List.collect(fun meth->
604+
match meth.GetParamDatas(amap, m, meth.FormalMethodInst)with
605+
| x::_-> x|> List.choose(fun(ParamData(_isParamArray,_isOut,_optArgInfo,name,_,ty))->
606+
match namewith
607+
| Some n-> Some(Item.ArgName(Ident(n, m), ty, Some(ArgumentContainer.Method meth)))
608+
| None-> None
609+
)
610+
|_->[]
611+
)
612+
613+
letGetNamedParametersAndSettableFields endOfExprPos hasTextChangedSinceLastTypecheck=
602614
letcnrs= GetCapturedNameResolutions endOfExprPos ResolveOverloads.No|> ResizeArray.toList|> List.rev
603-
match cnrswith
604-
| CNR(_, Item.CtorGroup(_, ctor::_),_, denv, nenv, ad, m)::_->
605-
letresult= ResolveCompletionsInType ncenv nenv ResolveCompletionTargets.SettablePropertiesAndFields m adfalse ctor.EnclosingType
615+
letresult=
616+
match cnrswith
617+
| CNR(_, Item.CtorGroup(_,((ctor::_)as ctors)),_, denv, nenv, ad, m)::_->
618+
letprops= ResolveCompletionsInType ncenv nenv ResolveCompletionTargets.SettablePropertiesAndFields m adfalse ctor.EnclosingType
619+
letparameters= CollectParameters ctors amap m
620+
Some(denv, m, props@ parameters)
621+
| CNR(_, Item.MethodGroup(_, methods),_, denv, nenv, ad, m)::_->
622+
letprops=
623+
methods
624+
|> List.collect(fun meth->
625+
letretTy= meth.GetFSharpReturnTy(amap, m, meth.FormalMethodInst)
626+
ResolveCompletionsInType ncenv nenv ResolveCompletionTargets.SettablePropertiesAndFields m adfalse retTy
627+
)
628+
letparameters= CollectParameters methods amap m
629+
Some(denv, m, props@ parameters)
630+
|_->
631+
None
632+
match resultwith
633+
| None->
634+
NameResResult.Empty
635+
| Some(denv, m, result)->
606636
ReturnItemsOfType result g denv m TypeNameResolutionFlag.ResolveTypeNamesToTypeRefs hasTextChangedSinceLastTypecheck NameResResult.Members
607-
|_-> NameResResult.Empty
608637

609638
/// finds captured typing for the given position
610639
letGetExprTypingForPosition(endOfExprPos)=
@@ -645,7 +674,6 @@ type TypeCheckInfo
645674
Some(items, denv, m)
646675
|_-> None
647676

648-
649677
/// Looks at the exact expression types at the position to the left of the
650678
/// residue then the source when it was typechecked.
651679
letGetPreciseCompletionListFromExprTypings(untypedParseInfo:UntypedParseInfo,line,colAtEndOfNames,filterCtors,hasTextChangedSinceLastTypecheck:(obj* Range-> bool))=
@@ -946,8 +974,8 @@ type TypeCheckInfo
946974
| Some(CompletionContext.RecordField(RecordContext.Constructor(typeName)))->
947975
FindRecordFieldsInEnv([typeName], None)
948976
|> Some
949-
| Some(NewObject(endPos, fields))->
950-
letresults=GetSettableFields endPos hasTextChangedSinceLastTypecheck
977+
| Some(CompletionContext.ParameterList(endPos, fields))->
978+
letresults=GetNamedParametersAndSettableFields endPos hasTextChangedSinceLastTypecheck
951979

952980
letdeclaredItems= getDeclaredItemsfalse
953981

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp