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

Commit669d73d

Browse files
forkiKevinRansom
authored andcommitted
We should allow more access positions (dotnet#2205)
* We should allow more access positions* Show that we can suggest unions in pattern match
1 parentc1249ec commit669d73d

File tree

3 files changed

+87
-82
lines changed

3 files changed

+87
-82
lines changed

‎src/fsharp/NameResolution.fs‎

Lines changed: 70 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -2153,49 +2153,46 @@ let rec ResolveExprLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv (typeN
21532153
match tyconSearch+++ moduleSearch+++ unionSearchwith
21542154
| Result[]->
21552155
letsuggestPossibleTypesAndNames()=
2156-
match adwith
2157-
| AccessibleFrom_->
2158-
lettypes=
2159-
modref.ModuleOrNamespaceType.AllEntities
2160-
|> Seq.filter(fun e-> IsEntityAccessible ncenv.amap m ad(modref.NestedTyconRef e))
2161-
|> Seq.map(fun e-> e.DisplayName)
2162-
|> Set.ofSeq
2163-
2164-
letsubmodules=
2165-
mty.ModulesAndNamespacesByDemangledName
2166-
|> Seq.filter(fun kv-> IsEntityAccessible ncenv.amap m ad(modref.NestedTyconRef kv.Value))
2167-
|> Seq.map(fun e-> e.Value.DisplayName)
2168-
|> Set.ofSeq
2156+
lettypes=
2157+
modref.ModuleOrNamespaceType.AllEntities
2158+
|> Seq.filter(fun e-> IsEntityAccessible ncenv.amap m ad(modref.NestedTyconRef e))
2159+
|> Seq.map(fun e-> e.DisplayName)
2160+
|> Set.ofSeq
2161+
2162+
letsubmodules=
2163+
mty.ModulesAndNamespacesByDemangledName
2164+
|> Seq.filter(fun kv-> IsEntityAccessible ncenv.amap m ad(modref.NestedTyconRef kv.Value))
2165+
|> Seq.map(fun e-> e.Value.DisplayName)
2166+
|> Set.ofSeq
21692167

2170-
letunions=
2171-
modref.ModuleOrNamespaceType.AllEntities
2172-
|> Seq.collect(fun tycon->
2173-
lethasRequireQualifiedAccessAttribute= HasFSharpAttribute ncenv.g ncenv.g.attrib_RequireQualifiedAccessAttribute tycon.Attribs
2174-
if hasRequireQualifiedAccessAttributethen
2175-
[||]
2176-
else
2177-
tycon.UnionCasesArray)
2178-
|> Seq.map(fun uc-> uc.DisplayName)
2179-
|> Set.ofSeq
2180-
2181-
letvals=
2182-
modref.ModuleOrNamespaceType.AllValsByLogicalName
2183-
|> Seq.filter(fun e-> IsValAccessible ad(mkNestedValRef modref e.Value))
2184-
|> Seq.map(fun e-> e.Value.DisplayName)
2185-
|> Set.ofSeq
2168+
letunions=
2169+
modref.ModuleOrNamespaceType.AllEntities
2170+
|> Seq.collect(fun tycon->
2171+
lethasRequireQualifiedAccessAttribute= HasFSharpAttribute ncenv.g ncenv.g.attrib_RequireQualifiedAccessAttribute tycon.Attribs
2172+
if hasRequireQualifiedAccessAttributethen
2173+
[||]
2174+
else
2175+
tycon.UnionCasesArray)
2176+
|> Seq.map(fun uc-> uc.DisplayName)
2177+
|> Set.ofSeq
2178+
2179+
letvals=
2180+
modref.ModuleOrNamespaceType.AllValsByLogicalName
2181+
|> Seq.filter(fun e-> IsValAccessible ad(mkNestedValRef modref e.Value))
2182+
|> Seq.map(fun e-> e.Value.DisplayName)
2183+
|> Set.ofSeq
21862184

2187-
letexns=
2188-
modref.ModuleOrNamespaceType.ExceptionDefinitionsByDemangledName
2189-
|> Seq.filter(fun e-> IsTyconReprAccessible ncenv.amap m ad(modref.NestedTyconRef e.Value))
2190-
|> Seq.map(fun e-> e.Value.DisplayName)
2191-
|> Set.ofSeq
2185+
letexns=
2186+
modref.ModuleOrNamespaceType.ExceptionDefinitionsByDemangledName
2187+
|> Seq.filter(fun e-> IsTyconReprAccessible ncenv.amap m ad(modref.NestedTyconRef e.Value))
2188+
|> Seq.map(fun e-> e.Value.DisplayName)
2189+
|> Set.ofSeq
21922190

2193-
types
2194-
|> Set.union submodules
2195-
|> Set.union unions
2196-
|> Set.union vals
2197-
|> Set.union exns
2198-
|_-> Set.empty
2191+
types
2192+
|> Set.union submodules
2193+
|> Set.union unions
2194+
|> Set.union vals
2195+
|> Set.union exns
21992196

22002197
raze(UndefinedName(depth,FSComp.SR.undefinedNameValueConstructorNamespaceOrType,id,suggestPossibleTypesAndNames))
22012198
| results-> AtMostOneResult id.idRange results
@@ -2298,6 +2295,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv:NameResolver) fullyQualified m ad n
22982295

22992296
letsuggestedTypes=
23002297
nenv.TyconsByDemangledNameAndArity fullyQualified
2298+
|> Seq.filter(fun e-> IsEntityAccessible ncenv.amap m ad e.Value)
23012299
|> Seq.map(fun e-> e.Value.DisplayName)
23022300
|> Set.ofSeq
23032301

@@ -2415,6 +2413,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv:NameResolver) fullyQualified m ad n
24152413

24162414
letsuggestedTypes=
24172415
nenv.TyconsByDemangledNameAndArity fullyQualified
2416+
|> Seq.filter(fun e-> IsEntityAccessible ncenv.amap m ad e.Value)
24182417
|> Seq.map(fun e-> e.Value.DisplayName)
24192418
|> Set.ofSeq
24202419

@@ -2522,21 +2521,19 @@ let rec ResolvePatternLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv num
25222521
match tyconSearch+++ ctorSearch+++ moduleSearchwith
25232522
| Result[]->
25242523
letsuggestPossibleTypes()=
2525-
match adwith
2526-
| AccessibleFrom_->
2527-
letsubmodules=
2528-
mty.ModulesAndNamespacesByDemangledName
2529-
|> Seq.filter(fun kv-> IsEntityAccessible ncenv.amap m ad(modref.NestedTyconRef kv.Value))
2530-
|> Seq.collect(fun e->[e.Value.DisplayName; e.Value.DemangledModuleOrNamespaceName])
2531-
|> Set.ofSeq
2524+
letsubmodules=
2525+
mty.ModulesAndNamespacesByDemangledName
2526+
|> Seq.filter(fun kv-> IsEntityAccessible ncenv.amap m ad(modref.NestedTyconRef kv.Value))
2527+
|> Seq.collect(fun e->[e.Value.DisplayName; e.Value.DemangledModuleOrNamespaceName])
2528+
|> Set.ofSeq
25322529

2533-
letsuggestedTypes=
2534-
nenv.TyconsByDemangledNameAndArity FullyQualifiedFlag.OpenQualified
2535-
|> Seq.map(fun e-> e.Value.DisplayName)
2536-
|> Set.ofSeq
2530+
letsuggestedTypes=
2531+
nenv.TyconsByDemangledNameAndArity FullyQualifiedFlag.OpenQualified
2532+
|> Seq.filter(fun e-> IsEntityAccessible ncenv.amap m ad e.Value)
2533+
|> Seq.map(fun e-> e.Value.DisplayName)
2534+
|> Set.ofSeq
25372535

2538-
Set.union submodules suggestedTypes
2539-
|_-> Set.empty
2536+
Set.union submodules suggestedTypes
25402537

25412538
raze(UndefinedName(depth,FSComp.SR.undefinedNameConstructorModuleOrNamespace,id,suggestPossibleTypes))
25422539
| results-> AtMostOneResult id.idRange results
@@ -2677,13 +2674,10 @@ let ResolveTypeLongIdentInTyconRef sink (ncenv:NameResolver) nenv typeNameResInf
26772674
/// Create an UndefinedName error with details
26782675
letSuggestTypeLongIdentInModuleOrNamespace depth(modref:ModuleOrNamespaceRef)amap ad m(id:Ident)=
26792676
letsuggestPossibleTypes()=
2680-
match adwith
2681-
| AccessibleFrom_->
2682-
modref.ModuleOrNamespaceType.AllEntities
2683-
|> Seq.filter(fun e-> IsEntityAccessible amap m ad(modref.NestedTyconRef e))
2684-
|> Seq.collect(fun e->[e.DisplayName; e.DemangledModuleOrNamespaceName])
2685-
|> Set.ofSeq
2686-
|_-> Set.empty
2677+
modref.ModuleOrNamespaceType.AllEntities
2678+
|> Seq.filter(fun e-> IsEntityAccessible amap m ad(modref.NestedTyconRef e))
2679+
|> Seq.collect(fun e->[e.DisplayName; e.DemangledModuleOrNamespaceName])
2680+
|> Set.ofSeq
26872681

26882682
leterrorTextF s= FSComp.SR.undefinedNameTypeIn(s,fullDisplayTextOfModRef modref)
26892683
UndefinedName(depth,errorTextF,id,suggestPossibleTypes)
@@ -2707,13 +2701,10 @@ let rec private ResolveTypeLongIdentInModuleOrNamespace (ncenv:NameResolver) (ty
27072701
ResolveTypeLongIdentInModuleOrNamespace ncenv typeNameResInfo ad genOk resInfo(depth+1) m submodref submodref.ModuleOrNamespaceType rest
27082702
|_->
27092703
letsuggestPossibleModules()=
2710-
match adwith
2711-
| AccessibleFrom_->
2712-
modref.ModuleOrNamespaceType.ModulesAndNamespacesByDemangledName
2713-
|> Seq.filter(fun kv-> IsEntityAccessible ncenv.amap m ad(modref.NestedTyconRef kv.Value))
2714-
|> Seq.collect(fun e->[e.Value.DisplayName; e.Value.DemangledModuleOrNamespaceName])
2715-
|> Set.ofSeq
2716-
|_-> Set.empty
2704+
modref.ModuleOrNamespaceType.ModulesAndNamespacesByDemangledName
2705+
|> Seq.filter(fun kv-> IsEntityAccessible ncenv.amap m ad(modref.NestedTyconRef kv.Value))
2706+
|> Seq.collect(fun e->[e.Value.DisplayName; e.Value.DemangledModuleOrNamespaceName])
2707+
|> Set.ofSeq
27172708
raze(UndefinedName(depth,FSComp.SR.undefinedNameNamespaceOrModule,id,suggestPossibleModules))
27182709

27192710
lettyconSearch=
@@ -2757,21 +2748,18 @@ let rec ResolveTypeLongIdentPrim (ncenv:NameResolver) occurence fullyQualified m
27572748
success(ResolutionInfo.Empty,tcref)
27582749
|[]->
27592750
letsuggestPossibleTypes()=
2760-
match adwith
2761-
| AccessibleFrom_->
2762-
nenv.TyconsByDemangledNameAndArity(fullyQualified)
2763-
|> Seq.filter(fun kv-> IsEntityAccessible ncenv.amap m ad kv.Value)
2764-
|> Seq.collect(fun e->
2765-
match occurencewith
2766-
| ItemOccurence.UseInAttribute->
2767-
[yield e.Value.DisplayName
2768-
yield e.Value.DemangledModuleOrNamespaceName
2769-
if e.Value.DisplayName.EndsWith"Attribute"then
2770-
yield e.Value.DisplayName.Replace("Attribute","")]
2771-
|_->[e.Value.DisplayName; e.Value.DemangledModuleOrNamespaceName])
2772-
|> Set.ofSeq
2773-
|_-> Set.empty
2774-
2751+
nenv.TyconsByDemangledNameAndArity(fullyQualified)
2752+
|> Seq.filter(fun kv-> IsEntityAccessible ncenv.amap m ad kv.Value)
2753+
|> Seq.collect(fun e->
2754+
match occurencewith
2755+
| ItemOccurence.UseInAttribute->
2756+
[yield e.Value.DisplayName
2757+
yield e.Value.DemangledModuleOrNamespaceName
2758+
if e.Value.DisplayName.EndsWith"Attribute"then
2759+
yield e.Value.DisplayName.Replace("Attribute","")]
2760+
|_->[e.Value.DisplayName; e.Value.DemangledModuleOrNamespaceName])
2761+
|> Set.ofSeq
2762+
27752763
raze(UndefinedName(0,FSComp.SR.undefinedNameType,id,suggestPossibleTypes))
27762764

27772765
| id::rest->
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// #Warnings
2+
//<Expects status="Error" id="FS0039">The field, constructor or member 'Cas1' is not defined. Maybe you want one of the following: Case1</Expects>
3+
4+
[<RequireQualifiedAccess>]
5+
typeMyUnion=
6+
| Case1
7+
| Case2
8+
9+
lety= MyUnion.Case1
10+
11+
letx=
12+
match ywith
13+
| MyUnion.Cas1->1
14+
|_->2
15+
16+
exit0

‎tests/fsharpqa/Source/Warnings/env.lst‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
SOURCE=SuggestModules.fs # SuggestModules.fs
2929
SOURCE=SuggestMethods.fs # SuggestMethods.fs
3030
SOURCE=SuggestAttributes.fs # SuggestAttributes.fs
31+
SOURCE=SuggestUnionsInPatternMatch.fs SCFLAGS="--vserrors" # SuggestUnionsInPatternMatch.fs
3132
SOURCE=SuggestUnionTypeForRQAUnions.fs SCFLAGS="--vserrors" # SuggestUnionTypeForRQAUnions.fs
3233
SOURCE=SuggestRecordTypeForRQARecords.fs SCFLAGS="--vserrors" # SuggestRecordTypeForRQARecords.fs
3334
SOURCE=SuggestRecordLabels.fs SCFLAGS="--vserrors" # SuggestRecordLabels.fs

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp