Skip to content

Commit 121fd8a

Browse files
vzarytovskiixperiandriT-GroauduchinokKevinRansom
authored
Merge pull request #15279 from dotnet/merges/main-to-release/net8
Co-authored-by: Andrii Chebukin <[email protected]> Co-authored-by: Tomas Grosup <[email protected]> Co-authored-by: Eugene Auduchinok <[email protected]> Co-authored-by: Kevin Ransom (msft) <[email protected]> Co-authored-by: Vlad Zarytovskii <[email protected]> Co-authored-by: dawe <[email protected]> Fix15254 (#15257) Fix navigation for external enums, DUs and name resultion for members (#15270)
2 parents d66a79f + 2eef7f3 commit 121fd8a

File tree

194 files changed

+16383
-13321
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

194 files changed

+16383
-13321
lines changed

.fantomasignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ artifacts/
1515
# For some reason, it tries to format files from remotes (Processing .\.git\refs\remotes\<remote>\FSComp.fsi)
1616
.git/
1717

18-
1918
# Explicitly unformatted implementation
2019
src/Compiler/Checking/AccessibilityLogic.fs
2120
src/Compiler/Checking/AttributeChecking.fs
@@ -98,6 +97,7 @@ src/Compiler/Service/IncrementalBuild.fs
9897
src/Compiler/Service/ServiceAssemblyContent.fs
9998
src/Compiler/Service/ServiceDeclarationLists.fs
10099
src/Compiler/Service/ServiceErrorResolutionHints.fs
100+
vsintegration/src/FSharp.Editor/Common/CancellableTasks.fs
101101

102102
# Fantomas limitations on signature files (to investigate)
103103

src/Compiler/Checking/CheckExpressions.fs

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1807,10 +1807,17 @@ let BuildFieldMap (cenv: cenv) env isPartial ty (flds: ((Ident list * Ident) * '
18071807
let fldResolutions =
18081808
let allFields = flds |> List.map (fun ((_, ident), _) -> ident)
18091809
flds
1810-
|> List.map (fun (fld, fldExpr) ->
1811-
let (fldPath, fldId) = fld
1812-
let frefSet = ResolveField cenv.tcSink cenv.nameResolver env.eNameResEnv ad ty fldPath fldId allFields
1813-
fld, frefSet, fldExpr)
1810+
|> List.choose (fun (fld, fldExpr) ->
1811+
try
1812+
let fldPath, fldId = fld
1813+
let frefSet = ResolveField cenv.tcSink cenv.nameResolver env.eNameResEnv ad ty fldPath fldId allFields
1814+
Some(fld, frefSet, fldExpr)
1815+
with e ->
1816+
errorRecoveryNoRange e
1817+
None
1818+
)
1819+
1820+
if fldResolutions.IsEmpty then None else
18141821

18151822
let relevantTypeSets =
18161823
fldResolutions |> List.map (fun (_, frefSet, _) ->
@@ -1870,7 +1877,7 @@ let BuildFieldMap (cenv: cenv) env isPartial ty (flds: ((Ident list * Ident) * '
18701877
Map.add fref2.FieldName fldExpr fs, (fref2.FieldName, fldExpr) :: rfldsList
18711878

18721879
| _ -> error(Error(FSComp.SR.tcRecordFieldInconsistentTypes(), m)))
1873-
tinst, tcref, fldsmap, List.rev rfldsList
1880+
Some(tinst, tcref, fldsmap, List.rev rfldsList)
18741881

18751882
let rec ApplyUnionCaseOrExn (makerForUnionCase, makerForExnTag) m (cenv: cenv) env overallTy item =
18761883
let g = cenv.g
@@ -2217,18 +2224,21 @@ module GeneralizationHelpers =
22172224
//-------------------------------------------------------------------------
22182225

22192226
let ComputeInlineFlag (memFlagsOption: SynMemberFlags option) isInline isMutable g attrs m =
2220-
let hasNoCompilerInliningAttribute() = HasFSharpAttribute g g.attrib_NoCompilerInliningAttribute attrs
2221-
let isCtorOrAbstractSlot() =
2227+
let hasNoCompilerInliningAttribute () = HasFSharpAttribute g g.attrib_NoCompilerInliningAttribute attrs
2228+
2229+
let isCtorOrAbstractSlot () =
22222230
match memFlagsOption with
22232231
| None -> false
22242232
| Some x -> (x.MemberKind = SynMemberKind.Constructor) || x.IsDispatchSlot || x.IsOverrideOrExplicitImpl
22252233

2234+
let isExtern () = HasFSharpAttributeOpt g g.attrib_DllImportAttribute attrs
2235+
22262236
let inlineFlag, reportIncorrectInlineKeywordUsage =
22272237
// Mutable values may never be inlined
22282238
// Constructors may never be inlined
22292239
// Calls to virtual/abstract slots may never be inlined
22302240
// Values marked with NoCompilerInliningAttribute or [<MethodImpl(MethodImplOptions.NoInlining)>] may never be inlined
2231-
if isMutable || isCtorOrAbstractSlot() || hasNoCompilerInliningAttribute() then
2241+
if isMutable || isCtorOrAbstractSlot() || hasNoCompilerInliningAttribute() || isExtern () then
22322242
ValInline.Never, errorR
22332243
elif HasMethodImplNoInliningAttribute g attrs then
22342244
ValInline.Never,
@@ -7362,7 +7372,10 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, withExprOpt, synRecdFields, m
73627372
match flds with
73637373
| [] -> []
73647374
| _ ->
7365-
let tinst, tcref, _, fldsList = BuildFieldMap cenv env hasOrigExpr overallTy flds mWholeExpr
7375+
match BuildFieldMap cenv env hasOrigExpr overallTy flds mWholeExpr with
7376+
| None -> []
7377+
| Some(tinst, tcref, _, fldsList) ->
7378+
73667379
let gtyp = mkAppTy tcref tinst
73677380
UnifyTypes cenv env mWholeExpr overallTy gtyp
73687381

@@ -7393,7 +7406,7 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, withExprOpt, synRecdFields, m
73937406
error(Error(errorInfo, mWholeExpr))
73947407

73957408
if isFSharpObjModelTy g overallTy then errorR(Error(FSComp.SR.tcTypeIsNotARecordTypeNeedConstructor(), mWholeExpr))
7396-
elif not (isRecdTy g overallTy) then errorR(Error(FSComp.SR.tcTypeIsNotARecordType(), mWholeExpr))
7409+
elif not (isRecdTy g overallTy || fldsList.IsEmpty) then errorR(Error(FSComp.SR.tcTypeIsNotARecordType(), mWholeExpr))
73977410

73987411
let superInitExprOpt , tpenv =
73997412
match inherits, GetSuperTypeOfType g cenv.amap mWholeExpr overallTy with
@@ -7411,14 +7424,18 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, withExprOpt, synRecdFields, m
74117424
errorR(InternalError("Unexpected failure in getting super type", mWholeExpr))
74127425
None, tpenv
74137426

7414-
let expr, tpenv = TcRecordConstruction cenv overallTy env tpenv withExprInfoOpt overallTy fldsList mWholeExpr
7427+
if fldsList.IsEmpty && isTyparTy g overallTy then
7428+
SolveTypeAsError env.DisplayEnv cenv.css mWholeExpr overallTy
7429+
mkDefault (mWholeExpr, overallTy), tpenv
7430+
else
7431+
let expr, tpenv = TcRecordConstruction cenv overallTy env tpenv withExprInfoOpt overallTy fldsList mWholeExpr
74157432

7416-
let expr =
7417-
match superInitExprOpt with
7418-
| _ when isStructTy g overallTy -> expr
7419-
| Some superInitExpr -> mkCompGenSequential mWholeExpr superInitExpr expr
7420-
| None -> expr
7421-
expr, tpenv
7433+
let expr =
7434+
match superInitExprOpt with
7435+
| _ when isStructTy g overallTy -> expr
7436+
| Some superInitExpr -> mkCompGenSequential mWholeExpr superInitExpr expr
7437+
| None -> expr
7438+
expr, tpenv
74227439

74237440

74247441
// Check '{| .... |}'

src/Compiler/Checking/CheckExpressions.fsi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,7 @@ val BuildFieldMap:
895895
ty: TType ->
896896
flds: ((Ident list * Ident) * 'T) list ->
897897
m: range ->
898-
TypeInst * TyconRef * Map<string, 'T> * (string * 'T) list
898+
(TypeInst * TyconRef * Map<string, 'T> * (string * 'T) list) option
899899

900900
/// Check a long identifier 'Case' or 'Case argsR' that has been resolved to an active pattern case
901901
val TcPatLongIdentActivePatternCase:

src/Compiler/Checking/CheckPatterns.fs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,10 @@ and TcPatArrayOrList warnOnUpper cenv env vFlags patEnv ty isArray args m =
435435

436436
and TcRecordPat warnOnUpper cenv env vFlags patEnv ty fieldPats m =
437437
let fieldPats = fieldPats |> List.map (fun (fieldId, _, fieldPat) -> fieldId, fieldPat)
438-
let tinst, tcref, fldsmap, _fldsList = BuildFieldMap cenv env true ty fieldPats m
438+
match BuildFieldMap cenv env true ty fieldPats m with
439+
| None -> (fun _ -> TPat_error m), patEnv
440+
| Some(tinst, tcref, fldsmap, _fldsList) ->
441+
439442
let gtyp = mkAppTy tcref tinst
440443
let inst = List.zip (tcref.Typars m) tinst
441444

src/Compiler/Checking/FindUnsolved.fs

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ open Internal.Utilities.Library
88
open Internal.Utilities.Library.Extras
99
open FSharp.Compiler
1010
open FSharp.Compiler.DiagnosticsLogger
11+
open FSharp.Compiler.Text
1112
open FSharp.Compiler.TypedTree
1213
open FSharp.Compiler.TypedTreeBasics
1314
open FSharp.Compiler.TypedTreeOps
@@ -29,14 +30,17 @@ type cenv =
2930
override _.ToString() = "<cenv>"
3031

3132
/// Walk types, collecting type variables
32-
let accTy cenv _env ty =
33+
let accTy cenv _env (fallbackRange: Range option) ty =
3334
let normalizedTy = tryNormalizeMeasureInType cenv.g ty
3435
(freeInType CollectTyparsNoCaching normalizedTy).FreeTypars |> Zset.iter (fun tp ->
35-
if (tp.Rigidity <> TyparRigidity.Rigid) then
36+
if (tp.Rigidity <> TyparRigidity.Rigid) then
37+
match fallbackRange with
38+
| Some r when tp.Range = Range.range0 -> tp.SetIdent (FSharp.Compiler.Syntax.Ident(tp.typar_id.idText, r))
39+
| _ -> ()
3640
cenv.unsolved <- tp :: cenv.unsolved)
3741

3842
let accTypeInst cenv env tyargs =
39-
tyargs |> List.iter (accTy cenv env)
43+
tyargs |> List.iter (accTy cenv env None)
4044

4145
/// Walk expressions, collecting type variables
4246
let rec accExpr (cenv: cenv) (env: env) expr =
@@ -52,17 +56,17 @@ let rec accExpr (cenv: cenv) (env: env) expr =
5256
accBind cenv env bind
5357
accExpr cenv env body
5458

55-
| Expr.Const (_, _, ty) ->
56-
accTy cenv env ty
59+
| Expr.Const (_, r, ty) ->
60+
accTy cenv env (Some r) ty
5761

5862
| Expr.Val (_v, _vFlags, _m) -> ()
5963

60-
| Expr.Quote (ast, _, _, _m, ty) ->
64+
| Expr.Quote (ast, _, _, m, ty) ->
6165
accExpr cenv env ast
62-
accTy cenv env ty
66+
accTy cenv env (Some m) ty
6367

64-
| Expr.Obj (_, ty, basev, basecall, overrides, iimpls, _m) ->
65-
accTy cenv env ty
68+
| Expr.Obj (_, ty, basev, basecall, overrides, iimpls, m) ->
69+
accTy cenv env (Some m) ty
6670
accExpr cenv env basecall
6771
accMethods cenv env basev overrides
6872
accIntfImpls cenv env basev iimpls
@@ -77,8 +81,8 @@ let rec accExpr (cenv: cenv) (env: env) expr =
7781
| Expr.Op (c, tyargs, args, m) ->
7882
accOp cenv env (c, tyargs, args, m)
7983

80-
| Expr.App (f, fty, tyargs, argsl, _m) ->
81-
accTy cenv env fty
84+
| Expr.App (f, fty, tyargs, argsl, m) ->
85+
accTy cenv env (Some m) fty
8286
accTypeInst cenv env tyargs
8387
accExpr cenv env f
8488
accExprs cenv env argsl
@@ -88,33 +92,33 @@ let rec accExpr (cenv: cenv) (env: env) expr =
8892
let ty = mkMultiLambdaTy cenv.g m argvs bodyTy
8993
accLambdas cenv env valReprInfo expr ty
9094

91-
| Expr.TyLambda (_, tps, _body, _m, bodyTy) ->
95+
| Expr.TyLambda (_, tps, _body, m, bodyTy) ->
9296
let valReprInfo = ValReprInfo (ValReprInfo.InferTyparInfo tps, [], ValReprInfo.unnamedRetVal)
93-
accTy cenv env bodyTy
97+
accTy cenv env (Some m) bodyTy
9498
let ty = mkForallTyIfNeeded tps bodyTy
9599
accLambdas cenv env valReprInfo expr ty
96100

97101
| Expr.TyChoose (_tps, e1, _m) ->
98102
accExpr cenv env e1
99103

100104
| Expr.Match (_, _exprm, dtree, targets, m, ty) ->
101-
accTy cenv env ty
105+
accTy cenv env (Some m) ty
102106
accDTree cenv env dtree
103107
accTargets cenv env m ty targets
104108

105109
| Expr.LetRec (binds, e, _m, _) ->
106110
accBinds cenv env binds
107111
accExpr cenv env e
108112

109-
| Expr.StaticOptimization (constraints, e2, e3, _m) ->
113+
| Expr.StaticOptimization (constraints, e2, e3, m) ->
110114
accExpr cenv env e2
111115
accExpr cenv env e3
112116
constraints |> List.iter (function
113117
| TTyconEqualsTycon(ty1, ty2) ->
114-
accTy cenv env ty1
115-
accTy cenv env ty2
118+
accTy cenv env (Some m) ty1
119+
accTy cenv env (Some m) ty2
116120
| TTyconIsStruct(ty1) ->
117-
accTy cenv env ty1)
121+
accTy cenv env (Some m) ty1)
118122

119123
| Expr.WitnessArg (traitInfo, _m) ->
120124
accTraitInfo cenv env traitInfo
@@ -136,7 +140,7 @@ and accIntfImpls cenv env baseValOpt l =
136140
List.iter (accIntfImpl cenv env baseValOpt) l
137141

138142
and accIntfImpl cenv env baseValOpt (ty, overrides) =
139-
accTy cenv env ty
143+
accTy cenv env None ty
140144
accMethods cenv env baseValOpt overrides
141145

142146
and accOp cenv env (op, tyargs, args, _m) =
@@ -158,16 +162,16 @@ and accOp cenv env (op, tyargs, args, _m) =
158162

159163
and accTraitInfo cenv env (TTrait(tys, _nm, _, argTys, retTy, _sln)) =
160164
argTys |> accTypeInst cenv env
161-
retTy |> Option.iter (accTy cenv env)
162-
tys |> List.iter (accTy cenv env)
165+
retTy |> Option.iter (accTy cenv env None)
166+
tys |> List.iter (accTy cenv env None)
163167

164168
and accLambdas cenv env valReprInfo expr exprTy =
165169
match stripDebugPoints expr with
166170
| Expr.TyChoose (_tps, bodyExpr, _m) -> accLambdas cenv env valReprInfo bodyExpr exprTy
167-
| Expr.Lambda _
168-
| Expr.TyLambda _ ->
171+
| Expr.Lambda (range = range)
172+
| Expr.TyLambda (range = range) ->
169173
let _tps, ctorThisValOpt, baseValOpt, vsl, body, bodyTy = destLambdaWithValReprInfo cenv.g cenv.amap valReprInfo (expr, exprTy)
170-
accTy cenv env bodyTy
174+
accTy cenv env (Some range) bodyTy
171175
vsl |> List.iterSquared (accVal cenv env)
172176
baseValOpt |> Option.iter (accVal cenv env)
173177
ctorThisValOpt |> Option.iter (accVal cenv env)
@@ -198,23 +202,23 @@ and accSwitch cenv env (e, cases, dflt, _m) =
198202
and accDiscrim cenv env d =
199203
match d with
200204
| DecisionTreeTest.UnionCase(_ucref, tinst) -> accTypeInst cenv env tinst
201-
| DecisionTreeTest.ArrayLength(_, ty) -> accTy cenv env ty
205+
| DecisionTreeTest.ArrayLength(_, ty) -> accTy cenv env None ty
202206
| DecisionTreeTest.Const _
203207
| DecisionTreeTest.IsNull -> ()
204-
| DecisionTreeTest.IsInst (srcTy, tgtTy) -> accTy cenv env srcTy; accTy cenv env tgtTy
208+
| DecisionTreeTest.IsInst (srcTy, tgtTy) -> accTy cenv env None srcTy; accTy cenv env None tgtTy
205209
| DecisionTreeTest.ActivePatternCase (exp, tys, _, _, _, _) ->
206210
accExpr cenv env exp
207211
accTypeInst cenv env tys
208212
| DecisionTreeTest.Error _ -> ()
209213

210-
and accAttrib cenv env (Attrib(_, _k, args, props, _, _, _m)) =
214+
and accAttrib cenv env (Attrib(_, _k, args, props, _, _, m)) =
211215
args |> List.iter (fun (AttribExpr(expr1, expr2)) ->
212216
accExpr cenv env expr1
213217
accExpr cenv env expr2)
214218
props |> List.iter (fun (AttribNamedArg(_nm, ty, _flg, AttribExpr(expr, expr2))) ->
215219
accExpr cenv env expr
216220
accExpr cenv env expr2
217-
accTy cenv env ty)
221+
accTy cenv env (Some m) ty)
218222

219223
and accAttribs cenv env attribs =
220224
List.iter (accAttrib cenv env) attribs
@@ -229,7 +233,7 @@ and accArgReprInfo cenv env (argInfo: ArgReprInfo) =
229233
and accVal cenv env v =
230234
v.Attribs |> accAttribs cenv env
231235
v.ValReprInfo |> Option.iter (accValReprInfo cenv env)
232-
v.Type |> accTy cenv env
236+
v.Type |> accTy cenv env None
233237

234238
and accBind cenv env (bind: Binding) =
235239
accVal cenv env bind.Var

src/Compiler/Checking/NameResolution.fs

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -541,8 +541,9 @@ let private GetCSharpStyleIndexedExtensionMembersForTyconRef (amap: Import.Impor
541541

542542
let csharpStyleExtensionMembers =
543543
if IsTyconRefUsedForCSharpStyleExtensionMembers g m tcrefOfStaticClass || tcrefOfStaticClass.IsLocalRef then
544-
GetImmediateIntrinsicMethInfosOfType (None, AccessorDomain.AccessibleFromSomeFSharpCode) g amap m ty
545-
|> List.filter (IsMethInfoPlainCSharpStyleExtensionMember g m true)
544+
protectAssemblyExploration [] (fun () ->
545+
GetImmediateIntrinsicMethInfosOfType (None, AccessorDomain.AccessibleFromSomeFSharpCode) g amap m ty
546+
|> List.filter (IsMethInfoPlainCSharpStyleExtensionMember g m true))
546547
else
547548
[]
548549

@@ -2137,14 +2138,16 @@ type TcResultsSinkImpl(tcGlobals, ?sourceText: ISourceText) =
21372138
if allowedRange m then
21382139
if replace then
21392140
remove m
2140-
elif not (isAlreadyDone endPos item m) then
2141+
2142+
if not (isAlreadyDone endPos item m) then
21412143
capturedNameResolutions.Add(CapturedNameResolution(item, tpinst, occurenceType, nenv, ad, m))
21422144

21432145
member sink.NotifyMethodGroupNameResolution(endPos, item, itemMethodGroup, tpinst, occurenceType, nenv, ad, m, replace) =
21442146
if allowedRange m then
21452147
if replace then
21462148
remove m
2147-
elif not (isAlreadyDone endPos item m) then
2149+
2150+
if not (isAlreadyDone endPos item m) then
21482151
capturedNameResolutions.Add(CapturedNameResolution(item, tpinst, occurenceType, nenv, ad, m))
21492152
capturedMethodGroupResolutions.Add(CapturedNameResolution(itemMethodGroup, [], occurenceType, nenv, ad, m))
21502153

@@ -2724,6 +2727,36 @@ let rec ResolveLongIdentInTypePrim (ncenv: NameResolver) nenv lookupKind (resInf
27242727

27252728
let errorTextF s =
27262729
match tryTcrefOfAppTy g ty with
2730+
| ValueSome tcref when tcref.IsRecordTycon ->
2731+
let alternative = nenv.eFieldLabels |> Map.tryFind nm
2732+
match alternative with
2733+
| Some fieldLabels ->
2734+
let fieldsOfResolvedType = tcref.AllFieldsArray |> Array.map (fun f -> f.LogicalName) |> Set.ofArray
2735+
let fieldsOfAlternatives =
2736+
fieldLabels
2737+
|> Seq.collect (fun l -> l.Tycon.AllFieldsArray |> Array.map (fun f -> f.LogicalName))
2738+
|> Set.ofSeq
2739+
let intersect = Set.intersect fieldsOfAlternatives fieldsOfResolvedType
2740+
2741+
if not intersect.IsEmpty then
2742+
let resolvedTypeName = NicePrint.fqnOfEntityRef g tcref
2743+
let namesOfAlternatives =
2744+
fieldLabels
2745+
|> List.map (fun l -> $" %s{NicePrint.fqnOfEntityRef g l.TyconRef}")
2746+
|> fun names -> $" %s{resolvedTypeName}" :: names
2747+
let candidates = System.String.Join("\n", namesOfAlternatives)
2748+
let overlappingNames =
2749+
intersect
2750+
|> Set.toArray
2751+
|> Array.sort
2752+
|> Array.map (fun s -> $" %s{s}")
2753+
|> fun a -> System.String.Join("\n", a)
2754+
if g.langVersion.SupportsFeature(LanguageFeature.WarningWhenMultipleRecdTypeChoice) then
2755+
warning(Error(FSComp.SR.tcMultipleRecdTypeChoice(candidates, resolvedTypeName, overlappingNames), m))
2756+
else
2757+
informationalWarning(Error(FSComp.SR.tcMultipleRecdTypeChoice(candidates, resolvedTypeName, overlappingNames), m))
2758+
| _ -> ()
2759+
FSComp.SR.undefinedNameFieldConstructorOrMemberWhenTypeIsKnown(tcref.DisplayNameWithStaticParametersAndUnderscoreTypars, s)
27272760
| ValueSome tcref ->
27282761
FSComp.SR.undefinedNameFieldConstructorOrMemberWhenTypeIsKnown(tcref.DisplayNameWithStaticParametersAndUnderscoreTypars, s)
27292762
| _ ->

src/Compiler/Checking/NicePrint.fs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2615,6 +2615,8 @@ let stringOfFSAttrib denv x = x |> PrintTypes.layoutAttrib denv |> squareAngleL
26152615

26162616
let stringOfILAttrib denv x = x |> PrintTypes.layoutILAttrib denv |> squareAngleL |> showL
26172617

2618+
let fqnOfEntityRef g x = x |> layoutTyconRefImpl false (DisplayEnv.Empty g) |> showL
2619+
26182620
let layoutImpliedSignatureOfModuleOrNamespace showHeader denv infoReader ad m contents =
26192621
InferredSigPrinting.layoutImpliedSignatureOfModuleOrNamespace showHeader denv infoReader ad m contents
26202622

src/Compiler/Checking/NicePrint.fsi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@ val stringOfFSAttrib: denv: DisplayEnv -> x: Attrib -> string
135135

136136
val stringOfILAttrib: denv: DisplayEnv -> ILType * ILAttribElem list -> string
137137

138+
val fqnOfEntityRef: g: TcGlobals -> x: EntityRef -> string
139+
138140
val layoutImpliedSignatureOfModuleOrNamespace:
139141
showHeader: bool ->
140142
denv: DisplayEnv ->

0 commit comments

Comments
 (0)