Skip to content

Commit

Permalink
Moved the R# calls into a R# specific interface. Trying to abstract
Browse files Browse the repository at this point in the history
away all of the R# support into silent modules.  Step 1 is getting it
into it's own type
  • Loading branch information
jaredpar committed Mar 30, 2012
1 parent 33c16ec commit 621f2d7
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 52 deletions.
1 change: 1 addition & 0 deletions VimCore/CoreInterfaces.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2197,6 +2197,7 @@ type InsertCommand =
| InsertNewLine -> EditUtil.NewLine editorOptions |> Some
| InsertTab -> Some "\t"
| MoveCaret _ -> None
| MoveCaretByWord _ -> None
| ShiftLineLeft -> None
| ShiftLineRight -> None
| ExtraTextChange textChange -> textChange.InsertText
Expand Down
21 changes: 9 additions & 12 deletions VsVimShared/ExternalEdit/ExternalEditorManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@

namespace VsVim.ExternalEdit
{
[Export(typeof(IExternalEditorManager))]
[Export(typeof(IResharperUtil))]
[Export(typeof(IVimBufferCreationListener))]
internal sealed class ExternalEditorManager : IExternalEditorManager, IVimBufferCreationListener
internal sealed class ExternalEditorManager : IResharperUtil, IVimBufferCreationListener
{
private static readonly Guid Resharper5Guid = new Guid("0C6E6407-13FC-4878-869A-C8B4016C57FE");
private static readonly string ResharperTaggerName = "VsDocumentMarkupTaggerProvider";
Expand All @@ -32,14 +32,6 @@ internal sealed class ExternalEditorManager : IExternalEditorManager, IVimBuffer
[ImportMany(typeof(ITaggerProvider))]
internal List<Lazy<ITaggerProvider>> TaggerProviders { get; set; }

/// <summary>
/// Is R# installed
/// </summary>
public bool IsResharperInstalled
{
get { return _isResharperInstalled; }
}

[ImportingConstructor]
internal ExternalEditorManager(SVsServiceProvider serviceProvider, IVsAdapter vsAdapter, IProtectedOperations protectedOperations)
{
Expand All @@ -57,7 +49,7 @@ internal ExternalEditorManager(SVsServiceProvider serviceProvider, IVsAdapter vs
public void VimBufferCreated(IVimBuffer buffer)
{
Result<ITagger<ITag>> tagger = Result.Error;
if (IsResharperInstalled)
if (_isResharperInstalled)
{
tagger = GetResharperTagger(buffer.TextBuffer);
}
Expand All @@ -76,7 +68,7 @@ public void VimBufferCreated(IVimBuffer buffer)
/// </summary>
private Result<ITagger<ITag>> GetResharperTagger(ITextBuffer textBuffer)
{
Contract.Assert(IsResharperInstalled);
Contract.Assert(_isResharperInstalled);

// This is available as a post construction MEF import so it's very possible
// that this is null if it's not initialized
Expand Down Expand Up @@ -114,5 +106,10 @@ private bool CheckResharperInstalled()
{
return _vsShell.IsPackageInstalled(Resharper5Guid);
}

bool IResharperUtil.IsInstalled
{
get { return _isResharperInstalled; }
}
}
}
8 changes: 4 additions & 4 deletions VsVimShared/HostFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ private sealed class BufferData
private readonly ITextBufferFactoryService _bufferFactoryService;
private readonly ITextEditorFactoryService _editorFactoryService;
private readonly IEditorOptionsFactoryService _editorOptionsFactoryService;
private readonly IExternalEditorManager _externalEditorManager;
private readonly IResharperUtil _resharperUtil;
private readonly IDisplayWindowBrokerFactoryService _displayWindowBrokerFactoryServcie;
private readonly IVim _vim;
private readonly IVsEditorAdaptersFactoryService _adaptersFactory;
Expand All @@ -57,7 +57,7 @@ public HostFactory(
IKeyBindingService keyBindingService,
SVsServiceProvider serviceProvider,
IVsEditorAdaptersFactoryService adaptersFactory,
IExternalEditorManager externalEditorManager,
IResharperUtil resharperUtil,
IDisplayWindowBrokerFactoryService displayWindowBrokerFactoryService,
IVsAdapter adapter,
IProtectedOperations protectedOperations,
Expand All @@ -68,7 +68,7 @@ public HostFactory(
_bufferFactoryService = bufferFactoryService;
_editorFactoryService = editorFactoryService;
_editorOptionsFactoryService = editorOptionsFactoryService;
_externalEditorManager = externalEditorManager;
_resharperUtil = resharperUtil;
_displayWindowBrokerFactoryServcie = displayWindowBrokerFactoryService;
_adaptersFactory = adaptersFactory;
_adapter = adapter;
Expand Down Expand Up @@ -176,7 +176,7 @@ void IVsTextViewCreationListener.VsTextViewCreated(IVsTextView vsView)

var broker = _displayWindowBrokerFactoryServcie.CreateDisplayWindowBroker(textView);
var bufferCoordinator = _bufferCoordinatorFactory.GetVimBufferCoordinator(buffer);
var result = VsCommandTarget.Create(bufferCoordinator, vsView, _adapter, broker, _externalEditorManager);
var result = VsCommandTarget.Create(bufferCoordinator, vsView, _adapter, broker, _resharperUtil);
if (result.IsSuccess)
{
// Store the value for debugging
Expand Down
11 changes: 0 additions & 11 deletions VsVimShared/IExternalEditorManager.cs

This file was deleted.

14 changes: 14 additions & 0 deletions VsVimShared/IResharperUtil.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

namespace VsVim
{
/// <summary>
/// Interface for getting information about the R# install.
///
/// TODO: Ideally this should exist at all. It would be great if R# could be
/// done purely as a silenty MEF plugin
/// </summary>
internal interface IResharperUtil
{
bool IsInstalled { get; }
}
}
16 changes: 8 additions & 8 deletions VsVimShared/VsCommandTarget.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,22 +50,22 @@ private enum CommandStatus
private readonly ITextBuffer _textBuffer;
private readonly IVsAdapter _vsAdapter;
private readonly IDisplayWindowBroker _broker;
private readonly IExternalEditorManager _externalEditManager;
private readonly IResharperUtil _resharperUtil;
private IOleCommandTarget _nextTarget;

private VsCommandTarget(
IVimBufferCoordinator bufferCoordinator,
IVsAdapter vsAdapter,
IDisplayWindowBroker broker,
IExternalEditorManager externalEditorManager)
IResharperUtil resharperUtil)
{
_vimBuffer = bufferCoordinator.VimBuffer;
_vim = _vimBuffer.Vim;
_bufferCoordinator = bufferCoordinator;
_textBuffer = _vimBuffer.TextBuffer;
_vsAdapter = vsAdapter;
_broker = broker;
_externalEditManager = externalEditorManager;
_resharperUtil = resharperUtil;
}

/// <summary>
Expand Down Expand Up @@ -218,7 +218,7 @@ private bool TryGetSingleMapping(KeyInput original, out KeyInput mapped)
private bool IsDisplayWindowKey(KeyInput keyInput)
{
// Consider normal completion
if (_broker.IsCompletionActive || _externalEditManager.IsResharperInstalled)
if (_broker.IsCompletionActive || _resharperUtil.IsInstalled)
{
return
keyInput.IsArrowKey ||
Expand Down Expand Up @@ -280,7 +280,7 @@ private bool TryProcessWithBuffer(KeyInput keyInput)
// The one exception to this rule is R#. We can't accurately determine if
// R# has intellisense active or not so we have to pretend like it always
// does. We limit this to insert mode only though.
if (!_externalEditManager.IsResharperInstalled || _vimBuffer.ModeKind != ModeKind.Insert)
if (!_resharperUtil.IsInstalled || _vimBuffer.ModeKind != ModeKind.Insert)
{
return _vimBuffer.Process(keyInput).IsAnyHandled;
}
Expand Down Expand Up @@ -437,7 +437,7 @@ int IOleCommandTarget.QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] p
else if (editCommand.HasKeyInput && _vimBuffer.CanProcess(editCommand.KeyInput))
{
action = CommandStatus.Enable;
if (_externalEditManager.IsResharperInstalled)
if (_resharperUtil.IsInstalled)
{
action = QueryStatusInResharper(editCommand.KeyInput) ?? CommandStatus.Enable;
}
Expand Down Expand Up @@ -533,9 +533,9 @@ internal static Result<VsCommandTarget> Create(
IVsTextView vsTextView,
IVsAdapter adapter,
IDisplayWindowBroker broker,
IExternalEditorManager externalEditorManager)
IResharperUtil resharperUtil)
{
var vsCommandTarget = new VsCommandTarget(bufferCoordinator, adapter, broker, externalEditorManager);
var vsCommandTarget = new VsCommandTarget(bufferCoordinator, adapter, broker, resharperUtil);
var hresult = vsTextView.AddCommandFilter(vsCommandTarget, out vsCommandTarget._nextTarget);
var result = Result.CreateSuccessOrError(vsCommandTarget, hresult);
if (result.IsSuccess)
Expand Down
2 changes: 1 addition & 1 deletion VsVimShared/VsVimShared.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@
<Compile Include="ExternalEdit\ResharperExternalEditAdapter.cs" />
<Compile Include="ExternalEdit\SnippetExternalEditAdapter.cs" />
<Compile Include="HostFactory.cs" />
<Compile Include="IExternalEditorManager.cs" />
<Compile Include="IKeyBindingService.cs" />
<Compile Include="ILegacySettings.cs" />
<Compile Include="Implementation\ConflictingKeyBindingMargin.cs" />
Expand All @@ -143,6 +142,7 @@
<Compile Include="Implementation\VsAdapter.cs" />
<Compile Include="Implementation\VsKeyProcessorProvider.cs" />
<Compile Include="IOptionsDialogService.cs" />
<Compile Include="IResharperUtil.cs" />
<Compile Include="ITextManager.cs" />
<Compile Include="IVimBufferCoordinator.cs" />
<Compile Include="KeyBinding.cs" />
Expand Down
8 changes: 4 additions & 4 deletions VsVimSharedTest/Utils/VsSimulation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ internal CommandKey(Guid commandGroup, uint commandId)
private readonly MockRepository _factory;
private readonly Mock<IVsAdapter> _vsAdapter;
private readonly Mock<IDisplayWindowBroker> _displayWindowBroker;
private readonly Mock<IExternalEditorManager> _externalEditorManager;
private readonly Mock<IResharperUtil> _resharperUtil;
private readonly TestableSynchronizationContext _testableSynchronizationContext;
private bool _simulateStandardKeyMappings;

Expand Down Expand Up @@ -421,8 +421,8 @@ internal VsSimulation(IVimBufferCoordinator bufferCoordinator, bool simulateResh
_vsAdapter.Setup(x => x.IsReadOnly(It.IsAny<ITextBuffer>())).Returns(false);
_vsAdapter.Setup(x => x.IsIncrementalSearchActive(_wpfTextView)).Returns(false);

_externalEditorManager = _factory.Create<IExternalEditorManager>();
_externalEditorManager.SetupGet(x => x.IsResharperInstalled).Returns(simulateResharper);
_resharperUtil = _factory.Create<IResharperUtil>();
_resharperUtil.SetupGet(x => x.IsInstalled).Returns(simulateResharper);

_displayWindowBroker = _factory.Create<IDisplayWindowBroker>();
_displayWindowBroker.SetupGet(x => x.IsCompletionActive).Returns(false);
Expand All @@ -449,7 +449,7 @@ internal VsSimulation(IVimBufferCoordinator bufferCoordinator, bool simulateResh
vsTextView.Object,
_vsAdapter.Object,
_displayWindowBroker.Object,
_externalEditorManager.Object).Value;
_resharperUtil.Object).Value;

// Time to setup the start command target. If we are simulating R# then put them ahead of VsVim
// on the IOleCommandTarget chain. VsVim doesn't try to fight R# and prefers instead to be
Expand Down
24 changes: 12 additions & 12 deletions VsVimSharedTest/VsCommandTargetTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public sealed class VsCommandTargetTest : VimTestBase
private IVim _vim;
private ITextView _textView;
private Mock<IVsAdapter> _vsAdapter;
private Mock<IExternalEditorManager> _externalEditorManager;
private Mock<IResharperUtil> _resharperUtil;
private Mock<IOleCommandTarget> _nextTarget;
private Mock<IDisplayWindowBroker> _broker;
private VsCommandTarget _targetRaw;
Expand All @@ -39,8 +39,8 @@ public void SetUp()
_factory = new MockRepository(MockBehavior.Strict);

// By default Resharper isn't loaded
_externalEditorManager = _factory.Create<IExternalEditorManager>();
_externalEditorManager.SetupGet(x => x.IsResharperInstalled).Returns(false);
_resharperUtil = _factory.Create<IResharperUtil>();
_resharperUtil.SetupGet(x => x.IsInstalled).Returns(false);

_nextTarget = _factory.Create<IOleCommandTarget>(MockBehavior.Strict);
_vsAdapter = _factory.Create<IVsAdapter>();
Expand All @@ -59,7 +59,7 @@ public void SetUp()
vsTextView.Object,
_vsAdapter.Object,
_broker.Object,
_externalEditorManager.Object);
_resharperUtil.Object);
Assert.IsTrue(result.IsSuccess);
_targetRaw = result.Value;
_target = _targetRaw;
Expand Down Expand Up @@ -195,7 +195,7 @@ public void QueryStatus_EnableEscapeAndDontHandleInResharperPlusVisualMode()
var count = 0;
_buffer.KeyInputProcessed += delegate { count++; };
_buffer.SwitchMode(ModeKind.VisualCharacter, ModeArgument.None);
_externalEditorManager.SetupGet(x => x.IsResharperInstalled).Returns(true).Verifiable();
_resharperUtil.SetupGet(x => x.IsInstalled).Returns(true).Verifiable();
RunQueryStatus(KeyInputUtil.EscapeKey);
Assert.AreEqual(0, count);
_factory.Verify();
Expand All @@ -212,7 +212,7 @@ public void QueryStatus_Resharper_EnableAndHandleEscape()
var count = 0;
_buffer.KeyInputProcessed += delegate { count++; };
_buffer.SwitchMode(ModeKind.Insert, ModeArgument.None);
_externalEditorManager.SetupGet(x => x.IsResharperInstalled).Returns(true).Verifiable();
_resharperUtil.SetupGet(x => x.IsInstalled).Returns(true).Verifiable();
Assert.IsTrue(RunQueryStatus(KeyInputUtil.EscapeKey));
Assert.IsTrue(_bufferCoordinator.DiscardedKeyInput.IsSome(KeyInputUtil.EscapeKey));
Assert.AreEqual(1, count);
Expand All @@ -231,7 +231,7 @@ public void QueryStatus_Reshaper_BackspaceAsCommand()
var count = 0;
_buffer.KeyInputProcessed += delegate { count++; };
_buffer.SwitchMode(ModeKind.Normal, ModeArgument.None);
_externalEditorManager.SetupGet(x => x.IsResharperInstalled).Returns(true).Verifiable();
_resharperUtil.SetupGet(x => x.IsInstalled).Returns(true).Verifiable();
Assert.IsTrue(_buffer.CanProcessAsCommand(backKeyInput));
Assert.IsFalse(RunQueryStatus(backKeyInput));
Assert.IsTrue(_bufferCoordinator.DiscardedKeyInput.IsSome(backKeyInput));
Expand All @@ -251,7 +251,7 @@ public void QueryStatus_Reshaper_BackspaceInInsert()
var count = 0;
_buffer.KeyInputProcessed += delegate { count++; };
_buffer.SwitchMode(ModeKind.Insert, ModeArgument.None);
_externalEditorManager.SetupGet(x => x.IsResharperInstalled).Returns(true).Verifiable();
_resharperUtil.SetupGet(x => x.IsInstalled).Returns(true).Verifiable();
Assert.IsTrue(_buffer.CanProcessAsCommand(backKeyInput));
Assert.IsTrue(RunQueryStatus(backKeyInput));
Assert.IsTrue(_bufferCoordinator.DiscardedKeyInput.IsNone());
Expand All @@ -269,7 +269,7 @@ public void QueryStatus_EnableAndHandleEscapeInResharperPlusExternalEdit()
var count = 0;
_buffer.KeyInputProcessed += delegate { count++; };
_buffer.SwitchMode(ModeKind.ExternalEdit, ModeArgument.None);
_externalEditorManager.SetupGet(x => x.IsResharperInstalled).Returns(true).Verifiable();
_resharperUtil.SetupGet(x => x.IsInstalled).Returns(true).Verifiable();
Assert.IsTrue(RunQueryStatus(KeyInputUtil.EscapeKey));
Assert.IsTrue(_bufferCoordinator.DiscardedKeyInput.IsSome(KeyInputUtil.EscapeKey));
Assert.AreEqual(1, count);
Expand All @@ -285,7 +285,7 @@ public void QueryStatus_Reshaprer_HandlePageUpNormally()
var count = 0;
_buffer.KeyInputProcessed += delegate { count++; };
_buffer.SwitchMode(ModeKind.Normal, ModeArgument.None);
_externalEditorManager.SetupGet(x => x.IsResharperInstalled).Returns(true).Verifiable();
_resharperUtil.SetupGet(x => x.IsInstalled).Returns(true).Verifiable();
Assert.IsTrue(RunQueryStatus(KeyInputUtil.VimKeyToKeyInput(VimKey.PageUp)));
Assert.AreEqual(0, count);
_factory.Verify();
Expand All @@ -302,7 +302,7 @@ public void QueryStatus_Resharper_EnterAsCommand()
{
_textView.SetText("cat", "dog");
_textView.MoveCaretTo(0);
_externalEditorManager.SetupGet(x => x.IsResharperInstalled).Returns(true).Verifiable();
_resharperUtil.SetupGet(x => x.IsInstalled).Returns(true).Verifiable();
_buffer.SwitchMode(ModeKind.Normal, ModeArgument.None);
Assert.IsTrue(_buffer.CanProcessAsCommand(KeyInputUtil.EnterKey));
Assert.IsFalse(RunQueryStatus(KeyInputUtil.EnterKey));
Expand All @@ -322,7 +322,7 @@ public void QueryStatus_Resharper_EnterInInsert()
_textView.SetText("cat", "dog");
_textView.MoveCaretTo(0);
var savedSnapshot = _textView.TextSnapshot;
_externalEditorManager.SetupGet(x => x.IsResharperInstalled).Returns(true).Verifiable();
_resharperUtil.SetupGet(x => x.IsInstalled).Returns(true).Verifiable();
_buffer.SwitchMode(ModeKind.Insert, ModeArgument.None);
Assert.IsTrue(_buffer.CanProcessAsCommand(KeyInputUtil.EnterKey));
Assert.IsTrue(RunQueryStatus(KeyInputUtil.EnterKey));
Expand Down

0 comments on commit 621f2d7

Please sign in to comment.