Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
dc6cab79
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,发现更多精彩内容 >>
提交
dc6cab79
编写于
8月 22, 2018
作者:
C
Cyrus Najmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix assert in the VirtualCharService in C# directive trivia.
上级
2d177fb8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
47 addition
and
0 deletion
+47
-0
src/EditorFeatures/CSharpTest/Classification/SemanticClassifierTests.cs
...ures/CSharpTest/Classification/SemanticClassifierTests.cs
+7
-0
src/EditorFeatures/VisualBasicTest/Classification/SemanticClassifierTests.vb
...VisualBasicTest/Classification/SemanticClassifierTests.vb
+7
-0
src/Workspaces/CSharp/Portable/EmbeddedLanguages/VirtualChars/CSharpVirtualCharService.cs
...mbeddedLanguages/VirtualChars/CSharpVirtualCharService.cs
+33
-0
未找到文件。
src/EditorFeatures/CSharpTest/Classification/SemanticClassifierTests.cs
浏览文件 @
dc6cab79
...
...
@@ -2629,5 +2629,12 @@ public async Task TestStringEscape8()
Escape
(
@"{{"
),
Escape
(
@"}}"
));
}
[
WorkItem
(
29451
,
"https://github.com/dotnet/roslyn/issues/29451"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
Classification
)]
public
async
Task
TestDirectiveStringLiteral
()
{
await
TestInMethodAsync
(
@"#line 1 ""a\b"""
);
}
}
}
src/EditorFeatures/VisualBasicTest/Classification/SemanticClassifierTests.vb
浏览文件 @
dc6cab79
...
...
@@ -676,5 +676,12 @@ End Operator"
Escape("
{{
"),
Escape("
}}
"))
End Function
<WorkItem(29451, "
https
:
//
github
.
com
/
dotnet
/
roslyn
/
issues
/
29451
")>
<Fact, Trait(Traits.Feature, Traits.Features.Classification)>
Public Async Function TestDirectiveStringLiteral() As Task
Await TestAsync("
#
region
""
goo
"
""
"
bar
"
""
,
Escape(
""""""
))
End Function
End Class
End Namespace
src/Workspaces/CSharp/Portable/EmbeddedLanguages/VirtualChars/CSharpVirtualCharService.cs
浏览文件 @
dc6cab79
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using
System
;
using
System.Collections.Immutable
;
using
System.Composition
;
using
System.Diagnostics
;
...
...
@@ -22,6 +23,23 @@ protected override bool IsStringLiteralToken(SyntaxToken token)
protected
override
ImmutableArray
<
VirtualChar
>
TryConvertToVirtualCharsWorker
(
SyntaxToken
token
)
{
// C# preprocessor directives can contain string literals. However, these string
// literals do not behave like normal literals. Because they are used for paths (i.e.
// in a #line directive), the language does not do any escaping within them. i.e. if
// you have a \ it's just a \ Note that this is not a verbatim string. You can't put
// a double quote in it either, and you cannot have newlines and whatnot.
//
// We technically could convert this trivially to an array of virtual chars. After all,
// there would just be a 1:1 correspondance with the literal contents and the chars
// returned. However, we don't even both returning anything here. That's because
// there's no useful features we can offer here. Because there are no escape characters
// we won't classify any escape characters. And there is no way that these strings would
// be Regex/Json snippets. So it's easier to just bail out and return nothing.
if
(
IsInDirective
(
token
.
Parent
))
{
return
default
;
}
Debug
.
Assert
(!
token
.
ContainsDiagnostics
);
if
(
token
.
Kind
()
==
SyntaxKind
.
StringLiteralToken
)
{
...
...
@@ -42,6 +60,21 @@ protected override ImmutableArray<VirtualChar> TryConvertToVirtualCharsWorker(Sy
}
}
private
bool
IsInDirective
(
SyntaxNode
node
)
{
while
(
node
!=
null
)
{
if
(
node
is
DirectiveTriviaSyntax
)
{
return
true
;
}
node
=
node
.
Parent
;
}
return
false
;
}
private
ImmutableArray
<
VirtualChar
>
TryConvertVerbatimStringToVirtualChars
(
SyntaxToken
token
,
string
startDelimiter
,
string
endDelimiter
,
bool
escapeBraces
)
=>
TryConvertSimpleDoubleQuoteString
(
token
,
startDelimiter
,
endDelimiter
,
escapeBraces
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录