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

Commitee938a7

Browse files
vasily-kirichenkoKevinRansom
authored andcommitted
provide signature help for type provider static parameters at ctor call site (dotnet#5017)
1 parent92948a2 commitee938a7

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

‎src/fsharp/service/ServiceParamInfoLocations.fs‎

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -144,17 +144,27 @@ module internal NoteworthyParamInfoLocationsImpl =
144144
NotFound, Some inner
145145
|_-> NotFound, Some inner
146146

147-
147+
let(|StaticParameters|_|)pos synType=
148+
match synTypewith
149+
| SynType.App(SynType.LongIdent(LongIdentWithDots(lid,_)as lidwd), Some(openm), args, commas, closemOpt,_pf, wholem)->
150+
letlidm= lidwd.Range
151+
letbetweenTheBrackets= mkRange wholem.FileName openm.Start wholem.End
152+
if AstTraversal.rangeContainsPosEdgesExclusive betweenTheBrackets pos&& args|> List.forall isStaticArgthen
153+
letcommasAndCloseParen=[for cin commas-> c.End]@[ wholem.End]
154+
Some(FSharpNoteworthyParamInfoLocations(pathOfLid lid, lidm, openm.Start, commasAndCloseParen, closemOpt.IsSome, args|> List.map digOutIdentFromStaticArg))
155+
else
156+
None
157+
|_->
158+
None
148159

149160
lettraverseInput(pos,parseTree)=
150-
151161
AstTraversal.Traverse(pos, parseTree,{new AstTraversal.AstVisitorBase<_>()with
152162
member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr)=
153163
letexpr= expr// fix debug locals
154164
match exprwith
155165

156166
// new LID<tyarg1, ...., tyargN>(...) and error recovery of these
157-
| SynExpr.New(_, synType, synExpr,_range)->
167+
| SynExpr.New(_, synType, synExpr,_)->
158168
letconstrArgsResult,cacheOpt= searchSynArgExpr traverseSynExpr pos synExpr
159169
match constrArgsResult, cacheOptwith
160170
| Found(parenLoc, args, isThereACloseParen),_->
@@ -163,7 +173,9 @@ module internal NoteworthyParamInfoLocationsImpl =
163173
| NotFound, Some cache->
164174
cache
165175
|_->
166-
traverseSynExpr synExpr
176+
match synTypewith
177+
| StaticParameters pos loc-> Some loc
178+
|_-> traverseSynExpr synExpr
167179

168180
// EXPR< = error recovery of a form of half-written TypeApp
169181
| SynExpr.App(_,_, SynExpr.App(_,true, SynExpr.Ident op, synExpr, openm), SynExpr.ArbitraryAfterError_, wholem)when op.idText="op_LessThan"->
@@ -221,18 +233,10 @@ module internal NoteworthyParamInfoLocationsImpl =
221233

222234
|_-> defaultTraverse expr
223235

224-
member this.VisitTypeAbbrev(tyAbbrevRhs,_m)=
236+
member this.VisitTypeAbbrev(tyAbbrevRhs,_m)=
225237
match tyAbbrevRhswith
226-
| SynType.App(SynType.LongIdent(LongIdentWithDots(lid,_)as lidwd), Some(openm), args, commas, closemOpt,_pf, wholem)->
227-
letlidm= lidwd.Range
228-
letbetweenTheBrackets= mkRange wholem.FileName openm.Start wholem.End
229-
if AstTraversal.rangeContainsPosEdgesExclusive betweenTheBrackets pos&& args|> List.forall isStaticArgthen
230-
letcommasAndCloseParen=[for cin commas-> c.End]@[ wholem.End]
231-
Some(FSharpNoteworthyParamInfoLocations(pathOfLid lid, lidm, openm.Start, commasAndCloseParen, closemOpt.IsSome, args|> List.map digOutIdentFromStaticArg))
232-
else
233-
None
234-
|_->
235-
None
238+
| StaticParameters pos loc-> Some loc
239+
|_-> None
236240

237241
member this.VisitImplicitInherit(defaultTraverse, ty, expr, m)=
238242
match defaultTraverse exprwith

‎vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ParameterInfo.fs‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1631,6 +1631,12 @@ We really need to rewrite some code paths here to use the real parse tree rather
16311631
type U = ^N1.T^<^ ,^$ ^>""",
16321632
additionalReferenceAssemblies=[PathRelativeToTestAssembly(@"UnitTests\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
16331633

1634+
[<Test>]
1635+
memberpublicthis.``LocationOfParams.TypeProviders.StaticParametersAtConstructorCallSite``()=
1636+
this.TestParameterInfoLocationOfParamsWithVariousSurroundingContexts("""
1637+
let x = new ^N1.T^<^ "fo$o",^ 42 ^>()""",
1638+
additionalReferenceAssemblies=[PathRelativeToTestAssembly(@"UnitTests\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
1639+
16341640
[<Test>]
16351641
memberpublicthis.``TypeProvider.FormatOfNamesOfSystemTypes``()=
16361642
letcode=["""type TTT = N1.T< "foo", ParamIgnored=42 >"""]

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp