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

Commit21f9ee4

Browse files
TIHanKevinRansom
authored andcommitted
Stopped querying for projectId based on path; instead, passing projectId itself. This isolates us from roslyn stuff (#5284)
1 parent9880cc7 commit21f9ee4

File tree

2 files changed

+42
-35
lines changed

2 files changed

+42
-35
lines changed

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ type internal FSharpProjectOptionsManager
149149
memberthis.ComputeSingleFileOptions(tryGetOrCreateProjectId,fileName,loadTime,fileContents)=
150150
async{
151151
letextraProjectInfo= Some(box workspace)
152-
lettryGetOptionsForReferencedProject f= f|> tryGetOrCreateProjectId|> Option.bind this.TryGetOptionsForProject|> Option.map(fun(_,_,projectOptions)-> projectOptions)
153152
if SourceFile.MustBeSingleFileProject(fileName)then
154153
// NOTE: we don't use a unique stamp for single files, instead comparing options structurally.
155154
// This is because we repeatedly recompute the options.
@@ -159,12 +158,12 @@ type internal FSharpProjectOptionsManager
159158
// compiled and #r will refer to files on disk
160159
letreferencedProjectFileNames=[||]
161160
letsite= ProjectSitesAndFiles.CreateProjectSiteForScript(fileName, referencedProjectFileNames, options)
162-
letdeps,projectOptions= ProjectSitesAndFiles.GetProjectOptionsForProjectSite(Settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences,tryGetOptionsForReferencedProject,site, serviceProvider,(tryGetOrCreateProjectId fileName), fileName, options.ExtraProjectInfo, Some projectOptionsTable)
161+
letdeps,projectOptions= ProjectSitesAndFiles.GetProjectOptionsForProjectSite(Settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, site, serviceProvider,(tryGetOrCreateProjectId fileName), fileName, options.ExtraProjectInfo, Some projectOptionsTable)
163162
letparsingOptions,_= checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions)
164163
return(deps, parsingOptions, projectOptions)
165164
else
166165
letsite= ProjectSitesAndFiles.ProjectSiteOfSingleFile(fileName)
167-
letdeps,projectOptions= ProjectSitesAndFiles.GetProjectOptionsForProjectSite(Settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences,tryGetOptionsForReferencedProject,site, serviceProvider,(tryGetOrCreateProjectId fileName), fileName, extraProjectInfo, Some projectOptionsTable)
166+
letdeps,projectOptions= ProjectSitesAndFiles.GetProjectOptionsForProjectSite(Settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, site, serviceProvider,(tryGetOrCreateProjectId fileName), fileName, extraProjectInfo, Some projectOptionsTable)
168167
letparsingOptions,_= checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions)
169168
return(deps, parsingOptions, projectOptions)
170169
}
@@ -174,8 +173,7 @@ type internal FSharpProjectOptionsManager
174173
Logger.Log LogEditorFunctionId.LanguageService_UpdateProjectInfo
175174
projectOptionsTable.AddOrUpdateProject(projectId,(fun isRefresh->
176175
letextraProjectInfo= Some(box workspace)
177-
lettryGetOptionsForReferencedProject f= f|> tryGetOrCreateProjectId|> Option.bind this.TryGetOptionsForProject|> Option.map(fun(_,_,projectOptions)-> projectOptions)
178-
letreferencedProjects,projectOptions= ProjectSitesAndFiles.GetProjectOptionsForProjectSite(Settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, site, serviceProvider, Some(projectId), site.ProjectFileName, extraProjectInfo, Some projectOptionsTable)
176+
letreferencedProjects,projectOptions= ProjectSitesAndFiles.GetProjectOptionsForProjectSite(Settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, site, serviceProvider, Some(projectId), site.ProjectFileName, extraProjectInfo, Some projectOptionsTable)
179177
if invalidateConfigthen checkerProvider.Checker.InvalidateConfiguration(projectOptions, startBackgroundCompileIfAlreadySeen=not isRefresh, userOpName= userOpName+".UpdateProjectInfo")
180178
letreferencedProjectIds= referencedProjects|> Array.choose tryGetOrCreateProjectId
181179
letparsingOptions,_= checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions)
@@ -610,7 +608,7 @@ type internal FSharpLanguageService(package : FSharpPackage) =
610608
optionsAssociation.Remove(projectContext)|> ignore
611609
project.Disconnect()))
612610

613-
for referencedSitein ProjectSitesAndFiles.GetReferencedProjectSites(site, this.SystemServiceProvider, Some(this.Workspace:>obj), Some projectInfoManager.FSharpOptions)do
611+
for referencedSitein ProjectSitesAndFiles.GetReferencedProjectSites(Some projectId,site, this.SystemServiceProvider, Some(this.Workspace:>obj), Some projectInfoManager.FSharpOptions)do
614612
setup referencedSite
615613

616614
setup(siteProvider.GetProjectSite())

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

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -221,23 +221,25 @@ type internal ProjectSitesAndFiles() =
221221
|_-> None
222222
| Some_-> None
223223

224-
static let recreferencedProvideProjectSites(projectSite:IProjectSite,serviceProvider:System.IServiceProvider,extraProjectInfo:obj option,projectOptionsTable:FSharpProjectOptionsTable option)=
224+
static let recreferencedProvideProjectSites(projectIdOpt:ProjectId option,projectSite:IProjectSite,serviceProvider:System.IServiceProvider,extraProjectInfo:obj option,projectOptionsTable:FSharpProjectOptionsTable option)=
225225
letgetReferencesForSolutionService(solutionService:IVsSolution)=
226226
[|
227227
match referencedProjects projectSite, extraProjectInfowith
228228
| None, Some(:? VisualStudioWorkspaceImplas workspace)whennot(isNull workspace.CurrentSolution)->
229229
letpath= projectSite.ProjectFileName
230230
ifnot(String.IsNullOrWhiteSpace(path))then
231-
letprojectId= workspace.ProjectTracker.GetOrCreateProjectIdForPath(path, projectDisplayNameOf path)
232-
letproject= workspace.CurrentSolution.GetProject(projectId)
233-
ifnot(isNull project)then
234-
for referencein project.ProjectReferencesdo
235-
letproject= workspace.CurrentSolution.GetProject(reference.ProjectId)
236-
ifnot(isNull project)&& project.Language= FSharpConstants.FSharpLanguageNamethen
237-
letsiteProvider= provideProjectSiteProvider(workspace, project, serviceProvider, projectOptionsTable)
238-
letreferenceProject= workspace.ProjectTracker.GetProject(reference.ProjectId)
239-
letoutputPath= referenceProject.BinOutputPath
240-
yield Some projectId, project.FilePath, outputPath, siteProvider
231+
match projectIdOptwith
232+
| Some(projectId)->
233+
letproject= workspace.CurrentSolution.GetProject(projectId)
234+
ifnot(isNull project)then
235+
for referencein project.ProjectReferencesdo
236+
letproject= workspace.CurrentSolution.GetProject(reference.ProjectId)
237+
ifnot(isNull project)&& project.Language= FSharpConstants.FSharpLanguageNamethen
238+
letsiteProvider= provideProjectSiteProvider(workspace, project, serviceProvider, projectOptionsTable)
239+
letreferenceProject= workspace.ProjectTracker.GetProject(reference.ProjectId)
240+
letoutputPath= referenceProject.BinOutputPath
241+
yield Some project.Id, project.FilePath, outputPath, siteProvider
242+
|_->()
241243

242244
|(Some references),_->
243245
for pin referencesdo
@@ -255,26 +257,33 @@ type internal ProjectSitesAndFiles() =
255257
| None->()
256258
}
257259

258-
static let recreferencedProjectsOf(enableInMemoryCrossProjectReferences,tryGetOptionsForReferencedProject,projectSite,serviceProvider,extraProjectInfo,projectOptionsTable)=
259-
[|for(projectId, projectFileName, outputPath, projectSiteProvider)in referencedProvideProjectSites(projectSite, serviceProvider, extraProjectInfo, projectOptionsTable)do
260-
letreferencedProjectOptions=
261-
// Lookup may not succeed if the project has not been established yet
262-
// In this case we go and compute the options recursively.
263-
match tryGetOptionsForReferencedProject projectFileNamewith
264-
| None-> getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSiteProvider.GetProjectSite(), serviceProvider, projectId, projectFileName, extraProjectInfo, projectOptionsTable)|> snd
265-
| Some options-> options
266-
yield projectFileName,(outputPath, referencedProjectOptions)|]
267-
268-
andgetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences,tryGetOptionsForReferencedProject,projectSite,serviceProvider,projectId,fileName,extraProjectInfo,projectOptionsTable)=
260+
static let recreferencedProjectsOf(projectIdOpt,projectSite,serviceProvider,extraProjectInfo,projectOptionsTable)=
261+
[|for(projectIdOpt, projectFileName, outputPath,_projectSiteProvider)in referencedProvideProjectSites(projectIdOpt, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable)do
262+
letreferencedProjectOptionsOpt=
263+
projectOptionsTable
264+
|> Option.bind(fun x->
265+
match projectIdOptwith
266+
| Some(projectId)-> x.TryGetOptionsForProject(projectId)
267+
|_-> None
268+
)
269+
|> Option.map(fun(_,_,options)-> options)
270+
271+
match referencedProjectOptionsOptwith
272+
| Some(referencedProjectOptions)->
273+
yield projectFileName,(outputPath, referencedProjectOptions)
274+
|_->()
275+
|]
276+
277+
andgetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences,projectSite,serviceProvider,projectIdOpt,fileName,extraProjectInfo,projectOptionsTable)=
269278
letreferencedProjectFileNames,referencedProjectOptions=
270279
if enableInMemoryCrossProjectReferencesthen
271-
referencedProjectsOf(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable)
280+
referencedProjectsOf(projectIdOpt, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable)
272281
|> Array.unzip
273282
else[||],[||]
274283
letoption=
275284
letnewOption()={
276285
ProjectFileName= projectSite.ProjectFileName
277-
ProjectId=projectId|> Option.map(fun x-> x.ToFSharpProjectIdString())
286+
ProjectId=projectIdOpt|> Option.map(fun x-> x.ToFSharpProjectIdString())
278287
SourceFiles= projectSite.CompilationSourceFiles
279288
OtherOptions= projectSite.CompilationOptions
280289
ReferencedProjects= referencedProjectOptions
@@ -286,7 +295,7 @@ type internal ProjectSitesAndFiles() =
286295
ExtraProjectInfo=extraProjectInfo
287296
Stamp=(stamp<- stamp+1L; Some stamp)
288297
}
289-
matchprojectId, projectOptionsTablewith
298+
matchprojectIdOpt, projectOptionsTablewith
290299
| Some id, Some optionsTable->
291300
// Get options from cache
292301
match optionsTable.TryGetOptionsForProject(id)with
@@ -308,16 +317,16 @@ type internal ProjectSitesAndFiles() =
308317
failwith".fsx or .fsscript should have been treated as implicit project"
309318
new ProjectSiteOfSingleFile(filename):> IProjectSite
310319

311-
static memberGetReferencedProjectSites(projectSite:IProjectSite,serviceProvider:System.IServiceProvider,extraProjectInfo,projectOptions)=
312-
referencedProvideProjectSites(projectSite, serviceProvider, extraProjectInfo, projectOptions)
320+
static memberGetReferencedProjectSites(projectIdOpt,projectSite:IProjectSite,serviceProvider:System.IServiceProvider,extraProjectInfo,projectOptions)=
321+
referencedProvideProjectSites(projectIdOpt,projectSite, serviceProvider, extraProjectInfo, projectOptions)
313322
|> Seq.map(fun(_,_,_,ps)-> ps.GetProjectSite())
314323
|> Seq.toArray
315324

316325
/// Create project options for this project site.
317-
static memberGetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences,tryGetOptionsForReferencedProject,projectSite:IProjectSite,serviceProvider,projectId,filename,extraProjectInfo,projectOptionsTable)=
326+
static memberGetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences,projectSite:IProjectSite,serviceProvider,projectId,filename,extraProjectInfo,projectOptionsTable)=
318327
match projectSitewith
319328
|:? IHaveCheckOptionsas hco-> hco.OriginalCheckOptions()
320-
|_-> getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences,tryGetOptionsForReferencedProject,projectSite, serviceProvider, projectId, filename, extraProjectInfo, projectOptionsTable)
329+
|_-> getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, projectSite, serviceProvider, projectId, filename, extraProjectInfo, projectOptionsTable)
321330

322331
/// Create project site for these project options
323332
static memberCreateProjectSiteForScript(filename,referencedProjectFileNames,checkOptions)=

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp