@@ -141,25 +141,68 @@ val ItemWithNoInst : Item -> ItemWithInst
141141type FieldResolution = FieldResolution of RecdFieldRef * bool
142142
143143/// Information about an extension member held in the name resolution environment
144- [< Sealed >]
145- type ExtensionMember
144+ type ExtensionMember =
145+ /// F#-style Extrinsic extension member, defined in F# code
146+ | FSExtMem of ValRef * ExtensionMethodPriority
147+
148+ /// ILExtMem(declaringTyconRef, ilMetadata, pri)
149+ ///
150+ /// IL-style extension member, backed by some kind of method with an [<Extension>] attribute
151+ | ILExtMem of TyconRef * MethInfo * ExtensionMethodPriority
152+
153+ /// Describes the sequence order of the introduction of an extension method. Extension methods that are introduced
154+ /// later through 'open' get priority in overload resolution.
155+ member Priority : ExtensionMethodPriority
146156
147157/// The environment of information used to resolve names
148158[<NoEquality; NoComparison>]
149159type NameResolutionEnv =
150- { eDisplayEnv: DisplayEnv
151- eUnqualifiedItems: LayeredMap < string , Item >
152- ePatItems: NameMap < Item >
153- eModulesAndNamespaces: NameMultiMap < ModuleOrNamespaceRef >
154- eFullyQualifiedModulesAndNamespaces: NameMultiMap < ModuleOrNamespaceRef >
155- eFieldLabels: NameMultiMap < RecdFieldRef >
156- eTyconsByAccessNames: LayeredMultiMap < string , TyconRef >
157- eFullyQualifiedTyconsByAccessNames: LayeredMultiMap < string , TyconRef >
158- eTyconsByDemangledNameAndArity: LayeredMap < NameArityPair , TyconRef >
159- eFullyQualifiedTyconsByDemangledNameAndArity: LayeredMap < NameArityPair , TyconRef >
160- eIndexedExtensionMembers: TyconRefMultiMap < ExtensionMember >
161- eUnindexedExtensionMembers: ExtensionMember list
162- eTypars: NameMap < Typar > }
160+ { /// Display environment information for output
161+ eDisplayEnv: DisplayEnv
162+
163+ /// Values and Data Tags available by unqualified name
164+ eUnqualifiedItems: LayeredMap < string , Item >
165+
166+ /// Data Tags and Active Pattern Tags available by unqualified name
167+ ePatItems: NameMap < Item >
168+
169+ /// Modules accessible via "." notation. Note this is a multi-map.
170+ /// Adding a module abbreviation adds it a local entry to this List.map.
171+ /// Likewise adding a ccu or opening a path adds entries to this List.map.
172+ eModulesAndNamespaces: NameMultiMap < Tast .ModuleOrNamespaceRef >
173+
174+ /// Fully qualified modules and namespaces. 'open' does not change this.
175+ eFullyQualifiedModulesAndNamespaces: NameMultiMap < Tast .ModuleOrNamespaceRef >
176+
177+ /// RecdField labels in scope. RecdField labels are those where type are inferred
178+ /// by label rather than by known type annotation.
179+ /// Bools indicate if from a record, where no warning is given on indeterminate lookup
180+ eFieldLabels: NameMultiMap < Tast .RecdFieldRef >
181+
182+ /// Tycons indexed by the various names that may be used to access them, e.g.
183+ /// "List" --> multiple TyconRef's for the various tycons accessible by this name.
184+ /// "List`1" --> TyconRef
185+ eTyconsByAccessNames: LayeredMultiMap < string , TyconRef >
186+
187+ eFullyQualifiedTyconsByAccessNames: LayeredMultiMap < string , TyconRef >
188+
189+ /// Tycons available by unqualified, demangled names (i.e. (List,1) --> TyconRef)
190+ eTyconsByDemangledNameAndArity: LayeredMap < NameArityPair , TyconRef >
191+
192+ /// Tycons available by unqualified, demangled names (i.e. (List,1) --> TyconRef)
193+ eFullyQualifiedTyconsByDemangledNameAndArity: LayeredMap < NameArityPair , TyconRef >
194+
195+ /// Extension members by type and name
196+ eIndexedExtensionMembers: TyconRefMultiMap < ExtensionMember >
197+
198+ /// Other extension members unindexed by type
199+ eUnindexedExtensionMembers: ExtensionMember list
200+
201+ /// Typars (always available by unqualified names). Further typars can be
202+ /// in the tpenv, a structure folded through each top-level definition.
203+ eTypars: NameMap < Typar >
204+
205+ }
163206 static member Empty : g : TcGlobals -> NameResolutionEnv
164207 member DisplayEnv : DisplayEnv
165208 member FindUnqualifiedItem : string -> Item
@@ -545,3 +588,6 @@ val ResolveCompletionsInType : NameResolver -> NameResolutionEnv -> Resolv
545588val GetVisibleNamespacesAndModulesAtPoint : NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> ModuleOrNamespaceRef list
546589
547590val IsItemResolvable : NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> string list -> Item -> bool
591+
592+ val TrySelectExtensionMethInfoOfILExtMem : range -> ImportMap -> TType -> TyconRef * MethInfo * ExtensionMethodPriority -> MethInfo option
593+
0 commit comments