public override bool TryCreateFor(ITextBuffer hostDocumentBuffer, out VirtualDocument virtualDocument) { if (hostDocumentBuffer is null) { throw new ArgumentNullException(nameof(hostDocumentBuffer)); } if (!hostDocumentBuffer.ContentType.IsOfType(RazorLSPContentTypeDefinition.Name)) { // Another content type we don't care about. virtualDocument = null; return(false); } var hostDocumentUri = _fileUriProvider.GetOrCreate(hostDocumentBuffer); // Index.cshtml => Index.cshtml__virtual.html var virtualHtmlFilePath = hostDocumentUri.GetAbsoluteOrUNCPath() + VirtualHtmlFileNameSuffix; var virtualHtmlUri = new Uri(virtualHtmlFilePath); var htmlBuffer = _textBufferFactory.CreateTextBuffer(); _fileUriProvider.AddOrUpdate(htmlBuffer, virtualHtmlUri); htmlBuffer.Properties.AddProperty(ContainedLanguageMarker, true); // Create a text document to trigger the Html language server initialization. _textDocumentFactory.CreateTextDocument(htmlBuffer, virtualHtmlFilePath); htmlBuffer.ChangeContentType(HtmlLSPContentType, editTag: null); virtualDocument = new HtmlVirtualDocument(virtualHtmlUri, htmlBuffer); return(true); }
public override LSPDocument Create(ITextBuffer buffer) { if (buffer is null) { throw new ArgumentNullException(nameof(buffer)); } var uri = _fileUriProvider.GetOrCreate(buffer); var virtualDocuments = CreateVirtualDocuments(buffer); var lspDocument = new DefaultLSPDocument(uri, buffer, virtualDocuments); return(lspDocument); }
public override void TrackDocument(ITextBuffer buffer) { if (buffer is null) { throw new ArgumentNullException(nameof(buffer)); } Debug.Assert(_joinableTaskContext.IsOnMainThread); var uri = _fileUriProvider.GetOrCreate(buffer); if (_documents.TryGetValue(uri, out _)) { throw new InvalidOperationException($"Can not track document that's already being tracked {uri}"); } var lspDocument = _documentFactory.Create(buffer); _documents[uri] = lspDocument; var args = new LSPDocumentChangeEventArgs(old: null, lspDocument.CurrentSnapshot, LSPDocumentChangeKind.Added); Changed?.Invoke(this, args); }