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 bool TryCreateFor(ITextBuffer hostDocumentBuffer, out VirtualDocument virtualDocument) { if (hostDocumentBuffer is null) { throw new ArgumentNullException(nameof(hostDocumentBuffer)); } if (!hostDocumentBuffer.ContentType.IsOfType(RazorLSPConstants.RazorLSPContentTypeName)) { // Another content type we don't care about. virtualDocument = null; return(false); } var hostDocumentUri = _fileUriProvider.GetOrCreate(hostDocumentBuffer); // Index.cshtml => Index.cshtml__virtual.cs var virtualCSharpFilePath = hostDocumentUri.GetAbsoluteOrUNCPath() + RazorLSPConstants.VirtualCSharpFileNameSuffix; var virtualCSharpUri = new Uri(virtualCSharpFilePath); var csharpBuffer = _textBufferFactory.CreateTextBuffer(); _fileUriProvider.AddOrUpdate(csharpBuffer, virtualCSharpUri); csharpBuffer.Properties.AddProperty(RazorLSPConstants.ContainedLanguageMarker, true); csharpBuffer.Properties.AddProperty(LanguageClientConstants.ClientNamePropertyKey, "RazorCSharp"); // Create a text document to trigger the C# language server initialization. _textDocumentFactory.CreateTextDocument(csharpBuffer, virtualCSharpFilePath); csharpBuffer.ChangeContentType(CSharpLSPContentType, editTag: null); virtualDocument = new CSharpVirtualDocument(virtualCSharpUri, csharpBuffer); return(true); }
/// <summary> /// Attempts to create a <see cref="VirtualDocument"/> for the provided <paramref name="hostDocumentBuffer"/>. /// </summary> /// <param name="hostDocumentBuffer">The top-level LSP document buffer.</param> /// <param name="virtualDocument">The resultant <see cref="VirtualDocument"/> for the top-level <paramref name="hostDocumentBuffer"/>.</param> /// <returns><c>true</c> if a <see cref="VirtualDocument"/> could be created, <c>false</c> otherwise. A result of <c>false</c> typically indicates /// that a <see cref="VirtualDocumentFactory"/> was not meant to be called for the given <paramref name="hostDocumentBuffer"/>.</returns> public abstract bool TryCreateFor(ITextBuffer hostDocumentBuffer, out VirtualDocument virtualDocument);