提交 a8385b0a 编写于 作者: C CyrusNajmabadi

Properly collapse the right range when encountering nested #if regions.

上级 8caf6101
......@@ -111,6 +111,77 @@ class P {
{
#if Bar
M();
#endif
}|}
#endif
}
";
await VerifyBlockSpansAsync(code,
Region("span", CSharpStructureHelpers.Ellipsis, autoCollapse: true));
}
[WorkItem(459257, "https://devdiv.visualstudio.com/DevDiv/_workitems?id=459257")]
[Fact, Trait(Traits.Feature, Traits.Features.Outlining)]
public async Task NestedDisabledCodePreProcessorDirectivesWithElseShouldCollapseEntireDisabledRegion()
{
const string code = @"
class P {
#if Goo
{|span: void $$M()
{
#if Bar
M();
#else
#endif
}|}
#endif
}
";
await VerifyBlockSpansAsync(code,
Region("span", CSharpStructureHelpers.Ellipsis, autoCollapse: true));
}
[WorkItem(459257, "https://devdiv.visualstudio.com/DevDiv/_workitems?id=459257")]
[Fact, Trait(Traits.Feature, Traits.Features.Outlining)]
public async Task NestedDisabledCodePreProcessorDirectivesWithElifShouldCollapseEntireDisabledRegion()
{
const string code = @"
class P {
#if Goo
{|span: void $$M()
{
#if Bar
M();
#elif Baz
#endif
}|}
#endif
}
";
await VerifyBlockSpansAsync(code,
Region("span", CSharpStructureHelpers.Ellipsis, autoCollapse: true));
}
[WorkItem(459257, "https://devdiv.visualstudio.com/DevDiv/_workitems?id=459257")]
[Fact, Trait(Traits.Feature, Traits.Features.Outlining)]
public async Task NestedDisabledCodePreProcessorDirectivesWithElseAndElifShouldCollapseEntireDisabledRegion()
{
const string code = @"
class P {
#if Goo
{|span: void $$M()
{
#if Bar
M();
#else
#elif Baz
#endif
}|}
#endif
......
......@@ -59,18 +59,24 @@ internal class DisabledTextTriviaStructureProvider : AbstractSyntaxTriviaStructu
var nestedIfDirectiveTrivia = 0;
for (var i = indexInParent; i < parentTriviaList.Count; i++)
{
if (parentTriviaList[i].IsKind(SyntaxKind.IfDirectiveTrivia))
var currentTrivia = parentTriviaList[i];
if (currentTrivia.IsKind(SyntaxKind.IfDirectiveTrivia))
{
nestedIfDirectiveTrivia++;
continue;
}
if (parentTriviaList[i].IsKind(SyntaxKind.EndIfDirectiveTrivia) ||
parentTriviaList[i].IsKind(SyntaxKind.ElifDirectiveTrivia) ||
parentTriviaList[i].IsKind(SyntaxKind.ElseDirectiveTrivia))
var isEndIf = currentTrivia.IsKind(SyntaxKind.EndIfDirectiveTrivia);
if (isEndIf ||
currentTrivia.IsKind(SyntaxKind.ElifDirectiveTrivia) ||
currentTrivia.IsKind(SyntaxKind.ElseDirectiveTrivia))
{
if (nestedIfDirectiveTrivia > 0)
{
nestedIfDirectiveTrivia--;
if (isEndIf)
{
nestedIfDirectiveTrivia--;
}
}
else
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册