Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
d92d2324
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d92d2324
编写于
8月 30, 2017
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Clean up comments.
上级
84f749f5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
20 deletion
+23
-20
src/Features/CSharp/Portable/Structure/Providers/DisabledTextTriviaStructureProvider.cs
...tructure/Providers/DisabledTextTriviaStructureProvider.cs
+23
-20
未找到文件。
src/Features/CSharp/Portable/Structure/Providers/DisabledTextTriviaStructureProvider.cs
浏览文件 @
d92d2324
...
...
@@ -25,15 +25,6 @@ internal class DisabledTextTriviaStructureProvider : AbstractSyntaxTriviaStructu
// We'll always be leading trivia of some token.
var
startPos
=
trivia
.
FullSpan
.
Start
;
// Look through our parent token's trivia, to:
// 1. See if we're the first disabled trivia attached to the token.
// 2. To extend the span to the end of the last disabled trivia.
//
// The issue is that if there are other pre-processor directives (like #regions or
// #lines) mixed in the disabled code, they will be interleaved. Keep walking past
// them to the next thing that will actually end a disabled block. When we encounter
// one, we must also consider which opening block they end. In case of nested pre-processor
// directives, the inner most end block should match the inner most open block and so on.
var
parentTriviaList
=
trivia
.
Token
.
LeadingTrivia
;
var
indexInParent
=
parentTriviaList
.
IndexOf
(
trivia
);
...
...
@@ -58,8 +49,8 @@ internal class DisabledTextTriviaStructureProvider : AbstractSyntaxTriviaStructu
return
;
}
var
end
Pos
=
GetEndPositionIncludingLastNewLine
(
trivia
,
parentTriviaList
,
indexInParent
);
endPos
=
GetEndPositionExludingLastNewLine
(
syntaxTree
,
endPos
,
cancellationToken
);
var
end
Trivia
=
GetCorrespondingEndTrivia
(
trivia
,
parentTriviaList
,
indexInParent
);
var
endPos
=
GetEndPositionExludingLastNewLine
(
syntaxTree
,
endTrivia
,
cancellationToken
);
var
span
=
TextSpan
.
FromBounds
(
startPos
,
endPos
);
spans
.
Add
(
new
BlockSpan
(
...
...
@@ -70,16 +61,26 @@ internal class DisabledTextTriviaStructureProvider : AbstractSyntaxTriviaStructu
autoCollapse
:
true
));
}
private
static
int
GetEndPositionExludingLastNewLine
(
SyntaxTree
syntaxTree
,
int
endPos
,
CancellationToken
cancellationToken
)
private
static
int
GetEndPositionExludingLastNewLine
(
SyntaxTree
syntaxTree
,
SyntaxTrivia
trivia
,
CancellationToken
cancellationToken
)
{
var
endPos
=
trivia
.
FullSpan
.
End
;
var
text
=
syntaxTree
.
GetText
(
cancellationToken
);
return
endPos
>=
2
&&
text
[
endPos
-
1
]
==
'\n'
&&
text
[
endPos
-
2
]
==
'\r'
?
endPos
-
2
:
endPos
>=
1
&&
SyntaxFacts
.
IsNewLine
(
text
[
endPos
-
1
])
?
endPos
-
1
:
endPos
;
}
private
int
GetEndPositionIncludingLastNewLine
(
private
SyntaxTrivia
GetCorrespondingEndTrivia
(
SyntaxTrivia
trivia
,
SyntaxTriviaList
triviaList
,
int
index
)
{
// Look through our parent token's trivia, to extend the span to the end of the last
// disabled trivia.
//
// The issue is that if there are other pre-processor directives (like #regions or
// #lines) mixed in the disabled code, they will be interleaved. Keep walking past
// them to the next thing that will actually end a disabled block. When we encounter
// one, we must also consider which opening block they end. In case of nested pre-processor
// directives, the inner most end block should match the inner most open block and so on.
var
nestedIfDirectiveTrivia
=
0
;
for
(
var
i
=
index
;
i
<
triviaList
.
Count
;
i
++)
{
...
...
@@ -101,9 +102,9 @@ private static int GetEndPositionExludingLastNewLine(SyntaxTree syntaxTree, int
continue
;
}
// Found an #endif corresponding to our original #if/#elif/#else
//
region we started with. Mark this range
as the range to collapse.
return
triviaList
[
i
-
1
]
.
FullSpan
.
End
;
// Found an #endif corresponding to our original #if/#elif/#else
region we
//
started with. Mark up to the trivia before this
as the range to collapse.
return
triviaList
[
i
-
1
];
case
SyntaxKind
.
ElseDirectiveTrivia
:
case
SyntaxKind
.
ElifDirectiveTrivia
:
...
...
@@ -116,13 +117,15 @@ private static int GetEndPositionExludingLastNewLine(SyntaxTree syntaxTree, int
}
// We found the next #else/#elif corresponding to our original #if/#elif/#else
// region we started with. Mark this range as the range to collapse.
return
triviaList
[
i
-
1
].
FullSpan
.
End
;
// region we started with. Mark up to the trivia before this as the range
// to collapse.
return
triviaList
[
i
-
1
];
}
}
// Couldn't find an end. Just mark to the end of the disabled text.
return
trivia
.
FullSpan
.
End
;
// Couldn't find a future trivia to collapse up to. Just collapse the original
// disabled text trivia we started with.
return
trivia
;
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录