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
|
namespace Microsoft.CodeAnalysis.Razor.Editor
|
||||||
{
|
{
|
||||||
internal class DefaultEditorSettingsManager : EditorSettingsManager
|
internal class DefaultEditorSettingsManagerInternal : EditorSettingsManagerInternal
|
||||||
{
|
{
|
||||||
public override event EventHandler<EditorSettingsChangedEventArgs> Changed;
|
public override event EventHandler<EditorSettingsChangedEventArgs> Changed;
|
||||||
|
|
||||||
private readonly object SettingsAccessorLock = new object();
|
private readonly object SettingsAccessorLock = new object();
|
||||||
private EditorSettings _settings;
|
private EditorSettings _settings;
|
||||||
|
|
||||||
public DefaultEditorSettingsManager()
|
public DefaultEditorSettingsManagerInternal()
|
||||||
{
|
{
|
||||||
_settings = EditorSettings.Default;
|
_settings = EditorSettings.Default;
|
||||||
}
|
}
|
||||||
|
|
@ -9,8 +9,8 @@ using Microsoft.CodeAnalysis.Host.Mef;
|
||||||
namespace Microsoft.CodeAnalysis.Razor.Editor
|
namespace Microsoft.CodeAnalysis.Razor.Editor
|
||||||
{
|
{
|
||||||
[Shared]
|
[Shared]
|
||||||
[ExportLanguageServiceFactory(typeof(EditorSettingsManager), RazorLanguage.Name)]
|
[ExportLanguageServiceFactory(typeof(EditorSettingsManagerInternal), RazorLanguage.Name)]
|
||||||
internal class DefaultEditorSettingsManagerFactory : ILanguageServiceFactory
|
internal class DefaultEditorSettingsManagerInternalFactory : ILanguageServiceFactory
|
||||||
{
|
{
|
||||||
public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
|
public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
|
||||||
{
|
{
|
||||||
|
|
@ -19,7 +19,7 @@ namespace Microsoft.CodeAnalysis.Razor.Editor
|
||||||
throw new ArgumentNullException(nameof(languageServices));
|
throw new ArgumentNullException(nameof(languageServices));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new DefaultEditorSettingsManager();
|
return new DefaultEditorSettingsManagerInternal();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -6,7 +6,7 @@ using Microsoft.CodeAnalysis.Host;
|
||||||
|
|
||||||
namespace Microsoft.CodeAnalysis.Razor.Editor
|
namespace Microsoft.CodeAnalysis.Razor.Editor
|
||||||
{
|
{
|
||||||
public abstract class EditorSettingsManager : ILanguageService
|
internal abstract class EditorSettingsManagerInternal : ILanguageService
|
||||||
{
|
{
|
||||||
public abstract event EventHandler<EditorSettingsChangedEventArgs> Changed;
|
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 string _filePath;
|
||||||
private readonly ProjectSnapshotManager _projectManager;
|
private readonly ProjectSnapshotManager _projectManager;
|
||||||
private readonly EditorSettingsManager _editorSettingsManager;
|
private readonly EditorSettingsManagerInternal _editorSettingsManager;
|
||||||
private readonly TextBufferProjectService _projectService;
|
private readonly TextBufferProjectService _projectService;
|
||||||
private readonly ITextBuffer _textBuffer;
|
private readonly ITextBuffer _textBuffer;
|
||||||
private readonly List<ITextView> _textViews;
|
private readonly List<ITextView> _textViews;
|
||||||
|
|
@ -33,7 +33,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
||||||
string filePath,
|
string filePath,
|
||||||
ProjectSnapshotManager projectManager,
|
ProjectSnapshotManager projectManager,
|
||||||
TextBufferProjectService projectService,
|
TextBufferProjectService projectService,
|
||||||
EditorSettingsManager editorSettingsManager,
|
EditorSettingsManagerInternal editorSettingsManager,
|
||||||
Workspace workspace,
|
Workspace workspace,
|
||||||
ITextBuffer textBuffer)
|
ITextBuffer textBuffer)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
||||||
private readonly Workspace _workspace;
|
private readonly Workspace _workspace;
|
||||||
private readonly ForegroundDispatcher _foregroundDispatcher;
|
private readonly ForegroundDispatcher _foregroundDispatcher;
|
||||||
private readonly ProjectSnapshotManager _projectManager;
|
private readonly ProjectSnapshotManager _projectManager;
|
||||||
private readonly EditorSettingsManager _editorSettingsManager;
|
private readonly EditorSettingsManagerInternal _editorSettingsManager;
|
||||||
|
|
||||||
[ImportingConstructor]
|
[ImportingConstructor]
|
||||||
public DefaultVisualStudioDocumentTrackerFactory(
|
public DefaultVisualStudioDocumentTrackerFactory(
|
||||||
|
|
@ -52,7 +52,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
||||||
_foregroundDispatcher = workspace.Services.GetRequiredService<ForegroundDispatcher>();
|
_foregroundDispatcher = workspace.Services.GetRequiredService<ForegroundDispatcher>();
|
||||||
var razorLanguageServices = workspace.Services.GetLanguageServices(RazorLanguage.Name);
|
var razorLanguageServices = workspace.Services.GetLanguageServices(RazorLanguage.Name);
|
||||||
_projectManager = razorLanguageServices.GetRequiredService<ProjectSnapshotManager>();
|
_projectManager = razorLanguageServices.GetRequiredService<ProjectSnapshotManager>();
|
||||||
_editorSettingsManager = razorLanguageServices.GetRequiredService<EditorSettingsManager>();
|
_editorSettingsManager = razorLanguageServices.GetRequiredService<EditorSettingsManagerInternal>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override VisualStudioDocumentTracker Create(ITextBuffer textBuffer)
|
public override VisualStudioDocumentTracker Create(ITextBuffer textBuffer)
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,13 @@ using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.CodeAnalysis.Razor.Editor
|
namespace Microsoft.CodeAnalysis.Razor.Editor
|
||||||
{
|
{
|
||||||
public class DefaultEditorSettingsManagerTest
|
public class DefaultEditorSettingsManagerInternalTest
|
||||||
{
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
public void InitialSettingsAreDefault()
|
public void InitialSettingsAreDefault()
|
||||||
{
|
{
|
||||||
// Act
|
// Act
|
||||||
var manager = new DefaultEditorSettingsManager();
|
var manager = new DefaultEditorSettingsManagerInternal();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(EditorSettings.Default, manager.Current);
|
Assert.Equal(EditorSettings.Default, manager.Current);
|
||||||
|
|
@ -21,7 +21,7 @@ namespace Microsoft.CodeAnalysis.Razor.Editor
|
||||||
public void Update_TriggersChangedIfEditorSettingsAreDifferent()
|
public void Update_TriggersChangedIfEditorSettingsAreDifferent()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var manager = new DefaultEditorSettingsManager();
|
var manager = new DefaultEditorSettingsManagerInternal();
|
||||||
var called = false;
|
var called = false;
|
||||||
manager.Changed += (caller, args) =>
|
manager.Changed += (caller, args) =>
|
||||||
{
|
{
|
||||||
|
|
@ -41,7 +41,7 @@ namespace Microsoft.CodeAnalysis.Razor.Editor
|
||||||
public void Update_DoesNotTriggerChangedIfEditorSettingsAreSame()
|
public void Update_DoesNotTriggerChangedIfEditorSettingsAreSame()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var manager = new DefaultEditorSettingsManager();
|
var manager = new DefaultEditorSettingsManagerInternal();
|
||||||
var called = false;
|
var called = false;
|
||||||
manager.Changed += (caller, args) =>
|
manager.Changed += (caller, args) =>
|
||||||
{
|
{
|
||||||
|
|
@ -30,7 +30,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
||||||
s.IsSupportedProject(It.IsAny<IVsHierarchy>()) == true &&
|
s.IsSupportedProject(It.IsAny<IVsHierarchy>()) == true &&
|
||||||
s.GetProjectPath(It.IsAny<IVsHierarchy>()) == "C:/Some/Path/TestProject.csproj");
|
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();
|
private Workspace Workspace => new AdhocWorkspace();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
||||||
s.IsSupportedProject(It.IsAny<IVsHierarchy>()) == true &&
|
s.IsSupportedProject(It.IsAny<IVsHierarchy>()) == true &&
|
||||||
s.GetProjectPath(It.IsAny<IVsHierarchy>()) == "C:/Some/Path/TestProject.csproj");
|
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();
|
private Workspace Workspace { get; } = new AdhocWorkspace();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue