public DefaultRazorProjectChangePublisher( LSPEditorFeatureDetector lSPEditorFeatureDetector, ProjectConfigurationFilePathStore projectConfigurationFilePathStore, RazorLogger logger) { if (lSPEditorFeatureDetector is null) { throw new ArgumentNullException(nameof(lSPEditorFeatureDetector)); } if (projectConfigurationFilePathStore is null) { throw new ArgumentNullException(nameof(projectConfigurationFilePathStore)); } if (logger is null) { throw new ArgumentNullException(nameof(logger)); } _deferredPublishTasks = new Dictionary <string, Task>(FilePathComparer.Instance); _pendingProjectPublishes = new Dictionary <string, ProjectSnapshot>(FilePathComparer.Instance); _publishLock = new object(); _lspEditorFeatureDetector = lSPEditorFeatureDetector; _projectConfigurationFilePathStore = projectConfigurationFilePathStore; _logger = logger; _serializer.Converters.Add(TagHelperDescriptorJsonConverter.Instance); _serializer.Converters.Add(RazorConfigurationJsonConverter.Instance); _serializer.Converters.Add(CodeAnalysis.Razor.Workspaces.Serialization.ProjectSnapshotJsonConverter.Instance); }
protected override async Task OnProjectChangedAsync() { await ExecuteWithLockAsync(async() => { var referencedAssemblies = await DotNetProject.GetReferencedAssemblies(ConfigurationSelector.Default); var mvcReference = referencedAssemblies.FirstOrDefault(IsMvcAssembly); var projectProperties = DotNetProject.MSBuildProject.EvaluatedProperties; if (TryGetIntermediateOutputPath(projectProperties, out var intermediatePath)) { var projectConfigurationFile = Path.Combine(intermediatePath, _languageServerFeatureOptions.ProjectConfigurationFileName); ProjectConfigurationFilePathStore.Set(DotNetProject.FileName.FullPath, projectConfigurationFile); } if (mvcReference is null) { // Ok we can't find an MVC version. Let's assume this project isn't using Razor then. await UpdateHostProjectUnsafeAsync(null).ConfigureAwait(false); return; } var version = GetAssemblyVersion(mvcReference.FilePath); if (version is null) { // Ok we can't find an MVC version. Let's assume this project isn't using Razor then. await UpdateHostProjectUnsafeAsync(null).ConfigureAwait(false); return; } var configuration = FallbackRazorConfiguration.SelectConfiguration(version); var hostProject = new HostProject(DotNetProject.FileName.FullPath, configuration, rootNamespace: null); await UpdateHostProjectUnsafeAsync(hostProject).ConfigureAwait(false); }); }
public RazorLanguageServerClient( RazorLanguageServerCustomMessageTarget customTarget, RazorLanguageClientMiddleLayer middleLayer, LSPRequestInvoker requestInvoker, ProjectConfigurationFilePathStore projectConfigurationFilePathStore) { if (customTarget is null) { throw new ArgumentNullException(nameof(customTarget)); } if (middleLayer is null) { throw new ArgumentNullException(nameof(middleLayer)); } if (requestInvoker is null) { throw new ArgumentNullException(nameof(requestInvoker)); } if (projectConfigurationFilePathStore is null) { throw new ArgumentNullException(nameof(projectConfigurationFilePathStore)); } _customMessageTarget = customTarget; _middleLayer = middleLayer; _requestInvoker = requestInvoker; _projectConfigurationFilePathStore = projectConfigurationFilePathStore; _shutdownLock = new object(); }
protected override async Task OnProjectChangedAsync() { await ExecuteWithLockAsync(async() => { var projectProperties = DotNetProject.MSBuildProject.EvaluatedProperties; var projectItems = DotNetProject.MSBuildProject.EvaluatedItems; if (TryGetIntermediateOutputPath(projectProperties, out var intermediatePath)) { var projectConfigurationFile = Path.Combine(intermediatePath, _languageServerFeatureOptions.ProjectConfigurationFileName); ProjectConfigurationFilePathStore.Set(DotNetProject.FileName.FullPath, projectConfigurationFile); } if (TryGetConfiguration(projectProperties, projectItems, out var configuration)) { TryGetRootNamespace(projectProperties, out var rootNamespace); var hostProject = new HostProject(DotNetProject.FileName.FullPath, configuration, rootNamespace); await UpdateHostProjectUnsafeAsync(hostProject).ConfigureAwait(false); UpdateDocuments(hostProject, projectItems); } else { // Ok we can't find a configuration. Let's assume this project isn't using Razor then. await UpdateHostProjectUnsafeAsync(null).ConfigureAwait(false); } }); }
public TestDefaultRazorProjectChangePublisher( ProjectConfigurationFilePathStore projectStatePublishFilePathStore, RazorLogger logger, Action <ProjectSnapshot, string> onSerializeToFile = null) : base(_lspEditorFeatureDetector.Object, projectStatePublishFilePathStore, logger) { _onSerializeToFile = onSerializeToFile ?? ((_, __) => throw new XunitException("SerializeToFile should not have been called.")); }
public FallbackMacRazorProjectHost( DotNetProject project, ProjectSnapshotManagerDispatcher projectSnapshotManagerDispatcher, ProjectSnapshotManagerBase projectSnapshotManager, ProjectConfigurationFilePathStore projectConfigurationFilePathStore, VSLanguageServerFeatureOptions languageServerFeatureOptions) : base(project, projectSnapshotManagerDispatcher, projectSnapshotManager, projectConfigurationFilePathStore) { _languageServerFeatureOptions = languageServerFeatureOptions; }
public TestProjectRazorJsonPublisher( ProjectConfigurationFilePathStore projectStatePublishFilePathStore, Action <ProjectSnapshot, string> onSerializeToFile = null, bool shouldSerialize = true, bool useRealShouldSerialize = false) : base(s_lspEditorFeatureDetector.Object, projectStatePublishFilePathStore, TestRazorLogger.Instance) { _onSerializeToFile = onSerializeToFile ?? ((_1, _2) => throw new XunitException("SerializeToFile should not have been called.")); _shouldSerialize = shouldSerialize; _useRealShouldSerialize = useRealShouldSerialize; }
public TestDefaultRazorProjectChangePublisher( ProjectConfigurationFilePathStore projectStatePublishFilePathStore, RazorLogger logger, Action <ProjectSnapshot, string> onSerializeToFile = null, bool shouldSerialize = true, bool useRealShouldSerialize = false) : base(s_lspEditorFeatureDetector.Object, projectStatePublishFilePathStore, new TestServiceProvider(), logger) { _onSerializeToFile = onSerializeToFile ?? ((_1, _2) => throw new XunitException("SerializeToFile should not have been called.")); _shouldSerialize = shouldSerialize; _useRealShouldSerialize = useRealShouldSerialize; }
public RazorLanguageServerClient( RazorLanguageServerCustomMessageTarget customTarget, RazorLanguageClientMiddleLayer middleLayer, LSPRequestInvoker requestInvoker, ProjectConfigurationFilePathStore projectConfigurationFilePathStore, RazorLanguageServerLogHubLoggerProviderFactory logHubLoggerProviderFactory, VSLanguageServerFeatureOptions vsLanguageServerFeatureOptions, VSHostServicesProvider vsHostWorkspaceServicesProvider) { if (customTarget is null) { throw new ArgumentNullException(nameof(customTarget)); } if (middleLayer is null) { throw new ArgumentNullException(nameof(middleLayer)); } if (requestInvoker is null) { throw new ArgumentNullException(nameof(requestInvoker)); } if (projectConfigurationFilePathStore is null) { throw new ArgumentNullException(nameof(projectConfigurationFilePathStore)); } if (logHubLoggerProviderFactory is null) { throw new ArgumentNullException(nameof(logHubLoggerProviderFactory)); } if (vsLanguageServerFeatureOptions is null) { throw new ArgumentNullException(nameof(vsLanguageServerFeatureOptions)); } if (vsHostWorkspaceServicesProvider is null) { throw new ArgumentNullException(nameof(vsHostWorkspaceServicesProvider)); } _customMessageTarget = customTarget; _middleLayer = middleLayer; _requestInvoker = requestInvoker; _projectConfigurationFilePathStore = projectConfigurationFilePathStore; _logHubLoggerProviderFactory = logHubLoggerProviderFactory; _vsLanguageServerFeatureOptions = vsLanguageServerFeatureOptions; _vsHostWorkspaceServicesProvider = vsHostWorkspaceServicesProvider; _shutdownLock = new object(); }
public DefaultDotNetProjectHost( DotNetProject project, ProjectSnapshotManagerDispatcher projectSnapshotManagerDispatcher, VisualStudioMacWorkspaceAccessor workspaceAccessor, TextBufferProjectService projectService, ProjectConfigurationFilePathStore projectConfigurationFilePathStore, VSLanguageServerFeatureOptions languageServerFeatureOptions) { if (project is null) { throw new ArgumentNullException(nameof(project)); } if (projectSnapshotManagerDispatcher is null) { throw new ArgumentNullException(nameof(projectSnapshotManagerDispatcher)); } if (workspaceAccessor is null) { throw new ArgumentNullException(nameof(workspaceAccessor)); } if (projectService is null) { throw new ArgumentNullException(nameof(projectService)); } if (projectConfigurationFilePathStore is null) { throw new ArgumentNullException(nameof(projectConfigurationFilePathStore)); } if (languageServerFeatureOptions is null) { throw new ArgumentNullException(nameof(languageServerFeatureOptions)); } _project = project; _projectSnapshotManagerDispatcher = projectSnapshotManagerDispatcher; _workspaceAccessor = workspaceAccessor; _projectService = projectService; _projectConfigurationFilePathStore = projectConfigurationFilePathStore; _languageServerFeatureOptions = languageServerFeatureOptions; }
public MacRazorProjectHostBase( DotNetProject project, ProjectSnapshotManagerDispatcher projectSnapshotManagerDispatcher, ProjectSnapshotManagerBase projectSnapshotManager, ProjectConfigurationFilePathStore projectConfigurationFilePathStore) { if (project is null) { throw new ArgumentNullException(nameof(project)); } if (projectSnapshotManagerDispatcher is null) { throw new ArgumentNullException(nameof(projectSnapshotManagerDispatcher)); } if (projectSnapshotManager is null) { throw new ArgumentNullException(nameof(projectSnapshotManager)); } if (projectConfigurationFilePathStore is null) { throw new ArgumentNullException(nameof(projectConfigurationFilePathStore)); } DotNetProject = project; ProjectSnapshotManagerDispatcher = projectSnapshotManagerDispatcher; _projectSnapshotManager = projectSnapshotManager; ProjectConfigurationFilePathStore = projectConfigurationFilePathStore; _onProjectChangedInnerSemaphore = new AsyncSemaphore(initialCount: 1); _projectChangedSemaphore = new AsyncSemaphore(initialCount: 1); _currentDocuments = new Dictionary <string, HostDocument>(FilePathComparer.Instance); AttachToProject(); }