From 345eb29c62c55d141fb323138b642561e478e9c2 Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Mon, 27 Nov 2017 16:54:53 -0800 Subject: [PATCH] Update code doc provider to only rely on VSRazorParser. - Prior to this change the code document provider took in many sub-providers to allow for understanding of the old RazorEditorParser AND VisualStudioRazorParser. Now that RazorEditorParser is gone we can also change the code doc provider. --- .../DefaultCodeDocumentProvider.cs | 17 +++--- .../DefaultCodeDocumentProviderTest.cs | 60 +------------------ 2 files changed, 10 insertions(+), 67 deletions(-) diff --git a/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs b/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs index 5d3bd97ce3..9ed0ab5dcf 100644 --- a/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs @@ -14,25 +14,25 @@ namespace Microsoft.VisualStudio.Editor.Razor internal class DefaultCodeDocumentProvider : RazorCodeDocumentProvider { private readonly RazorTextBufferProvider _bufferProvider; - private readonly IEnumerable _codeDocumentProviders; + private readonly TextBufferCodeDocumentProvider _codeDocumentProvider; [ImportingConstructor] public DefaultCodeDocumentProvider( RazorTextBufferProvider bufferProvider, - [ImportMany] IEnumerable codeDocumentProviders) + TextBufferCodeDocumentProvider codeDocumentProvider) { if (bufferProvider == null) { throw new ArgumentNullException(nameof(bufferProvider)); } - if (codeDocumentProviders == null) + if (codeDocumentProvider == null) { - throw new ArgumentNullException(nameof(codeDocumentProviders)); + throw new ArgumentNullException(nameof(codeDocumentProvider)); } _bufferProvider = bufferProvider; - _codeDocumentProviders = codeDocumentProviders; + _codeDocumentProvider = codeDocumentProvider; } public override bool TryGetFromDocument(TextDocument document, out RazorCodeDocument codeDocument) @@ -49,12 +49,9 @@ namespace Microsoft.VisualStudio.Editor.Razor return false; } - foreach (var codeDocumentProvider in _codeDocumentProviders) + if (_codeDocumentProvider.TryGetFromBuffer(textBuffer, out codeDocument)) { - if (codeDocumentProvider.TryGetFromBuffer(textBuffer, out codeDocument)) - { - return true; - } + return true; } // A Razor code document has not yet been associated with the buffer yet. diff --git a/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultCodeDocumentProviderTest.cs b/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultCodeDocumentProviderTest.cs index aaf4125a9a..41e382cc04 100644 --- a/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultCodeDocumentProviderTest.cs +++ b/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultCodeDocumentProviderTest.cs @@ -23,7 +23,7 @@ namespace Microsoft.VisualStudio.Editor.Razor var vsCodeDocumentProvider = new Mock(); vsCodeDocumentProvider.Setup(provider => provider.TryGetFromBuffer(It.IsAny(), out codeDocument)) .Returns(true); - var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, new[] { vsCodeDocumentProvider.Object }); + var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, vsCodeDocumentProvider.Object); var document = new Mock(); // Act @@ -46,7 +46,7 @@ namespace Microsoft.VisualStudio.Editor.Razor var vsCodeDocumentProvider = new Mock(); vsCodeDocumentProvider.Setup(provider => provider.TryGetFromBuffer(It.Is(val => val == textBuffer), out codeDocument)) .Returns(false); - var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, new[] { vsCodeDocumentProvider.Object }); + var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, vsCodeDocumentProvider.Object); var document = new Mock(); // Act @@ -57,60 +57,6 @@ namespace Microsoft.VisualStudio.Editor.Razor Assert.Null(codeDocument); } - [Fact] - public void TryGetFromDocument_ReturnsTrueIfVSProviderCanGetCodeDocumentFromOneProvider() - { - // Arrange - var textBuffer = new Mock().Object; - RazorCodeDocument codeDocument; - var expectedCodeDocument = new Mock().Object; - var bufferProvider = new Mock(); - bufferProvider.Setup(provider => provider.TryGetFromDocument(It.IsAny(), out textBuffer)) - .Returns(true); - var failureVSCodeDocumentProvider = new Mock(); - failureVSCodeDocumentProvider.Setup(provider => provider.TryGetFromBuffer(It.Is(val => val == textBuffer), out codeDocument)) - .Returns(false); - var successVSCodeDocumentProvider = new Mock(); - successVSCodeDocumentProvider.Setup(provider => provider.TryGetFromBuffer(It.Is(val => val == textBuffer), out expectedCodeDocument)) - .Returns(true); - var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, new[] { failureVSCodeDocumentProvider.Object, successVSCodeDocumentProvider.Object }); - var document = new Mock(); - - // Act - var result = codeDocumentProvider.TryGetFromDocument(document.Object, out codeDocument); - - // Assert - Assert.True(result); - Assert.Same(expectedCodeDocument, codeDocument); - } - - [Fact] - public void TryGetFromDocument_ReturnsFirstProvidersResultThatGetsCodeDocument() - { - // Arrange - var textBuffer = new Mock().Object; - var expectedCodeDocument1 = new Mock().Object; - var expectedCodeDocument2 = new Mock().Object; - var bufferProvider = new Mock(); - bufferProvider.Setup(provider => provider.TryGetFromDocument(It.IsAny(), out textBuffer)) - .Returns(true); - var vsCodeDocumentProvider1 = new Mock(); - vsCodeDocumentProvider1.Setup(provider => provider.TryGetFromBuffer(It.Is(val => val == textBuffer), out expectedCodeDocument1)) - .Returns(true); - var vsCodeDocumentProvider2 = new Mock(); - vsCodeDocumentProvider2.Setup(provider => provider.TryGetFromBuffer(It.Is(val => val == textBuffer), out expectedCodeDocument2)) - .Returns(true); - var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, new[] { vsCodeDocumentProvider1.Object, vsCodeDocumentProvider2.Object }); - var document = new Mock(); - - // Act - var result = codeDocumentProvider.TryGetFromDocument(document.Object, out var codeDocument); - - // Assert - Assert.True(result); - Assert.Same(expectedCodeDocument1, codeDocument); - } - [Fact] public void TryGetFromDocument_ReturnsTrueIfBothBufferAndVSProviderReturnTrue() { @@ -123,7 +69,7 @@ namespace Microsoft.VisualStudio.Editor.Razor var vsCodeDocumentProvider = new Mock(); vsCodeDocumentProvider.Setup(provider => provider.TryGetFromBuffer(It.Is(val => val == textBuffer), out expectedCodeDocument)) .Returns(true); - var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, new[] { vsCodeDocumentProvider.Object }); + var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, vsCodeDocumentProvider.Object); var document = new Mock(); // Act