Skip to content

Commit c01431a

Browse files
author
7sharp9
committed
Fix symbol types where an incomplete type check occurs
The PR fixed the fragmented types that are currently presented on an incomplete type check i.e. if a referenced nuget package is not restored etc. e.g. types may be represented by `?25354-> ?25345` rather than ’a -> ‘b Ive fixed all the occurrence that I can see happen although there could be further issues in `FSharpMemberOrFunctionOrValue.FullType` as I only touched `ValRef`’s
1 parent 35d4270 commit c01431a

File tree

1 file changed

+30
-13
lines changed

1 file changed

+30
-13
lines changed

src/fsharp/vs/Symbols.fs

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,7 +1100,8 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
11001100
let rty = m.GetFSharpReturnTy(cenv.amap,range0,m.FormalMethodInst)
11011101
let argtysl = m.GetParamTypes(cenv.amap,range0,m.FormalMethodInst)
11021102
mkIteratedFunTy (List.map (mkTupledTy cenv.g) argtysl) rty
1103-
| V v -> v.TauType
1103+
| V v -> let _, typ, _ = PrettyTypes.PrettifyTypes1 cenv.g v.TauType
1104+
typ
11041105
FSharpType(cenv, ty)
11051106

11061107
member __.HasGetterMethod =
@@ -1421,17 +1422,25 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
14211422
[ [ for (ParamData(isParamArrayArg,isOutArg,optArgInfo,nmOpt,_reflArgInfo,pty)) in p.GetParamDatas(cenv.amap,range0) do
14221423
// INCOMPLETENESS: Attribs is empty here, so we can't look at attributes for
14231424
// either .NET or F# parameters
1425+
let _, prettyTyp, _cxs = PrettyTypes.PrettifyTypes1 cenv.g pty
14241426
let argInfo : ArgReprInfo = { Name=nmOpt; Attribs= [] }
1425-
yield FSharpParameter(cenv, pty, argInfo, x.DeclarationLocationOpt, isParamArrayArg, isOutArg, optArgInfo.IsOptional) ]
1427+
yield FSharpParameter(cenv,prettyTyp , argInfo, x.DeclarationLocationOpt, isParamArrayArg, isOutArg, optArgInfo.IsOptional) ]
14261428
|> makeReadOnlyCollection ]
14271429
|> makeReadOnlyCollection
14281430

14291431
| E _ -> [] |> makeReadOnlyCollection
14301432
| M m ->
14311433

14321434
[ for argtys in m.GetParamDatas(cenv.amap,range0,m.FormalMethodInst) do
1433-
yield
1434-
[ for (ParamData(isParamArrayArg,isOutArg,optArgInfo,nmOpt,_reflArgInfo,pty)) in argtys do
1435+
let _, prettyTyps, _cxs =
1436+
argtys
1437+
|> List.map (function ParamData(isParamArrayArg,isOutArg,optArgInfo,nmOpt,_reflArgInfo,pty) -> pty)
1438+
|> PrettyTypes.PrettifyTypesN cenv.g
1439+
let combined =
1440+
List.map2 (fun pty (ParamData(isParamArrayArg,isOutArg,optArgInfo,nmOpt,reflArgInfo,_pty)) ->
1441+
isParamArrayArg,isOutArg,optArgInfo,nmOpt,reflArgInfo,pty) prettyTyps argtys
1442+
yield
1443+
[ for (isParamArrayArg,isOutArg,optArgInfo,nmOpt,_reflArgInfo,pty) in combined do
14351444
// INCOMPLETENESS: Attribs is empty here, so we can't look at attributes for
14361445
// either .NET or F# parameters
14371446
let argInfo : ArgReprInfo = { Name=nmOpt; Attribs= [] }
@@ -1450,8 +1459,9 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
14501459
if isTupleTy cenv.g typ
14511460
then tryDestTupleTy cenv.g typ
14521461
else [typ]
1462+
let _, prettyTyps, _cxs = allArguments |> PrettyTypes.PrettifyTypesN cenv.g
14531463
yield
1454-
allArguments
1464+
prettyTyps
14551465
|> List.map (fun arg -> FSharpParameter(cenv, arg, { Name=None; Attribs= [] }, x.DeclarationLocationOpt, false, false, false))
14561466
|> makeReadOnlyCollection ]
14571467
|> makeReadOnlyCollection
@@ -1460,8 +1470,8 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
14601470
let tau = v.TauType
14611471
let argtysl,_ = GetTopTauTypeInFSharpForm cenv.g curriedArgInfos tau range0
14621472
let argtysl = if v.IsInstanceMember then argtysl.Tail else argtysl
1463-
1464-
[ for argtys in argtysl do
1473+
let prettyArgtysl = argtysl |> List.map (fun a -> PrettyTypes.PrettifyTypesN1 cenv.g (a, tau))
1474+
[ for (_, (argtys,_),_cxs) in prettyArgtysl do
14651475
yield
14661476
[ for argty, argInfo in argtys do
14671477
let isParamArrayArg = HasFSharpAttribute cenv.g cenv.g.attrib_ParamArrayAttribute argInfo.Attribs
@@ -1490,27 +1500,32 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
14901500
// INCOMPLETENESS: Attribs is empty here, so we can't look at return attributes for .NET or F# methods
14911501
let retInfo : ArgReprInfo = { Name=None; Attribs= [] }
14921502
let rty = p.GetPropertyType(cenv.amap,range0)
1503+
let _, rty, _cxs = PrettyTypes.PrettifyTypes1 cenv.g rty
14931504
FSharpParameter(cenv, rty, retInfo, x.DeclarationLocationOpt, isParamArrayArg=false, isOutArg=false, isOptionalArg=false)
14941505
| M m ->
14951506
// INCOMPLETENESS: Attribs is empty here, so we can't look at return attributes for .NET or F# methods
14961507
let retInfo : ArgReprInfo = { Name=None; Attribs= [] }
14971508
let rty = m.GetFSharpReturnTy(cenv.amap,range0,m.FormalMethodInst)
1509+
let _, rty, _cxs = PrettyTypes.PrettifyTypes1 cenv.g rty
14981510
FSharpParameter(cenv, rty, retInfo, x.DeclarationLocationOpt, isParamArrayArg=false, isOutArg=false, isOptionalArg=false)
14991511
| V v ->
15001512
match v.ValReprInfo with
15011513
| None ->
15021514
let _, tau = v.TypeScheme
15031515
if isFunTy cenv.g tau then
1504-
let _typeArguments, rty = stripFunTy cenv.g tau
1505-
FSharpParameter(cenv, rty, { Name=None; Attribs= [] }, x.DeclarationLocationOpt, isParamArrayArg=false, isOutArg=false, isOptionalArg=false)
1516+
let typeArguments, rty = stripFunTy cenv.g tau
1517+
let empty : ArgReprInfo = { Name=None; Attribs= [] }
1518+
let uncurriedArgInfos = typeArguments |> List.map (fun t -> (t, empty ) )
1519+
let _, (_argtys, rty), _csx = PrettyTypes.PrettifyTypesN1 cenv.g (uncurriedArgInfos, rty)
1520+
FSharpParameter(cenv, rty, empty, x.DeclarationLocationOpt, isParamArrayArg=false, isOutArg=false, isOptionalArg=false)
15061521
else
15071522
failwith "not a module let binding or member"
1508-
| Some (ValReprInfo(_typars,argInfos,retInfo)) ->
1523+
| Some (ValReprInfo(typars,argInfos,retInfo)) ->
15091524

15101525
let tau = v.TauType
1511-
let _,rty = GetTopTauTypeInFSharpForm cenv.g argInfos tau range0
1512-
1513-
FSharpParameter(cenv, rty, retInfo, x.DeclarationLocationOpt, isParamArrayArg=false, isOutArg=false, isOptionalArg=false)
1526+
let c,rty = GetTopTauTypeInFSharpForm cenv.g argInfos tau range0
1527+
let (typar, (_types, _, prettyReturn), _cxs) = PrettyTypes.PrettifyTypesNM1 cenv.g ([tau], c, rty)
1528+
FSharpParameter(cenv, prettyReturn, retInfo, x.DeclarationLocationOpt, isParamArrayArg=false, isOutArg=false, isOptionalArg=false)
15141529

15151530

15161531
member __.Attributes =
@@ -1746,6 +1761,8 @@ and FSharpType(cenv, typ:TType) =
17461761
protect <| fun () ->
17471762
"type " + NicePrint.stringOfTy (DisplayEnv.Empty(cenv.g)) typ
17481763

1764+
1765+
17491766
and FSharpAttribute(cenv: cenv, attrib: AttribInfo) =
17501767

17511768
let rec resolveArgObj (arg: obj) =

0 commit comments

Comments
 (0)