public ProjectState WithRemovedHostDocument(HostDocument hostDocument) { if (hostDocument == null) { throw new ArgumentNullException(nameof(hostDocument)); } if (!Documents.ContainsKey(hostDocument.FilePath)) { return(this); } var documents = Documents.Remove(hostDocument.FilePath); // First check if the updated document is an import - it's important that this happens // before updating the imports map. if (ImportsToRelatedDocuments.TryGetValue(hostDocument.TargetPath, out var relatedDocuments)) { foreach (var relatedDocument in relatedDocuments) { documents = documents.SetItem(relatedDocument, documents[relatedDocument].WithImportsChange()); } } // Compute the effect on the import map var importTargetPaths = GetImportDocumentTargetPaths(hostDocument.TargetPath); var importsToRelatedDocuments = RemoveFromImportsToRelatedDocuments(ImportsToRelatedDocuments, hostDocument, importTargetPaths); var state = new ProjectState(this, ProjectDifference.DocumentRemoved, HostProject, ProjectWorkspaceState, documents, importsToRelatedDocuments); return(state); }
public ProjectState WithChangedHostDocument(HostDocument hostDocument, Func <Task <TextAndVersion> > loader) { if (hostDocument == null) { throw new ArgumentNullException(nameof(hostDocument)); } if (!Documents.TryGetValue(hostDocument.FilePath, out var document)) { return(this); } var documents = Documents.SetItem(hostDocument.FilePath, document.WithTextLoader(loader)); if (ImportsToRelatedDocuments.TryGetValue(hostDocument.TargetPath, out var relatedDocuments)) { foreach (var relatedDocument in relatedDocuments) { documents = documents.SetItem(relatedDocument, documents[relatedDocument].WithImportsChange()); } } var state = new ProjectState(this, ProjectDifference.DocumentChanged, HostProject, ProjectWorkspaceState, documents, ImportsToRelatedDocuments); return(state); }
public ProjectState WithChangedHostDocument(HostDocument hostDocument, SourceText sourceText, VersionStamp version) { if (hostDocument == null) { throw new ArgumentNullException(nameof(hostDocument)); } if (!Documents.TryGetValue(hostDocument.FilePath, out var document)) { return(this); } var documents = Documents.SetItem(hostDocument.FilePath, document.WithText(sourceText, version)); if (ImportsToRelatedDocuments.TryGetValue(hostDocument.TargetPath, out var relatedDocuments)) { foreach (var relatedDocument in relatedDocuments) { documents = documents.SetItem(relatedDocument, documents[relatedDocument].WithImportsChange()); } } var state = new ProjectState(this, ProjectDifference.DocumentChanged, HostProject, WorkspaceProject, documents, ImportsToRelatedDocuments); return(state); }