Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
dbccb1c
Merge pull request #6641 from Microsoft/merges/dev16.1-to-dev16.2
Apr 27, 2019
e3e148c
update vs minor version (#6649)
brettfo Apr 29, 2019
046491a
Merge pull request #6642 from Microsoft/merges/master-to-dev16.2
brettfo Apr 29, 2019
34c27d3
Merge pull request #6651 from Microsoft/merges/master-to-dev16.2
Apr 30, 2019
ef3fc2e
Merge remote-tracking branch 'upstream/master' into merges/master-to-…
brettfo Apr 30, 2019
35c5f78
Merge pull request #6658 from Microsoft/merges/master-to-dev16.2
May 1, 2019
267fa06
Merge pull request #6663 from Microsoft/merges/master-to-dev16.2
May 2, 2019
1185538
Merge pull request #6670 from Microsoft/merges/master-to-dev16.2
May 3, 2019
0f93a32
Merge pull request #6683 from Microsoft/merges/master-to-dev16.2
May 3, 2019
485db82
Merge pull request #6682 from Microsoft/merges/dev16.1-to-dev16.2
May 4, 2019
8cc3c7e
Merge pull request #6692 from microsoft/merges/master-to-dev16.2
May 7, 2019
bdf1bec
Merge pull request #6696 from microsoft/merges/master-to-dev16.2
May 7, 2019
2f7ce9e
Merge pull request #6704 from microsoft/merges/master-to-dev16.2
May 10, 2019
1e6bb28
Merge pull request #6708 from microsoft/merges/master-to-dev16.2
May 10, 2019
732b6d0
Merge pull request #6713 from microsoft/merges/master-to-dev16.2
May 13, 2019
5ade74b
Merge pull request #6719 from microsoft/merges/master-to-dev16.2
May 13, 2019
d697eac
Merge pull request #6720 from microsoft/merges/master-to-dev16.2
May 13, 2019
e8102e4
Merge pull request #6726 from microsoft/merges/master-to-dev16.2
May 14, 2019
52c75b3
Update Versions.props
KevinRansom May 14, 2019
90895fd
Merge remote-tracking branch 'upstream/master' into merges/master-to-…
brettfo May 15, 2019
62e9d32
Merge pull request #6736 from microsoft/merges/master-to-release/dev16.2
May 15, 2019
a45d839
Merge pull request #6743 from dotnet/merges/master-to-release/dev16.2
May 16, 2019
eab5ba5
Merge pull request #6757 from dotnet/merges/master-to-release/dev16.2
May 17, 2019
c865d96
Merge pull request #6762 from dotnet/merges/master-to-release/dev16.2
May 17, 2019
0b12961
Merge pull request #6773 from dotnet/merges/master-to-release/dev16.2
May 18, 2019
12313b2
Merge pull request #6787 from dotnet/merges/master-to-release/dev16.2
May 21, 2019
22ecba8
Merge pull request #6792 from dotnet/merges/master-to-release/dev16.2
brettfo May 21, 2019
ca554b0
Merge pull request #6798 from dotnet/merges/master-to-release/dev16.2
May 22, 2019
d6da7ce
Merge pull request #6821 from dotnet/merges/master-to-release/dev16.2
May 23, 2019
808f232
Merge pull request #6834 from dotnet/merges/master-to-release/dev16.2
May 24, 2019
6b02b74
Merge pull request #6852 from dotnet/merges/master-to-release/dev16.2
May 25, 2019
cb51737
Merge branch 'release/dev16.2' into merges/master-to-release/dev16.2
KevinRansom May 27, 2019
42c125e
Merge pull request #6878 from dotnet/merges/master-to-release/dev16.2
May 27, 2019
00cbd3f
Fixed uninitialized mutable locals inside loops (#6899)
TIHan May 31, 2019
f96a2f6
Merge branch 'release/dev16.2' into merges/master-to-release/dev16.2
brettfo Jun 1, 2019
c31566c
Merge pull request #6894 from dotnet/merges/master-to-release/dev16.2
Jun 1, 2019
431fdea
Merge pull request #6918 from dotnet/merges/master-to-release/dev16.2
Jun 2, 2019
3de631a
Stop calling GetHierarchy in FSharpProjectOptionsReactor (#6946)
TIHan Jun 6, 2019
3040aa2
Merge pull request #6982 from dotnet/merges/master-to-release/dev16.2
brettfo Jun 12, 2019
bff4fff
don't ship LSP in VS in `release/dev16.2` (#6983)
brettfo Jun 12, 2019
0aeb4a0
Roslyn Shim - Round 2 (#6734)
TIHan Jun 13, 2019
a24d94e
LOC CHECKIN | Microsoft/visualfsharp release/dev16.2 | 20190620 (#7022)
v-zbsail Jun 20, 2019
a67156b
Merge branch 'master' into merges/release/dev16.2-to-master
brettfo Jul 24, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Stop calling GetHierarchy in FSharpProjectOptionsReactor (#6946)
* Stop calling GetHierarchy in FSharpProjectOptionsReactor

* Fixing build
  • Loading branch information
TIHan authored Jun 6, 2019
commit 3de631a4ba0f54953bad33661008d39fb6df7669
2 changes: 1 addition & 1 deletion fcs/build.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ let releaseDir = Path.Combine(__SOURCE_DIRECTORY__, "../artifacts/bin/fcs/Releas
let release = LoadReleaseNotes (__SOURCE_DIRECTORY__ + "/RELEASE_NOTES.md")
let isAppVeyorBuild = buildServer = BuildServer.AppVeyor
let isJenkinsBuild = buildServer = BuildServer.Jenkins
let isVersionTag tag = Version.TryParse tag |> fst
let isVersionTag (tag: string) = Version.TryParse tag |> fst
let hasRepoVersionTag = isAppVeyorBuild && AppVeyorEnvironment.RepoTag && isVersionTag AppVeyorEnvironment.RepoTagName
let assemblyVersion = if hasRepoVersionTag then AppVeyorEnvironment.RepoTagName else release.NugetVersion

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,58 +24,30 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices
[<AutoOpen>]
module private FSharpProjectOptionsHelpers =

let mapCpsProjectToSite(workspace:VisualStudioWorkspace, project:Project, serviceProvider:System.IServiceProvider, cpsCommandLineOptions: IDictionary<ProjectId, string[] * string[]>) =
let hier = workspace.GetHierarchy(project.Id)
let mapCpsProjectToSite(project:Project, cpsCommandLineOptions: IDictionary<ProjectId, string[] * string[]>) =
let sourcePaths, referencePaths, options =
match cpsCommandLineOptions.TryGetValue(project.Id) with
| true, (sourcePaths, options) -> sourcePaths, [||], options
| false, _ -> [||], [||], [||]
let mutable errorReporter = Unchecked.defaultof<_>
{
new IProvideProjectSite with
member x.GetProjectSite() =
let mutable errorReporter =
let reporter = ProjectExternalErrorReporter(project.Id, "FS", serviceProvider)
Some(reporter:> IVsLanguageServiceBuildErrorReporter2)

{
new IProjectSite with
member __.Description = project.Name
member __.CompilationSourceFiles = sourcePaths
member __.CompilationOptions =
Array.concat [options; referencePaths |> Array.map(fun r -> "-r:" + r)]
member __.CompilationReferences = referencePaths
member site.CompilationBinOutputPath = site.CompilationOptions |> Array.tryPick (fun s -> if s.StartsWith("-o:") then Some s.[3..] else None)
member __.ProjectFileName = project.FilePath
member __.AdviseProjectSiteChanges(_,_) = ()
member __.AdviseProjectSiteCleaned(_,_) = ()
member __.AdviseProjectSiteClosed(_,_) = ()
member __.IsIncompleteTypeCheckEnvironment = false
member __.TargetFrameworkMoniker = ""
member __.ProjectGuid = project.Id.Id.ToString()
member __.LoadTime = System.DateTime.Now
member __.ProjectProvider = Some (x)
member __.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v
}
interface IVsHierarchy with
member __.SetSite(psp) = hier.SetSite(psp)
member __.GetSite(psp) = hier.GetSite(ref psp)
member __.QueryClose(pfCanClose)= hier.QueryClose(ref pfCanClose)
member __.Close() = hier.Close()
member __.GetGuidProperty(itemid, propid, pguid) = hier.GetGuidProperty(itemid, propid, ref pguid)
member __.SetGuidProperty(itemid, propid, rguid) = hier.SetGuidProperty(itemid, propid, ref rguid)
member __.GetProperty(itemid, propid, pvar) = hier.GetProperty(itemid, propid, ref pvar)
member __.SetProperty(itemid, propid, var) = hier.SetProperty(itemid, propid, var)
member __.GetNestedHierarchy(itemid, iidHierarchyNested, ppHierarchyNested, pitemidNested) =
hier.GetNestedHierarchy(itemid, ref iidHierarchyNested, ref ppHierarchyNested, ref pitemidNested)
member __.GetCanonicalName(itemid, pbstrName) = hier.GetCanonicalName(itemid, ref pbstrName)
member __.ParseCanonicalName(pszName, pitemid) = hier.ParseCanonicalName(pszName, ref pitemid)
member __.Unused0() = hier.Unused0()
member __.AdviseHierarchyEvents(pEventSink, pdwCookie) = hier.AdviseHierarchyEvents(pEventSink, ref pdwCookie)
member __.UnadviseHierarchyEvents(dwCookie) = hier.UnadviseHierarchyEvents(dwCookie)
member __.Unused1() = hier.Unused1()
member __.Unused2() = hier.Unused2()
member __.Unused3() = hier.Unused3()
member __.Unused4() = hier.Unused4()
new IProjectSite with
member __.Description = project.Name
member __.CompilationSourceFiles = sourcePaths
member __.CompilationOptions =
Array.concat [options; referencePaths |> Array.map(fun r -> "-r:" + r)]
member __.CompilationReferences = referencePaths
member site.CompilationBinOutputPath = site.CompilationOptions |> Array.tryPick (fun s -> if s.StartsWith("-o:") then Some s.[3..] else None)
member __.ProjectFileName = project.FilePath
member __.AdviseProjectSiteChanges(_,_) = ()
member __.AdviseProjectSiteCleaned(_,_) = ()
member __.AdviseProjectSiteClosed(_,_) = ()
member __.IsIncompleteTypeCheckEnvironment = false
member __.TargetFrameworkMoniker = ""
member __.ProjectGuid = project.Id.Id.ToString()
member __.LoadTime = System.DateTime.Now
member __.ProjectProvider = None
member __.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v
}

let hasProjectVersionChanged (oldProject: Project) (newProject: Project) =
Expand Down Expand Up @@ -108,11 +80,13 @@ type private FSharpProjectOptionsMessage =
| ClearSingleFileOptionsCache of DocumentId

[<Sealed>]
type private FSharpProjectOptionsReactor (workspace: VisualStudioWorkspace, settings: EditorOptions, serviceProvider, checkerProvider: FSharpCheckerProvider) =
type private FSharpProjectOptionsReactor (_workspace: VisualStudioWorkspace, settings: EditorOptions, _serviceProvider, checkerProvider: FSharpCheckerProvider) =
let cancellationTokenSource = new CancellationTokenSource()

// Hack to store command line options from HandleCommandLineChanges
let cpsCommandLineOptions = new ConcurrentDictionary<ProjectId, string[] * string[]>()
let cpsCommandLineOptions = ConcurrentDictionary<ProjectId, string[] * string[]>()

let legacyProjectSites = ConcurrentDictionary<ProjectId, IProjectSite>()

let cache = Dictionary<ProjectId, Project * FSharpParsingOptions * FSharpProjectOptions>()
let singleFileCache = Dictionary<DocumentId, VersionStamp * FSharpParsingOptions * FSharpProjectOptions>()
Expand Down Expand Up @@ -158,6 +132,16 @@ type private FSharpProjectOptionsReactor (workspace: VisualStudioWorkspace, sett
else
return Some(parsingOptions, projectOptions)
}

let tryGetProjectSite (project: Project) =
// Cps
if cpsCommandLineOptions.ContainsKey project.Id then
Some (mapCpsProjectToSite(project, cpsCommandLineOptions))
else
// Legacy
match legacyProjectSites.TryGetValue project.Id with
| true, site -> Some site
| _ -> None

let rec tryComputeOptions (project: Project) =
async {
Expand All @@ -183,15 +167,9 @@ type private FSharpProjectOptionsReactor (workspace: VisualStudioWorkspace, sett
return None
else

let hier = workspace.GetHierarchy(projectId)
let projectSite =
match hier with
// Legacy
| (:? IProvideProjectSite as provideSite) -> provideSite.GetProjectSite()
// Cps
| _ ->
let provideSite = mapCpsProjectToSite(workspace, project, serviceProvider, cpsCommandLineOptions)
provideSite.GetProjectSite()
match tryGetProjectSite project with
| None -> return None
| Some projectSite ->

let otherOptions =
project.ProjectReferences
Expand Down Expand Up @@ -283,6 +261,7 @@ type private FSharpProjectOptionsReactor (workspace: VisualStudioWorkspace, sett

| FSharpProjectOptionsMessage.ClearOptions(projectId) ->
cache.Remove(projectId) |> ignore
legacyProjectSites.TryRemove(projectId) |> ignore
| FSharpProjectOptionsMessage.ClearSingleFileOptionsCache(documentId) ->
singleFileCache.Remove(documentId) |> ignore
}
Expand All @@ -304,6 +283,9 @@ type private FSharpProjectOptionsReactor (workspace: VisualStudioWorkspace, sett
member __.SetCpsCommandLineOptions(projectId, sourcePaths, options) =
cpsCommandLineOptions.[projectId] <- (sourcePaths, options)

member __.SetLegacyProjectSite (projectId, projectSite) =
legacyProjectSites.[projectId] <- projectSite

member __.TryGetCachedOptionsByProjectId(projectId) =
match cache.TryGetValue(projectId) with
| true, result -> Some(result)
Expand Down Expand Up @@ -344,6 +326,9 @@ type internal FSharpProjectOptionsManager
| _ -> ()
)

member __.SetLegacyProjectSite (projectId, projectSite) =
reactor.SetLegacyProjectSite (projectId, projectSite)

/// Clear a project from the project table
member this.ClearInfoForProject(projectId:ProjectId) =
reactor.ClearOptionsByProjectId(projectId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ type internal LegacyProjectWorkspaceMap(solution: IVsSolution,

let projectId = projectContext.Id

projectInfoManager.SetLegacyProjectSite (projectId, site)

// Sync the source files in projectContext. Note that these source files are __not__ maintained in order in projectContext
// as edits are made. It seems this is ok because the source file list is only used to drive roslyn per-file checking.
let updatedFiles = site.CompilationSourceFiles |> wellFormedFilePathSetIgnoreCase
Expand Down