示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
 /// <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);