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

Commitc9974b5

Browse files
forkiKevinRansom
authored andcommitted
Lots of small cleanups in NameRes (dotnet#2258)
* cleanup* cleanup* Reorder if statement* Clean AddActivePatternResultTagsToNameEnv* cleanup* Check if tcrefs is empty* check for empty in AddTyconByAccessNames* clean AddTyconByAccessNames* Check if empty in AddModuleOrNamespaceRefsToNameEnv* cleanup* cleanup* Strange way to do a map* Calc destAppTy only once* Map + filter => choose
1 parent2f8ccbc commitc9974b5

File tree

1 file changed

+84
-61
lines changed

1 file changed

+84
-61
lines changed

‎src/fsharp/NameResolution.fs‎

Lines changed: 84 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -343,20 +343,20 @@ type NameResolutionEnv =
343343
}
344344

345345
/// The initial, empty name resolution environment. The mother of all things.
346-
static memberEmpty(g)=
347-
{ eDisplayEnv=DisplayEnv.Empty g
348-
eModulesAndNamespaces=Map.empty
346+
static memberEmpty g=
347+
{ eDisplayEnv=DisplayEnv.Empty g
348+
eModulesAndNamespaces=Map.empty
349349
eFullyQualifiedModulesAndNamespaces= Map.empty
350-
eFieldLabels=Map.empty
351-
eUnqualifiedItems=LayeredMap.Empty
352-
ePatItems=Map.empty
353-
eTyconsByAccessNames= LayeredMultiMap.Empty
354-
eTyconsByDemangledNameAndArity=LayeredMap.Empty
355-
eFullyQualifiedTyconsByAccessNames=LayeredMultiMap.Empty
356-
eFullyQualifiedTyconsByDemangledNameAndArity=LayeredMap.Empty
357-
eIndexedExtensionMembers=TyconRefMultiMap<_>.Empty
358-
eUnindexedExtensionMembers=[]
359-
eTypars=Map.empty}
350+
eFieldLabels=Map.empty
351+
eUnqualifiedItems=LayeredMap.Empty
352+
ePatItems=Map.empty
353+
eTyconsByAccessNames= LayeredMultiMap.Empty
354+
eTyconsByDemangledNameAndArity=LayeredMap.Empty
355+
eFullyQualifiedTyconsByAccessNames=LayeredMultiMap.Empty
356+
eFullyQualifiedTyconsByDemangledNameAndArity=LayeredMap.Empty
357+
eIndexedExtensionMembers=TyconRefMultiMap<_>.Empty
358+
eUnindexedExtensionMembers=[]
359+
eTypars=Map.empty}
360360

361361
membernenv.DisplayEnv= nenv.eDisplayEnv
362362

@@ -400,7 +400,12 @@ let private GetCSharpStyleIndexedExtensionMembersForTyconRef (amap:Import.Import
400400
letminfos= GetImmediateIntrinsicMethInfosOfType(None, AccessorDomain.AccessibleFromSomeFSharpCode) g amap m typ
401401
[for minfoin minfosdo
402402
// Method must be static, have 'Extension' attribute, must not be curried, must have at least one argument
403-
ifnot minfo.IsInstance&&not minfo.IsExtensionMember&& MethInfoHasAttribute g m g.attrib_ExtensionAttribute minfo&& minfo.NumArgs.Length=1&& minfo.NumArgs.Head>=1then
403+
ifnot minfo.IsInstance&&
404+
not minfo.IsExtensionMember&&
405+
minfo.NumArgs.Length=1&&
406+
minfo.NumArgs.Head>=1&&
407+
MethInfoHasAttribute g m g.attrib_ExtensionAttribute minfo
408+
then
404409
letilExtMem= ILExtMem(tcrefOfStaticClass, minfo, pri)
405410

406411
// The results are indexed by the TyconRef of the first 'this' argument, if any.
@@ -443,7 +448,7 @@ let private GetCSharpStyleIndexedExtensionMembersForTyconRef (amap:Import.Import
443448
match thisTyconRefwith
444449
| None->()
445450
| Some(Some tcref)->yield Choice1Of2(tcref, ilExtMem)
446-
| Some None->yield Choice2Of2 ilExtMem]
451+
| Some None->yield Choice2Of2 ilExtMem]
447452
else
448453
[]
449454

@@ -488,16 +493,17 @@ let AddValRefToExtensionMembers pri (eIndexedExtensionMembers: TyconRefMultiMap<
488493

489494
/// This entrypoint is used to add some extra items to the environment for Visual Studio, e.g. static members
490495
letAddFakeNamedValRefToNameEnv nm nenv vref=
491-
{nenvwith eUnqualifiedItems= nenv.eUnqualifiedItems.Add(nm, Item.Value vref)}
496+
{nenvwith eUnqualifiedItems= nenv.eUnqualifiedItems.Add(nm, Item.Value vref)}
492497

493498
/// This entrypoint is used to add some extra items to the environment for Visual Studio, e.g. record members
494499
letAddFakeNameToNameEnv nm nenv item=
495-
{nenvwith eUnqualifiedItems= nenv.eUnqualifiedItems.Add(nm, item)}
500+
{nenvwith eUnqualifiedItems= nenv.eUnqualifiedItems.Add(nm, item)}
496501

497502
/// Add an F# value to the table of available active patterns
498503
letAddValRefsToActivePatternsNameEnv ePatItems(vref:ValRef)=
499504
letePatItems=
500-
(ActivePatternElemsOfValRef vref, ePatItems)||> List.foldBack(fun apref tab->
505+
(ActivePatternElemsOfValRef vref, ePatItems)
506+
||> List.foldBack(fun apref tab->
501507
NameMap.add apref.Name(Item.ActivePatternCase apref) tab)
502508

503509
// Add literal constants to the environment available for resolving items in patterns
@@ -531,12 +537,12 @@ let AddValRefToNameEnv nenv (vref:ValRef) =
531537

532538
/// Add a set of active pattern result tags to the environment.
533539
letAddActivePatternResultTagsToNameEnv(apinfo:PrettyNaming.ActivePatternInfo)nenv ty m=
534-
letnms=apinfo.Names
535-
letapresl=nms|>List.mapi(fun j nm-> nm, j)
540+
ifapinfo.Names.Length=0then nenvelse
541+
letapresl= List.indexed apinfo.Names
536542
{ nenvwith
537543
eUnqualifiedItems=
538544
(apresl,nenv.eUnqualifiedItems)
539-
||> List.foldBack(fun(nm,j)acc-> acc.Add(nm, Item.ActivePatternResult(apinfo,ty,j,m)))}
545+
||> List.foldBack(fun(j,nm)acc-> acc.Add(nm, Item.ActivePatternResult(apinfo,ty,j,m)))}
540546

541547
/// Generalize a union case, from Cons --> List<T>.Cons
542548
letGeneralizeUnionCaseRef(ucref:UnionCaseRef)=
@@ -545,14 +551,22 @@ let GeneralizeUnionCaseRef (ucref:UnionCaseRef) =
545551

546552
/// Add type definitions to the sub-table of the environment indexed by name and arity
547553
letAddTyconsByDemangledNameAndArity(bulkAddMode:BulkAdd)(tcrefs:TyconRef[])(tab:LayeredMap<NameArityPair,TyconRef>)=
548-
letentries= tcrefs|> Array.map(fun tcref-> KeyTyconByDemangledNameAndArity tcref.LogicalName tcref.TyparsNoRange tcref)
554+
if tcrefs.Length=0then tabelse
555+
letentries=
556+
tcrefs
557+
|> Array.map(fun tcref-> KeyTyconByDemangledNameAndArity tcref.LogicalName tcref.TyparsNoRange tcref)
558+
549559
match bulkAddModewith
550560
| BulkAdd.Yes-> tab.AddAndMarkAsCollapsible entries
551561
| BulkAdd.No->(tab,entries)||> Array.fold(fun tab(KeyValue(k,v))-> tab.Add(k,v))
552562

553563
/// Add type definitions to the sub-table of the environment indexed by access name
554-
letAddTyconByAccessNames bulkAddMode(tcrefs:TyconRef[])(tab:LayeredMultiMap<string,_>)=
555-
letentries= tcrefs|> Array.collect(fun tcref-> KeyTyconByAccessNames tcref.LogicalName tcref)
564+
letAddTyconByAccessNames bulkAddMode(tcrefs:TyconRef[])(tab:LayeredMultiMap<string,_>)=
565+
if tcrefs.Length=0then tabelse
566+
letentries=
567+
tcrefs
568+
|> Array.collect(fun tcref-> KeyTyconByAccessNames tcref.LogicalName tcref)
569+
556570
match bulkAddModewith
557571
| BulkAdd.Yes-> tab.AddAndMarkAsCollapsible entries
558572
| BulkAdd.No->(tab,entries)||> Array.fold(fun tab(KeyValue(k,v))-> tab.Add(k,v))
@@ -652,27 +666,33 @@ let TryFindPatternByName name {ePatItems = patternMap} =
652666
NameMap.tryFind name patternMap
653667

654668
/// Add a set of type definitions to the name resolution environment
655-
letAddTyconRefsToNameEnv bulkAddMode ownDefinition g amap mroot nenv tcrefs=
669+
letAddTyconRefsToNameEnv bulkAddMode ownDefinition g amap m root nenv tcrefs=
656670
if isNil tcrefsthen nenvelse
657671
letenv= List.fold(AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition g amap m) nenv tcrefs
658672
// Add most of the contents of the tycons en-masse, then flatten the tables if we're opening a module or namespace
659673
lettcrefs= Array.ofList tcrefs
660674
{ envwith
661-
eFullyQualifiedTyconsByDemangledNameAndArity=
662-
(if rootthen AddTyconsByDemangledNameAndArity bulkAddMode tcrefs nenv.eFullyQualifiedTyconsByDemangledNameAndArityelse nenv.eFullyQualifiedTyconsByDemangledNameAndArity)
663-
eFullyQualifiedTyconsByAccessNames=
664-
(if rootthen AddTyconByAccessNames bulkAddMode tcrefs nenv.eFullyQualifiedTyconsByAccessNameselse nenv.eFullyQualifiedTyconsByAccessNames)
665-
eTyconsByDemangledNameAndArity=
675+
eFullyQualifiedTyconsByDemangledNameAndArity=
676+
if rootthen
677+
AddTyconsByDemangledNameAndArity bulkAddMode tcrefs nenv.eFullyQualifiedTyconsByDemangledNameAndArity
678+
else
679+
nenv.eFullyQualifiedTyconsByDemangledNameAndArity
680+
eFullyQualifiedTyconsByAccessNames=
681+
if rootthen
682+
AddTyconByAccessNames bulkAddMode tcrefs nenv.eFullyQualifiedTyconsByAccessNames
683+
else
684+
nenv.eFullyQualifiedTyconsByAccessNames
685+
eTyconsByDemangledNameAndArity=
666686
AddTyconsByDemangledNameAndArity bulkAddMode tcrefs nenv.eTyconsByDemangledNameAndArity
667-
eTyconsByAccessNames=
687+
eTyconsByAccessNames=
668688
AddTyconByAccessNames bulkAddMode tcrefs nenv.eTyconsByAccessNames}
669689

670690
/// Add an F# exception definition to the name resolution environment
671691
letAddExceptionDeclsToNameEnv bulkAddMode nenv(ecref:TyconRef)=
672692
assert ecref.IsExceptionDecl
673693
letitem= Item.ExnCase ecref
674694
{nenvwith
675-
eUnqualifiedItems=
695+
eUnqualifiedItems=
676696
match bulkAddModewith
677697
| BulkAdd.Yes->
678698
nenv.eUnqualifiedItems.AddAndMarkAsCollapsible[| KeyValuePair(ecref.LogicalName, item)|]
@@ -682,9 +702,9 @@ let AddExceptionDeclsToNameEnv bulkAddMode nenv (ecref:TyconRef) =
682702
ePatItems= nenv.ePatItems.Add(ecref.LogicalName, item)}
683703

684704
/// Add a module abbreviation to the name resolution environment
685-
letAddModuleAbbrevToNameEnv(id:Ident)nenv modrefs=
705+
letAddModuleAbbrevToNameEnv(id:Ident)nenv modrefs=
686706
{nenvwith
687-
eModulesAndNamespaces=
707+
eModulesAndNamespaces=
688708
letadd old nw= nw@ old
689709
NameMap.layerAdditive add(Map.add id.idText modrefs Map.empty) nenv.eModulesAndNamespaces}
690710

@@ -701,6 +721,7 @@ let MakeNestedModuleRefs (modref: ModuleOrNamespaceRef) =
701721
//
702722
// Recursive because of "AutoOpen", i.e. adding a module reference may automatically open further modules
703723
let recAddModuleOrNamespaceRefsToNameEnv g amap m root ad nenv(modrefs:ModuleOrNamespaceRef list)=
724+
if isNil modrefsthen nenvelse
704725
letmodrefsMap= modrefs|> NameMap.ofKeyedList(fun modref-> modref.DemangledModuleOrNamespaceName)
705726
letaddModrefs tab=
706727
letadd old nw=
@@ -711,11 +732,12 @@ let rec AddModuleOrNamespaceRefsToNameEnv g amap m root ad nenv (modrefs: Module
711732
NameMap.layerAdditive add modrefsMap tab
712733
letnenv=
713734
{nenvwith
714-
eModulesAndNamespaces= addModrefs nenv.eModulesAndNamespaces
735+
eModulesAndNamespaces= addModrefs nenv.eModulesAndNamespaces
715736
eFullyQualifiedModulesAndNamespaces=
716-
(if root
717-
then addModrefs nenv.eFullyQualifiedModulesAndNamespaces
718-
else nenv.eFullyQualifiedModulesAndNamespaces)}
737+
if rootthen
738+
addModrefs nenv.eFullyQualifiedModulesAndNamespaces
739+
else
740+
nenv.eFullyQualifiedModulesAndNamespaces}
719741
letnenv=
720742
(nenv,modrefs)||> List.fold(fun nenv modref->
721743
if modref.IsModule&& TryFindFSharpBoolAttribute g g.attrib_AutoOpenAttribute modref.Attribs= Sometruethen
@@ -751,7 +773,8 @@ and AddModuleOrNamespaceContentsToNameEnv (g:TcGlobals) amap (ad:AccessorDomain)
751773
|> List.choose(fun x->if IsAccessible ad x.Accessibilitythen TryMkValRefInModRef modref xelse None)
752774
|> List.toArray
753775
letnenv= AddValRefsToNameEnvWithPriority BulkAdd.Yes pri nenv vrefs
754-
letnenv=(nenv,MakeNestedModuleRefs modref)||> AddModuleOrNamespaceRefsToNameEnv g amap m root ad
776+
letnestedModules= MakeNestedModuleRefs modref
777+
letnenv=(nenv,nestedModules)||> AddModuleOrNamespaceRefsToNameEnv g amap m root ad
755778
nenv
756779

757780
/// Add a set of modules or namespaces to the name resolution environment
@@ -781,14 +804,14 @@ let AddDeclaredTyparsToNameEnv check nenv typars =
781804
lettyparmap=
782805
List.foldBack
783806
(fun(tp:Typar)sofar->
784-
beginmatch checkwith
807+
match checkwith
785808
| CheckForDuplicateTypars->
786-
if Map.containsKey tp.Name sofarthenerrorR(Duplicate("type parameter",tp.DisplayName,tp.Range))
787-
| NoCheckForDuplicateTypars->
788-
()
789-
end
809+
if Map.containsKey tp.Name sofarthen
810+
errorR(Duplicate("type parameter",tp.DisplayName,tp.Range))
811+
| NoCheckForDuplicateTypars->()
812+
790813
Map.add tp.Name tp sofar) typars Map.empty
791-
{nenvwith eTypars=NameMap.layer typarmap nenv.eTypars}
814+
{nenvwith eTypars=NameMap.layer typarmap nenv.eTypars}
792815

793816

794817
//-------------------------------------------------------------------------
@@ -989,11 +1012,11 @@ let LookupTypeNameNoArity nm (byDemangledNameAndArity: LayeredMap<NameArityPair,
9891012

9901013
/// Qualified lookup of type names in the environment
9911014
letLookupTypeNameInEnvNoArity fq nm(nenv:NameResolutionEnv)=
992-
LookupTypeNameNoArity nm(nenv.TyconsByDemangledNameAndArity(fq))(nenv.TyconsByAccessNames(fq))
1015+
LookupTypeNameNoArity nm(nenv.TyconsByDemangledNameAndArityfq)(nenv.TyconsByAccessNames fq)
9931016

9941017
/// Qualified lookup of type names in an entity
9951018
letLookupTypeNameInEntityNoArity m nm(mtyp:ModuleOrNamespaceType)=
996-
LookupTypeNameNoArity nm(mtyp.TypesByDemangledNameAndArity(m)) mtyp.TypesByAccessNames
1019+
LookupTypeNameNoArity nm(mtyp.TypesByDemangledNameAndArity m) mtyp.TypesByAccessNames
9971020

9981021
/// Qualified lookup of type names in an entity where we may know a generic argument count
9991022
letLookupTypeNameInEnvMaybeHaveArity fq nm(typeNameResInfo:TypeNameResolutionInfo)nenv=
@@ -1042,8 +1065,8 @@ let ResolveProvidedTypeNameInEntity (amap, m, typeName, modref: ModuleOrNamespac
10421065
match modref.TypeReprInfowith
10431066
| TProvidedNamespaceExtensionPoint(resolutionEnvironment,resolvers)->
10441067
match modref.Deref.PublicPathwith
1045-
| Some(PubPath(path))->
1046-
letmatches= resolvers|> List.map(fun r->ExtensionTyping.TryResolveProvidedType(r,m,path,typeName))
1068+
| Some(PubPathpath)->
1069+
letmatches= resolvers|> List.map(fun r->ExtensionTyping.TryResolveProvidedType(r,m,path,typeName))
10471070
lettcrefs=
10481071
[for stin matchesdo
10491072
match stwith
@@ -1079,9 +1102,8 @@ let LookupTypeNameInEntityMaybeHaveArity (amap, m, ad, nm, staticResInfo:TypeNam
10791102
lettcrefs=
10801103
match staticResInfowith
10811104
| TypeNameResolutionStaticArgsInfo.Indefinite->
1082-
match LookupTypeNameInEntityNoArity m nm mtypwith
1083-
|[]->[]
1084-
| tycons-> tycons|> List.map modref.NestedTyconRef
1105+
LookupTypeNameInEntityNoArity m nm mtyp
1106+
|> List.map modref.NestedTyconRef
10851107
| TypeNameResolutionStaticArgsInfo.Definite_->
10861108
match LookupTypeNameInEntityHaveArity nm staticResInfo mtypwith
10871109
| Some tycon->[modref.NestedTyconRef tycon]
@@ -1111,8 +1133,8 @@ let MakeNestedType (ncenv:NameResolver) (tinst:TType list) m (tcrefNested:TyconR
11111133
letGetNestedTypesOfType(ad,ncenv:NameResolver,optFilter,staticResInfo,checkForGenerated,m)typ=
11121134
letg= ncenv.g
11131135
ncenv.InfoReader.GetPrimaryTypeHierachy(AllowMultiIntfInstantiations.Yes,m,typ)|> List.collect(fun typ->
1114-
if isAppTy gtypthen
1115-
lettcref,tinst= destAppTy g typ
1136+
matchtypwith
1137+
| AppTy g(tcref,tinst)->
11161138
lettycon= tcref.Deref
11171139
letmty= tycon.ModuleOrNamespaceType
11181140
// No dotting through type generators to get to a nested type!
@@ -1139,9 +1161,10 @@ let GetNestedTypesOfType (ad, ncenv:NameResolver, optFilter, staticResInfo, chec
11391161
|_->
11401162
#endif
11411163
mty.TypesByAccessNames.Values
1142-
|> List.map(tcref.NestedTyconRef>> MakeNestedType ncenv tinst m)
1143-
|> List.filter(IsTypeAccessible g ncenv.amap m ad)
1144-
else[])
1164+
|> List.choose(fun entity->
1165+
lettyp= tcref.NestedTyconRef entity|> MakeNestedType ncenv tinst m
1166+
if IsTypeAccessible g ncenv.amap m ad typthen Some typelse None)
1167+
|_->[])
11451168

11461169
//-------------------------------------------------------------------------
11471170
// Report environments to visual studio. We stuff intermediary results
@@ -3286,10 +3309,10 @@ let PartialResolveLongIndentAsModuleOrNamespaceThen (nenv:NameResolutionEnv) pli
32863309
[]
32873310
|[]->[]
32883311

3289-
///returns fields for the given class or record
3312+
///Returns fields for the given class or record
32903313
letResolveRecordOrClassFieldsOfType(ncenv:NameResolver)m ad typ statics=
32913314
ncenv.InfoReader.GetRecordOrClassFieldsOfType(None,ad,m,typ)
3292-
|> List.filter(fun rfref-> rfref.IsStatic= statics&& IsFieldInfoAccessible ad rfref)
3315+
|> List.filter(fun rfref-> rfref.IsStatic= statics&& IsFieldInfoAccessible ad rfref)
32933316
|> List.map Item.RecdField
32943317

32953318
[<RequireQualifiedAccess>]
@@ -3308,10 +3331,10 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv (completionTargets: Reso
33083331

33093332
letrfinfos=
33103333
ncenv.InfoReader.GetRecordOrClassFieldsOfType(None,ad,m,typ)
3311-
|> List.filter(fun rfref-> rfref.IsStatic= statics&& IsFieldInfoAccessible ad rfref)
3334+
|> List.filter(fun rfref-> rfref.IsStatic= statics&& IsFieldInfoAccessible ad rfref)
33123335

33133336
letucinfos=
3314-
if completionTargets.ResolveAll&& statics&& isAppTy g typthen
3337+
if completionTargets.ResolveAll&& statics&& isAppTy g typthen
33153338
lettc,tinst= destAppTy g typ
33163339
tc.UnionCasesAsRefList
33173340
|> List.filter(IsUnionCaseUnseen ad g ncenv.amap m>>not)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp