Add EditorSettingsManager as an exported MEF component.
- Internalized the core implementation of `EditorSettingsManagerInternal`. - Added a `VisualStudioWorkspaceAccessor` to enable the `Microsoft.VisualStudio.Editor.Razor` project to have access to the current workspace. Only added the Windows specific implementation of this type since the VS for mac implementation will require infrastructural work to make happen. #1762
This commit is contained in:
parent
82247fbb09
commit
44a47182b2
|
|
@ -5,14 +5,14 @@ using System;
|
|||
|
||||
namespace Microsoft.CodeAnalysis.Razor.Editor
|
||||
{
|
||||
internal class DefaultEditorSettingsManager : EditorSettingsManager
|
||||
internal class DefaultEditorSettingsManagerInternal : EditorSettingsManagerInternal
|
||||
{
|
||||
public override event EventHandler<EditorSettingsChangedEventArgs> Changed;
|
||||
|
||||
private readonly object SettingsAccessorLock = new object();
|
||||
private EditorSettings _settings;
|
||||
|
||||
public DefaultEditorSettingsManager()
|
||||
public DefaultEditorSettingsManagerInternal()
|
||||
{
|
||||
_settings = EditorSettings.Default;
|
||||
}
|
||||
|
|
@ -9,8 +9,8 @@ using Microsoft.CodeAnalysis.Host.Mef;
|
|||
namespace Microsoft.CodeAnalysis.Razor.Editor
|
||||
{
|
||||
[Shared]
|
||||
[ExportLanguageServiceFactory(typeof(EditorSettingsManager), RazorLanguage.Name)]
|
||||
internal class DefaultEditorSettingsManagerFactory : ILanguageServiceFactory
|
||||
[ExportLanguageServiceFactory(typeof(EditorSettingsManagerInternal), RazorLanguage.Name)]
|
||||
internal class DefaultEditorSettingsManagerInternalFactory : ILanguageServiceFactory
|
||||
{
|
||||
public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
|
||||
{
|
||||
|
|
@ -19,7 +19,7 @@ namespace Microsoft.CodeAnalysis.Razor.Editor
|
|||
throw new ArgumentNullException(nameof(languageServices));
|
||||
}
|
||||
|
||||
return new DefaultEditorSettingsManager();
|
||||
return new DefaultEditorSettingsManagerInternal();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@ using Microsoft.CodeAnalysis.Host;
|
|||
|
||||
namespace Microsoft.CodeAnalysis.Razor.Editor
|
||||
{
|
||||
public abstract class EditorSettingsManager : ILanguageService
|
||||
internal abstract class EditorSettingsManagerInternal : ILanguageService
|
||||
{
|
||||
public abstract event EventHandler<EditorSettingsChangedEventArgs> Changed;
|
||||
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.ComponentModel.Composition;
|
||||
using Microsoft.CodeAnalysis.Razor;
|
||||
using Microsoft.CodeAnalysis.Razor.Editor;
|
||||
|
||||
namespace Microsoft.VisualStudio.Editor.Razor
|
||||
{
|
||||
[System.Composition.Shared]
|
||||
[Export(typeof(EditorSettingsManager))]
|
||||
internal class DefaultEditorSettingsManager : EditorSettingsManager
|
||||
{
|
||||
private readonly EditorSettingsManagerInternal _editorSettingsManager;
|
||||
|
||||
[ImportingConstructor]
|
||||
public DefaultEditorSettingsManager(VisualStudioWorkspaceAccessor workspaceAccessor)
|
||||
{
|
||||
var razorLanguageServices = workspaceAccessor.Workspace.Services.GetLanguageServices(RazorLanguage.Name);
|
||||
_editorSettingsManager = razorLanguageServices.GetRequiredService<EditorSettingsManagerInternal>();
|
||||
}
|
||||
|
||||
public override event EventHandler<EditorSettingsChangedEventArgs> Changed
|
||||
{
|
||||
add => _editorSettingsManager.Changed += value;
|
||||
remove => _editorSettingsManager.Changed -= value;
|
||||
}
|
||||
|
||||
public override EditorSettings Current => _editorSettingsManager.Current;
|
||||
|
||||
public override void Update(EditorSettings updateSettings)
|
||||
{
|
||||
_editorSettingsManager.Update(updateSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.CodeAnalysis.Razor.Editor;
|
||||
|
||||
namespace Microsoft.VisualStudio.Editor.Razor
|
||||
{
|
||||
public abstract class EditorSettingsManager
|
||||
{
|
||||
public abstract event EventHandler<EditorSettingsChangedEventArgs> Changed;
|
||||
|
||||
public abstract EditorSettings Current { get; }
|
||||
|
||||
public abstract void Update(EditorSettings updateSettings);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using Microsoft.CodeAnalysis;
|
||||
|
||||
namespace Microsoft.VisualStudio.Editor.Razor
|
||||
{
|
||||
internal abstract class VisualStudioWorkspaceAccessor
|
||||
{
|
||||
public abstract Workspace Workspace { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.ComponentModel.Composition;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.VisualStudio.Editor.Razor;
|
||||
|
||||
namespace Microsoft.VisualStudio.LanguageServices.Razor
|
||||
{
|
||||
[System.Composition.Shared]
|
||||
[Export(typeof(VisualStudioWorkspaceAccessor))]
|
||||
internal class DefaultVisualStudioWorkspaceAccessor : VisualStudioWorkspaceAccessor
|
||||
{
|
||||
[ImportingConstructor]
|
||||
public DefaultVisualStudioWorkspaceAccessor([Import(typeof(VisualStudioWorkspace))] Workspace workspace)
|
||||
{
|
||||
Workspace = workspace;
|
||||
}
|
||||
|
||||
public override Workspace Workspace { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -18,7 +18,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
|||
{
|
||||
private readonly string _filePath;
|
||||
private readonly ProjectSnapshotManager _projectManager;
|
||||
private readonly EditorSettingsManager _editorSettingsManager;
|
||||
private readonly EditorSettingsManagerInternal _editorSettingsManager;
|
||||
private readonly TextBufferProjectService _projectService;
|
||||
private readonly ITextBuffer _textBuffer;
|
||||
private readonly List<ITextView> _textViews;
|
||||
|
|
@ -33,7 +33,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
|||
string filePath,
|
||||
ProjectSnapshotManager projectManager,
|
||||
TextBufferProjectService projectService,
|
||||
EditorSettingsManager editorSettingsManager,
|
||||
EditorSettingsManagerInternal editorSettingsManager,
|
||||
Workspace workspace,
|
||||
ITextBuffer textBuffer)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
|||
private readonly Workspace _workspace;
|
||||
private readonly ForegroundDispatcher _foregroundDispatcher;
|
||||
private readonly ProjectSnapshotManager _projectManager;
|
||||
private readonly EditorSettingsManager _editorSettingsManager;
|
||||
private readonly EditorSettingsManagerInternal _editorSettingsManager;
|
||||
|
||||
[ImportingConstructor]
|
||||
public DefaultVisualStudioDocumentTrackerFactory(
|
||||
|
|
@ -52,7 +52,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
|||
_foregroundDispatcher = workspace.Services.GetRequiredService<ForegroundDispatcher>();
|
||||
var razorLanguageServices = workspace.Services.GetLanguageServices(RazorLanguage.Name);
|
||||
_projectManager = razorLanguageServices.GetRequiredService<ProjectSnapshotManager>();
|
||||
_editorSettingsManager = razorLanguageServices.GetRequiredService<EditorSettingsManager>();
|
||||
_editorSettingsManager = razorLanguageServices.GetRequiredService<EditorSettingsManagerInternal>();
|
||||
}
|
||||
|
||||
public override VisualStudioDocumentTracker Create(ITextBuffer textBuffer)
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@ using Xunit;
|
|||
|
||||
namespace Microsoft.CodeAnalysis.Razor.Editor
|
||||
{
|
||||
public class DefaultEditorSettingsManagerTest
|
||||
public class DefaultEditorSettingsManagerInternalTest
|
||||
{
|
||||
[Fact]
|
||||
public void InitialSettingsAreDefault()
|
||||
{
|
||||
// Act
|
||||
var manager = new DefaultEditorSettingsManager();
|
||||
var manager = new DefaultEditorSettingsManagerInternal();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(EditorSettings.Default, manager.Current);
|
||||
|
|
@ -21,7 +21,7 @@ namespace Microsoft.CodeAnalysis.Razor.Editor
|
|||
public void Update_TriggersChangedIfEditorSettingsAreDifferent()
|
||||
{
|
||||
// Arrange
|
||||
var manager = new DefaultEditorSettingsManager();
|
||||
var manager = new DefaultEditorSettingsManagerInternal();
|
||||
var called = false;
|
||||
manager.Changed += (caller, args) =>
|
||||
{
|
||||
|
|
@ -41,7 +41,7 @@ namespace Microsoft.CodeAnalysis.Razor.Editor
|
|||
public void Update_DoesNotTriggerChangedIfEditorSettingsAreSame()
|
||||
{
|
||||
// Arrange
|
||||
var manager = new DefaultEditorSettingsManager();
|
||||
var manager = new DefaultEditorSettingsManagerInternal();
|
||||
var called = false;
|
||||
manager.Changed += (caller, args) =>
|
||||
{
|
||||
|
|
@ -30,7 +30,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
|||
s.IsSupportedProject(It.IsAny<IVsHierarchy>()) == true &&
|
||||
s.GetProjectPath(It.IsAny<IVsHierarchy>()) == "C:/Some/Path/TestProject.csproj");
|
||||
|
||||
private EditorSettingsManager EditorSettingsManager => new DefaultEditorSettingsManager();
|
||||
private EditorSettingsManagerInternal EditorSettingsManager => new DefaultEditorSettingsManagerInternal();
|
||||
|
||||
private Workspace Workspace => new AdhocWorkspace();
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
|||
s.IsSupportedProject(It.IsAny<IVsHierarchy>()) == true &&
|
||||
s.GetProjectPath(It.IsAny<IVsHierarchy>()) == "C:/Some/Path/TestProject.csproj");
|
||||
|
||||
private EditorSettingsManager EditorSettingsManager => new DefaultEditorSettingsManager();
|
||||
private EditorSettingsManagerInternal EditorSettingsManager => new DefaultEditorSettingsManagerInternal();
|
||||
|
||||
private Workspace Workspace { get; } = new AdhocWorkspace();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue