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

Commit3846384

Browse files
auduchinokKevinRansom
authored andcommitted
Do not check assembly symbols equality by DefinitionRange and name (#4662)
* Do not check assembly symbols equality by DefinitionRange and nameAssembly symbols have startup definition range and considered equal.Fixes #4658.* Add test for equality of entities from assemblies with the same name* Add checks for range0 and rangeCmdArgs ranges* Do not run new tests on netcoreapp2.0
1 parentab48458 commit3846384

File tree

3 files changed

+71
-7
lines changed

3 files changed

+71
-7
lines changed

‎src/fsharp/NameResolution.fs‎

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,19 +1346,23 @@ let tyconRefDefnHash (_g: TcGlobals) (eref1:EntityRef) =
13461346
hash eref1.LogicalName
13471347

13481348
lettyconRefDefnEq g(eref1:EntityRef)(eref2:EntityRef)=
1349-
tyconRefEq g eref1 eref2
1349+
tyconRefEq g eref1 eref2||
1350+
13501351
// Signature items considered equal to implementation items
1351-
||((eref1.DefinitionRange= eref2.DefinitionRange|| eref1.SigRange= eref2.SigRange)&&
1352-
(eref1.LogicalName= eref2.LogicalName))
1352+
eref1.DefinitionRange<> Range.rangeStartup&& eref1.DefinitionRange<> Range.range0&& eref1.DefinitionRange<> Range.rangeCmdArgs&&
1353+
(eref1.DefinitionRange= eref2.DefinitionRange|| eref1.SigRange= eref2.SigRange)&&
1354+
eref1.LogicalName= eref2.LogicalName
13531355

1354-
letvalRefDefnHash(_g:TcGlobals)(vref1:ValRef)=
1356+
letvalRefDefnHash(_g:TcGlobals)(vref1:ValRef)=
13551357
hash vref1.DisplayName
13561358

13571359
letvalRefDefnEq g(vref1:ValRef)(vref2:ValRef)=
1358-
valRefEq g vref1 vref2
1360+
valRefEq g vref1 vref2||
1361+
13591362
// Signature items considered equal to implementation items
1360-
||((vref1.DefinitionRange= vref2.DefinitionRange|| vref1.SigRange= vref2.SigRange))&&
1361-
(vref1.LogicalName= vref2.LogicalName)
1363+
vref1.DefinitionRange<> Range.rangeStartup&& vref1.DefinitionRange<> Range.range0&& vref1.DefinitionRange<> Range.rangeCmdArgs&&
1364+
(vref1.DefinitionRange= vref2.DefinitionRange|| vref1.SigRange= vref2.SigRange)&&
1365+
vref1.LogicalName= vref2.LogicalName
13621366

13631367
letunionCaseRefDefnEq g(uc1:UnionCaseRef)(uc2:UnionCaseRef)=
13641368
uc1.CaseName= uc2.CaseName&& tyconRefDefnEq g uc1.TyconRef uc2.TyconRef

‎tests/service/CSharpProjectAnalysis.fs‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,53 @@ let _ = CSharpClass(0)
146146
Seq.exists(fun(mfv: FSharpMemberOrFunctionOrValue)-> mfv.IsEffectivelySameAs ctor) members|> should be True
147147
| None-> failwith"Expected Some for DeclaringEntity"
148148

149+
letgetEntitiesUses source=
150+
letcsharpAssembly= PathRelativeToTestAssembly"CSharp_Analysis.dll"
151+
letresults,_= getProjectReferences(source,[csharpAssembly], None, None)
152+
results.GetAllUsesOfAllSymbols()
153+
|> Async.RunSynchronously
154+
|> Seq.choose(fun su->
155+
match su.Symbolwith
156+
|:? FSharpEntityas entity-> Some entity
157+
|_-> None)
158+
|> List.ofSeq
159+
160+
[<Test>]
161+
#if NETCOREAPP2_0
162+
[<Ignore("SKIPPED: need to check if these tests can be enabled for .NET Core testing of FSharp.Compiler.Service")>]
163+
#endif
164+
let``Different types with the same short name equality check``()=
165+
letsource="""
166+
module CtorTest
167+
168+
let (s1: System.String) = null
169+
let (s2: FSharp.Compiler.Service.Tests.String) = null
170+
"""
171+
172+
letstringSymbols=
173+
getEntitiesUses source
174+
|> List.filter(fun entity-> entity.LogicalName="String")
175+
176+
match stringSymbolswith
177+
| e1:: e2::[]-> e1.IsEffectivelySameAs(e2)|> should be False
178+
|_-> sprintf"Expecting two symbols, got%A" stringSymbols|> failwith
179+
180+
[<Test>]
181+
#if NETCOREAPP2_0
182+
[<Ignore("SKIPPED: need to check if these tests can be enabled for .NET Core testing of FSharp.Compiler.Service")>]
183+
#endif
184+
let``Different namespaces with the same short name equality check``()=
185+
letsource="""
186+
module CtorTest
187+
188+
open System.Linq
189+
open FSharp.Compiler.Service.Tests.Linq
190+
"""
191+
192+
letstringSymbols=
193+
getEntitiesUses source
194+
|> List.filter(fun entity-> entity.LogicalName="Linq")
195+
196+
match stringSymbolswith
197+
| e1:: e2::[]-> e1.IsEffectivelySameAs(e2)|> should be False
198+
|_-> sprintf"Expecting two symbols, got%A" stringSymbols|> failwith

‎tests/service/data/CSharp_Analysis/CSharpClass.cs‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,14 @@ public static int StaticMember()
126126
}
127127
}
128128

129+
publicclassString
130+
{
131+
}
132+
133+
namespaceLinq
134+
{
135+
publicclassDummyClass
136+
{
137+
}
138+
}
129139
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp