From cb557cf77173414c39e8fd4524ab38c0d5799725 Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Wed, 18 Jul 2018 17:52:13 -0700 Subject: [PATCH] Changed `GetDesiredIndentation` to be resilient to our SyntaxTree which occasionally has gaps. - Added a test to cover the scenario. #2489 --- .../DefaultRazorIndentationFactsService.cs | 2 +- ...DefaultRazorIndentationFactsServiceTest.cs | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorIndentationFactsService.cs b/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorIndentationFactsService.cs index 109ba1311b..f69274fa15 100644 --- a/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorIndentationFactsService.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorIndentationFactsService.cs @@ -64,7 +64,7 @@ namespace Microsoft.VisualStudio.Editor.Razor var previousLineEndIndex = GetPreviousLineEndIndex(syntaxTreeSnapshot, line); var simulatedChange = new SourceChange(previousLineEndIndex, 0, string.Empty); var owningSpan = syntaxTree.Root.LocateOwner(simulatedChange); - if (owningSpan.Kind == SpanKindInternal.Code) + if (owningSpan == null || owningSpan.Kind == SpanKindInternal.Code) { // Example, // @{\n diff --git a/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultRazorIndentationFactsServiceTest.cs b/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultRazorIndentationFactsServiceTest.cs index 2045d1a4f6..dcc7c8cadc 100644 --- a/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultRazorIndentationFactsServiceTest.cs +++ b/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultRazorIndentationFactsServiceTest.cs @@ -167,6 +167,33 @@ namespace Microsoft.VisualStudio.Editor.Razor Assert.Equal(0, indentLevel); } + // This test verifies that we still operate on SyntaxTree's that have gaps in them. The gaps are temporary + // until our work with the parser has been completed. + [Fact] + public void GetDesiredIndentation_ReturnsNull_IfOwningSpanDoesNotExist() + { + // Arrange + var source = new StringTextSnapshot($@" +
+
+
+
+"); + var syntaxTree = GetSyntaxTree(new StringTextSnapshot("something else")); + var service = new DefaultRazorIndentationFactsService(); + + // Act + var indentation = service.GetDesiredIndentation( + syntaxTree, + source, + source.GetLineFromLineNumber(3), + indentSize: 4, + tabSize: 1); + + // Assert + Assert.Null(indentation); + } + [Fact] public void GetDesiredIndentation_ReturnsNull_IfOwningSpanIsCode() {