Skip to content

Commit 8615245

Browse files
authored
Merge pull request #3606 from KevinRansom/mergeintortm
Merge latest master into rtm
2 parents 6b68865 + 194fa62 commit 8615245

File tree

6 files changed

+39
-38
lines changed

6 files changed

+39
-38
lines changed

src/fsharp/NameResolution.fs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3123,30 +3123,33 @@ let private ResolveExprDotLongIdent (ncenv:NameResolver) m ad nenv typ lid findF
31233123
let typeNameResInfo = TypeNameResolutionInfo.Default
31243124
let adhoctDotSearchAccessible = AtMostOneResult m (ResolveLongIdentInTypePrim ncenv nenv LookupKind.Expr ResolutionInfo.Empty 1 m ad lid findFlag typeNameResInfo typ)
31253125
match adhoctDotSearchAccessible with
3126-
| Exception _ ->
3126+
| Exception _ ->
31273127
// If the dot is not resolved by adhoc overloading then look for a record field
31283128
// that can resolve the name.
3129-
let dotFieldIdSearch =
3130-
match lid with
3131-
// A unique record label access, e.g expr.field
3132-
| id::rest when nenv.eFieldLabels.ContainsKey(id.idText) ->
3133-
match nenv.eFieldLabels.[id.idText] with
3134-
| [] -> NoResultsOrUsefulErrors
3135-
| rfref :: _ ->
3136-
// NOTE (instantiationGenerator cleanup): we need to freshen here because we don't know the type.
3137-
// But perhaps the caller should freshen??
3138-
let item = FreshenRecdFieldRef ncenv m rfref
3139-
OneSuccess (ResolutionInfo.Empty,item,rest)
3140-
| _ -> NoResultsOrUsefulErrors
3129+
let dotFieldIdSearch =
3130+
// If the type is already known, we should not try to lookup a record field
3131+
if isAppTy ncenv.g typ then
3132+
NoResultsOrUsefulErrors
3133+
else
3134+
match lid with
3135+
// A unique record label access, e.g expr.field
3136+
| id::rest when nenv.eFieldLabels.ContainsKey(id.idText) ->
3137+
match nenv.eFieldLabels.[id.idText] with
3138+
| [] -> NoResultsOrUsefulErrors
3139+
| rfref :: _ ->
3140+
// NOTE (instantiationGenerator cleanup): we need to freshen here because we don't know the type.
3141+
// But perhaps the caller should freshen??
3142+
let item = FreshenRecdFieldRef ncenv m rfref
3143+
OneSuccess (ResolutionInfo.Empty,item,rest)
3144+
| _ -> NoResultsOrUsefulErrors
31413145

31423146
let search = dotFieldIdSearch
31433147
match AtMostOneResult m search with
31443148
| Result _ as res -> ForceRaise res
31453149
| _ ->
31463150
let adhocDotSearchAll = ResolveLongIdentInTypePrim ncenv nenv LookupKind.Expr ResolutionInfo.Empty 1 m AccessibleFromSomeFSharpCode lid findFlag typeNameResInfo typ
31473151
ForceRaise (AtMostOneResult m (search +++ adhocDotSearchAll))
3148-
3149-
| Result _ ->
3152+
| _ ->
31503153
ForceRaise adhoctDotSearchAccessible
31513154

31523155
let ComputeItemRange wholem (lid: Ident list) rest =

tests/fsharp/tests.fs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2154,6 +2154,9 @@ module TypecheckTests =
21542154
let cfg = { cfg with fsc_flags = cfg.fsc_flags + " --warnon:3218" }
21552155
singleNegTest cfg "neg100"
21562156

2157+
[<Test>]
2158+
let ``type check neg101`` () = singleNegTest (testConfig "typecheck/sigs") "neg101"
2159+
21572160
[<Test>]
21582161
let ``type check neg_byref_1`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_1"
21592162

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
neg101.fs(7,11,7,14): typecheck error FS0039: The field, constructor or member 'Foo' is not defined.

tests/fsharp/typecheck/sigs/neg101.fs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
module M
3+
4+
type MyRec = { Foo: string }
5+
6+
let x: int = 1
7+
let y = x.Foo
8+
let f1 z = z.Foo
9+
let f2 (z: MyRec) = z.Foo

vsintegration/Vsix/RegisterFsharpPackage.pkgdef

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,6 @@
1212
"{7651a701-06e5-11d1-8ebd-00a0c90f26ea}"=""
1313
"{7651a703-06e5-11d1-8ebd-00a0c90f26ea}"=""
1414

15-
[$RootKey$\Projects\{A1591282-1198-4647-A2B1-27E5FF5F6F3B}\LanguageTemplates]
16-
"{F2A71F9B-5D33-465A-A702-920D77279786}"="{76B279E8-36ED-494E-B145-5344F8DEFCB6}"
17-
18-
[$RootKey$\Projects\{349C5851-65DF-11DA-9384-00065B846F21}\LanguageTemplates]
19-
"{F2A71F9B-5D33-465A-A702-920D77279786}"="{76B279E8-36ED-494E-B145-5344F8DEFCB6}"
20-
21-
[$RootKey$\Projects\{76B279E8-36ED-494E-B145-5344F8DEFCB6}]
22-
"Language(VsTemplate)"="FSharp"
23-
"Package"="{91A04A73-4F2C-4E7C-AD38-C1A68E7DA05C}"
24-
"ShowOnlySpecifiedTemplates(VsTemplate)"="00000000"
25-
"TemplateGroupIDs(VsTemplate)"="Silverlight"
26-
@="F# Silverlight Project Templates"
27-
28-
[$RootKey$\Projects\{76B279E8-36ED-494E-B145-5344F8DEFCB6}\SilverlightProperties]
29-
"CodeFileExtension"=".fs"
30-
"TemplateFolder"="FSharp"
31-
"DefaultProjectTemplate"="SilverlightLibrary\SilverlightLibrary.vstemplate"
32-
"LanguageDisplayString"="Visual F#"
33-
"PropertyPagesToRemove"="{6D2D9B56-2691-4624-A1BF-D07A14594748};{9CFBEB2A-6824-43e2-BD3B-B112FEBC3772}"
34-
3515
[$RootKey$\InstalledProducts\Microsoft Visual F#]
3616
"Package"="{91a04a73-4f2c-4e7c-ad38-c1a68e7da05c}"
3717
"ProductDetails"="#9002"

vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,13 @@ type internal FSharpProjectOptionsManager
274274
}
275275

276276
member this.UpdateProjectInfoWithProjectId(projectId:ProjectId, userOpName) =
277-
let project = workspace.CurrentSolution.GetProject(projectId)
278-
let siteProvider = this.ProvideProjectSiteProvider(project)
279-
this.UpdateProjectInfo(tryGetOrCreateProjectId, projectId, siteProvider.GetProjectSite(), userOpName)
277+
let hier = workspace.GetHierarchy(projectId)
278+
match hier with
279+
| h when (h.IsCapabilityMatch("CPS")) ->
280+
let project = workspace.CurrentSolution.GetProject(projectId)
281+
let siteProvider = this.ProvideProjectSiteProvider(project)
282+
this.UpdateProjectInfo(tryGetOrCreateProjectId, projectId, siteProvider.GetProjectSite(), userOpName)
283+
| _ -> ()
280284

281285
member this.UpdateProjectInfoWithPath(path, userOpName) =
282286
let projectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(path, projectDisplayNameOf path)

0 commit comments

Comments
 (0)