Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Another go at --- Map workspace to iprojectsite #3564

Merged
merged 14 commits into from
Sep 16, 2017
1 change: 0 additions & 1 deletion src/fsharp/fsi/fsi.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2468,7 +2468,6 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i
do tcConfigB.resolutionEnvironment <- ResolutionEnvironment.EditingOrCompilation false
do tcConfigB.useSimpleResolution <- true
do SetTargetProfile tcConfigB "netcore" // always assume System.Runtime codegen
//do SetTargetProfile tcConfigB "privatecorelib" // always assume System.Private.CoreLib codegen
#endif

// Preset: --optimize+ -g --tailcalls+ (see 4505)
Expand Down
34 changes: 28 additions & 6 deletions src/fsharp/vs/IncrementalBuild.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1681,8 +1681,11 @@ type IncrementalBuilder(tcGlobals,frameworkTcImports, nonFrameworkAssemblyInputs
/// CreateIncrementalBuilder (for background type checking). Note that fsc.fs also
/// creates an incremental builder used by the command line compiler.
static member TryCreateBackgroundBuilderForProjectOptions (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, frameworkTcImportsCache: FrameworkImportsCache, loadClosureOpt:LoadClosure option, sourceFiles:string list, commandLineArgs:string list, projectReferences, projectDirectory, useScriptResolutionRules, keepAssemblyContents, keepAllBackgroundResolutions, maxTimeShareMilliseconds) =
let targetProfileSwitch = "--targetprofile:"
let useSimpleResolutionSwitch = "--simpleresolution"

cancellable {

// Trap and report warnings and errors from creation.
use errorScope = new ErrorScope()
let! builderOpt =
Expand All @@ -1695,23 +1698,38 @@ type IncrementalBuilder(tcGlobals,frameworkTcImports, nonFrameworkAssemblyInputs

/// Create a type-check configuration
let tcConfigB, sourceFilesNew =


let getSwitchValue switchstring =
match commandLineArgs |> Seq.tryFindIndex(fun s -> s.StartsWith(switchstring)) with
| Some idx -> Some(commandLineArgs.[idx].Substring(switchstring.Length))
| _ -> None

// see also fsc.fs:runFromCommandLineToImportingAssemblies(), as there are many similarities to where the PS creates a tcConfigB
let tcConfigB = TcConfigBuilder.CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir, implicitIncludeDir=projectDirectory, optimizeForMemory=true, isInteractive=false, isInvalidationSupported=true, defaultCopyFSharpCore=false)

// The following uses more memory but means we don't take read-exclusions on the DLLs we reference
// Could detect well-known assemblies--ie System.dll--and open them with read-locks
tcConfigB.openBinariesInMemory <- true

tcConfigB.resolutionEnvironment <- (ReferenceResolver.ResolutionEnvironment.EditingOrCompilation true)

tcConfigB.conditionalCompilationDefines <-
let define = if useScriptResolutionRules then "INTERACTIVE" else "COMPILED"
define::tcConfigB.conditionalCompilationDefines

tcConfigB.projectReferences <- projectReferences

#if COMPILER_SERVICE_ASSUMES_DOTNETCORE_COMPILATION
tcConfigB.useSimpleResolution <- true // turn off msbuild resolution
#else
tcConfigB.useSimpleResolution <- (getSwitchValue useSimpleResolutionSwitch) |> Option.isSome
#endif
match (getSwitchValue targetProfileSwitch) with
| Some v ->
let _s = v
CompileOptions.SetTargetProfile tcConfigB v
| None -> ()

// Apply command-line arguments and collect more source files if they are in the arguments
let sourceFilesNew =
try
Expand All @@ -1725,12 +1743,16 @@ type IncrementalBuilder(tcGlobals,frameworkTcImports, nonFrameworkAssemblyInputs

// Never open PDB files for the language service, even if --standalone is specified
tcConfigB.openDebugInformationForLaterStaticLinking <- false

match commandLineArgs |> Seq.tryFindIndex(fun s -> s.StartsWith(targetProfileSwitch)) with
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor nit - It's better to use Seq.tryFind, but it's no big deal

| Some idx ->
let profile = commandLineArgs.[idx].Substring(targetProfileSwitch.Length)
CompileOptions.SetTargetProfile tcConfigB profile
| _ -> ()
tcConfigB, sourceFilesNew

match loadClosureOpt with
| Some loadClosure ->
let dllReferences =
| Some loadClosure ->
let dllReferences =
[for reference in tcConfigB.referencedDLLs do
// If there's (one or more) resolutions of closure references then yield them all
match loadClosure.References |> List.tryFind (fun (resolved,_)->resolved=reference.Text) with
Expand Down
4 changes: 2 additions & 2 deletions src/fsharp/vs/service.fs
Original file line number Diff line number Diff line change
Expand Up @@ -3139,7 +3139,7 @@ type FsiInteractiveChecker(legacyReferenceResolver, reactorOps: IReactorOperatio

let loadClosure = LoadClosure.ComputeClosureOfSourceText(ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename, source, CodeContext.Editing, tcConfig.useSimpleResolution, tcConfig.useFsiAuxLib, new Lexhelp.LexResourceManager(), applyCompilerOptions, assumeDotNetFramework)
let! tcErrors, tcFileResult = Parser.CheckOneFile(parseResults, source, filename, "project", tcConfig, tcGlobals, tcImports, tcState, Some loadClosure, backgroundDiagnostics, reactorOps, (fun () -> true), None, userOpName)

return
match tcFileResult with
| Parser.TypeCheckAborted.No scope ->
Expand All @@ -3150,7 +3150,7 @@ type FsiInteractiveChecker(legacyReferenceResolver, reactorOps: IReactorOperatio
| _ ->
failwith "unexpected aborted"
}

//----------------------------------------------------------------------------
// CompilerEnvironment, DebuggerEnvironment
//
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ type internal FSharpColorizationService
[<ImportingConstructor>]
(
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager
projectInfoManager: ProjectInfoManager
) =
static let userOpName = "SemanticColorization"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ type internal FSharpAddOpenCodeFixProvider
[<ImportingConstructor>]
(
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager,
projectInfoManager: ProjectInfoManager,
assemblyContentProvider: AssemblyContentProvider
) =
inherit CodeFixProvider()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ type internal FSharpImplementInterfaceCodeFixProvider
[<ImportingConstructor>]
(
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager
projectInfoManager: ProjectInfoManager
) =
inherit CodeFixProvider()
let fixableDiagnosticIds = ["FS0366"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type internal FSharpProposeUpperCaseLabelCodeFixProvider
[<ImportingConstructor>]
(
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager
projectInfoManager: ProjectInfoManager
) =
inherit CodeFixProvider()
let fixableDiagnosticIds = ["FS0053"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ type internal FSharpRemoveUnusedOpensCodeFixProvider
[<ImportingConstructor>]
(
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager
projectInfoManager: ProjectInfoManager
) =
inherit CodeFixProvider()
let fixableDiagnosticIds = [IDEDiagnosticIds.RemoveUnnecessaryImportsDiagnosticId]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ type internal FSharpRenameParamToMatchSignature
[<ImportingConstructor>]
(
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager
projectInfoManager: ProjectInfoManager
) =

inherit CodeFixProvider()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ type internal FSharpRenameUnusedValueCodeFixProvider
[<ImportingConstructor>]
(
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager
projectInfoManager: ProjectInfoManager
) =

inherit CodeFixProvider()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ type internal FSharpHelpContextService
[<ImportingConstructor>]
(
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager
projectInfoManager: ProjectInfoManager
) =

static let userOpName = "ImplementInterfaceCodeFix"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ type internal XmlDocCommandFilter
wpfTextView: IWpfTextView,
filePath: string,
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager,
projectInfoManager: ProjectInfoManager,
workspace: VisualStudioWorkspaceImpl
) =

Expand Down Expand Up @@ -118,7 +118,7 @@ type internal XmlDocCommandFilter
type internal XmlDocCommandFilterProvider
[<ImportingConstructor>]
(checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager,
projectInfoManager: ProjectInfoManager,
workspace: VisualStudioWorkspaceImpl,
textDocumentFactoryService: ITextDocumentFactoryService,
editorFactory: IVsEditorAdaptersFactoryService) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ type internal FSharpCompletionProvider
workspace: Workspace,
serviceProvider: SVsServiceProvider,
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager,
projectInfoManager: ProjectInfoManager,
assemblyContentProvider: AssemblyContentProvider
) =

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ type internal FSharpCompletionService
workspace: Workspace,
serviceProvider: SVsServiceProvider,
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager,
projectInfoManager: ProjectInfoManager,
assemblyContentProvider: AssemblyContentProvider
) =
inherit CompletionServiceWithProviders(workspace)
Expand Down Expand Up @@ -47,7 +47,7 @@ type internal FSharpCompletionServiceFactory
(
serviceProvider: SVsServiceProvider,
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager,
projectInfoManager: ProjectInfoManager,
assemblyContentProvider: AssemblyContentProvider
) =
interface ILanguageServiceFactory with
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ type internal Completion =
AllowableExtensions = allowableExtensions
UseIncludeDirectives = useIncludeDirectives }

type internal HashDirectiveCompletionProvider(workspace: Workspace, projectInfoManager: FSharpProjectOptionsManager, completions: Completion list) =
type internal HashDirectiveCompletionProvider(workspace: Workspace, projectInfoManager: ProjectInfoManager, completions: Completion list) =
inherit CommonCompletionProvider()

let [<Literal>] NetworkPath = "\\\\"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ type internal FSharpSignatureHelpProvider
(
serviceProvider: SVsServiceProvider,
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager
projectInfoManager: ProjectInfoManager
) =

static let userOpName = "SignatureHelpProvider"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ type internal FSharpBreakpointResolutionService
[<ImportingConstructor>]
(
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager
projectInfoManager: ProjectInfoManager
) =

static let userOpName = "BreakpointResolution"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ open Microsoft.VisualStudio.FSharp.LanguageService

[<Shared>]
[<ExportLanguageService(typeof<ILanguageDebugInfoService>, FSharpConstants.FSharpLanguageName)>]
type internal FSharpLanguageDebugInfoService [<ImportingConstructor>](projectInfoManager: FSharpProjectOptionsManager) =
type internal FSharpLanguageDebugInfoService [<ImportingConstructor>](projectInfoManager: ProjectInfoManager) =

static member GetDataTipInformation(sourceText: SourceText, position: int, tokens: List<ClassifiedSpan>): TextSpan option =
let tokenIndex = tokens |> Seq.tryFindIndex(fun t -> t.TextSpan.Contains(position))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ type internal FSharpDocumentDiagnosticAnalyzer() =
document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().Checker

let getProjectInfoManager(document: Document) =
document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().FSharpProjectOptionsManager
document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().ProjectInfoManager

static let errorInfoEqualityComparer =
{ new IEqualityComparer<FSharpErrorInfo> with
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ type internal SimplifyNameDiagnosticAnalyzer() =
inherit DocumentDiagnosticAnalyzer()

static let userOpName = "SimplifyNameDiagnosticAnalyzer"
let getProjectInfoManager (document: Document) = document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().FSharpProjectOptionsManager
let getProjectInfoManager (document: Document) = document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().ProjectInfoManager
let getChecker (document: Document) = document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().Checker
let getPlidLength (plid: string list) = (plid |> List.sumBy String.length) + plid.Length
static let cache = ConditionalWeakTable<DocumentId, TextVersionHash * ImmutableArray<Diagnostic>>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ type internal UnusedDeclarationsAnalyzer() =
inherit DocumentDiagnosticAnalyzer()

static let userOpName = "UnusedDeclarationsAnalyzer"
let getProjectInfoManager (document: Document) = document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().FSharpProjectOptionsManager
let getProjectInfoManager (document: Document) = document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().ProjectInfoManager
let getChecker (document: Document) = document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().Checker
let [<Literal>] DescriptorId = "FS1182"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ module private UnusedOpens =
type internal UnusedOpensDiagnosticAnalyzer() =
inherit DocumentDiagnosticAnalyzer()

let getProjectInfoManager (document: Document) = document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().FSharpProjectOptionsManager
let getProjectInfoManager (document: Document) = document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().ProjectInfoManager
let getChecker (document: Document) = document.Project.Solution.Workspace.Services.GetService<FSharpCheckerWorkspaceService>().Checker

static let userOpName = "UnusedOpensAnalyzer"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ type internal FSharpHighlightSpan =

[<Shared>]
[<ExportLanguageService(typeof<IDocumentHighlightsService>, FSharpConstants.FSharpLanguageName)>]
type internal FSharpDocumentHighlightsService [<ImportingConstructor>] (checkerProvider: FSharpCheckerProvider, projectInfoManager: FSharpProjectOptionsManager) =
type internal FSharpDocumentHighlightsService [<ImportingConstructor>] (checkerProvider: FSharpCheckerProvider, projectInfoManager: ProjectInfoManager) =

static let userOpName = "DocumentHighlights"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type internal FSharpBraceMatchingService
[<ImportingConstructor>]
(
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager
projectInfoManager: ProjectInfoManager
) =


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ type internal FSharpEditorFormattingService
[<ImportingConstructor>]
(
checkerProvider: FSharpCheckerProvider,
projectInfoManager: FSharpProjectOptionsManager
projectInfoManager: ProjectInfoManager
) =

static member GetFormattingChanges(documentId: DocumentId, sourceText: SourceText, filePath: string, checker: FSharpChecker, indentStyle: FormattingOptions.IndentStyle, projectOptions: FSharpProjectOptions option, position: int) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ open Microsoft.FSharp.Compiler.SourceCodeServices
[<ExportLanguageService(typeof<ISynchronousIndentationService>, FSharpConstants.FSharpLanguageName)>]
type internal FSharpIndentationService
[<ImportingConstructor>]
(projectInfoManager: FSharpProjectOptionsManager) =
(projectInfoManager: ProjectInfoManager) =

static member IsSmartIndentEnabled (options: Microsoft.CodeAnalysis.Options.OptionSet) =
options.GetOption(FormattingOptions.SmartIndent, FSharpConstants.FSharpLanguageName) = FormattingOptions.IndentStyle.Smart
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ type internal InlineRenameLocationSet(locationsByDocument: DocumentLocations [],
type internal InlineRenameInfo
(
checker: FSharpChecker,
projectInfoManager: FSharpProjectOptionsManager,
projectInfoManager: ProjectInfoManager,
document: Document,
triggerSpan: TextSpan,
lexerSymbol: LexerSymbol,
Expand Down Expand Up @@ -141,13 +141,13 @@ type internal InlineRenameInfo
type internal InlineRenameService
[<ImportingConstructor>]
(
projectInfoManager: FSharpProjectOptionsManager,
projectInfoManager: ProjectInfoManager,
checkerProvider: FSharpCheckerProvider,
[<ImportMany>] _refactorNotifyServices: seq<IRefactorNotifyService>
) =

static let userOpName = "InlineRename"
static member GetInlineRenameInfo(checker: FSharpChecker, projectInfoManager: FSharpProjectOptionsManager, document: Document, sourceText: SourceText, position: int,
static member GetInlineRenameInfo(checker: FSharpChecker, projectInfoManager: ProjectInfoManager, document: Document, sourceText: SourceText, position: int,
defines: string list, options: FSharpProjectOptions) : Async<IInlineRenameInfo option> =
asyncMaybe {
let textLine = sourceText.Lines.GetLineFromPosition(position)
Expand Down
Loading