File: Client\Razor\CSharpLspContainedLanguageProvider.cs
Web Access
Project: src\src\VisualStudio\LiveShare\Impl\Microsoft.VisualStudio.LanguageServices.LiveShare.csproj (Microsoft.VisualStudio.LanguageServices.LiveShare)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
using System.ComponentModel.Composition;
using Microsoft.CodeAnalysis.Editor;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.VisualStudio.ComponentModelHost;
using Microsoft.VisualStudio.LanguageServices.Implementation.Venus;
using Microsoft.VisualStudio.LiveShare.WebEditors.ContainedLanguage;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.TextManager.Interop;
using Microsoft.VisualStudio.Utilities;
 
namespace Microsoft.VisualStudio.LanguageServices.LiveShare.Client.Razor;
 
[Export(typeof(IContainedLanguageProvider))]
internal sealed class CSharpLspContainedLanguageProvider : IContainedLanguageProvider
{
    private readonly IContentTypeRegistryService _contentTypeRegistry;
    private readonly SVsServiceProvider _serviceProvider;
    private readonly CSharpLspRazorProjectFactory _razorProjectFactory;
 
    [ImportingConstructor]
    [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)]
    public CSharpLspContainedLanguageProvider(IContentTypeRegistryService contentTypeRegistry,
        SVsServiceProvider serviceProvider,
        CSharpLspRazorProjectFactory razorProjectFactory)
    {
        _contentTypeRegistry = contentTypeRegistry ?? throw new ArgumentNullException(nameof(contentTypeRegistry));
        _serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider));
        _razorProjectFactory = razorProjectFactory ?? throw new ArgumentNullException(nameof(razorProjectFactory));
    }
 
    public IContentType GetContentType(string filePath)
        => _contentTypeRegistry.GetContentType(ContentTypeNames.CSharpContentType);
 
    public IVsContainedLanguage GetLanguage(string filePath, IVsTextBufferCoordinator bufferCoordinator)
    {
        var componentModel = (IComponentModel)_serviceProvider.GetService(typeof(SComponentModel));
        var projectId = _razorProjectFactory.GetProject(filePath);
 
        return new ContainedLanguage(
            bufferCoordinator,
            componentModel,
            _razorProjectFactory.Workspace,
            projectId,
            project: null,
            Guids.CSharpLanguageServiceId);
    }
}