Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
21247028
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
21247028
编写于
10月 30, 2019
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Revert "uri - remove strict mode, use file when scheme is missing"
This reverts commit
2c1c691b
.
上级
58479e80
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
49 addition
and
24 deletion
+49
-24
src/vs/base/common/uri.ts
src/vs/base/common/uri.ts
+35
-13
src/vs/monaco.d.ts
src/vs/monaco.d.ts
+2
-1
src/vs/workbench/api/common/extHostTypeConverters.ts
src/vs/workbench/api/common/extHostTypeConverters.ts
+5
-5
src/vs/workbench/services/extensions/common/extensionHostMain.ts
...workbench/services/extensions/common/extensionHostMain.ts
+5
-1
src/vs/workbench/test/electron-browser/api/extHostTypeConverter.test.ts
...ch/test/electron-browser/api/extHostTypeConverter.test.ts
+2
-4
未找到文件。
src/vs/base/common/uri.ts
浏览文件 @
21247028
...
...
@@ -10,11 +10,26 @@ const _schemePattern = /^\w[\w\d+.-]*$/;
const
_singleSlashStart
=
/^
\/
/
;
const
_doubleSlashStart
=
/^
\/\/
/
;
function
_validateUri
(
ret
:
URI
):
void
{
let
_throwOnMissingSchema
:
boolean
=
true
;
/**
* @internal
*/
export
function
setUriThrowOnMissingScheme
(
value
:
boolean
):
boolean
{
const
old
=
_throwOnMissingSchema
;
_throwOnMissingSchema
=
value
;
return
old
;
}
function
_validateUri
(
ret
:
URI
,
_strict
?:
boolean
):
void
{
// scheme, must be set
if
(
!
ret
.
scheme
)
{
throw
new
Error
(
`[UriError]: Scheme is missing: {scheme: "", authority: "
${
ret
.
authority
}
", path: "
${
ret
.
path
}
", query: "
${
ret
.
query
}
", fragment: "
${
ret
.
fragment
}
"}`
);
if
(
_strict
||
_throwOnMissingSchema
)
{
throw
new
Error
(
`[UriError]: Scheme is missing: {scheme: "", authority: "
${
ret
.
authority
}
", path: "
${
ret
.
path
}
", query: "
${
ret
.
query
}
", fragment: "
${
ret
.
fragment
}
"}`
);
}
else
{
console
.
warn
(
`[UriError]: Scheme is missing: {scheme: "", authority: "
${
ret
.
authority
}
", path: "
${
ret
.
path
}
", query: "
${
ret
.
query
}
", fragment: "
${
ret
.
fragment
}
"}`
);
}
}
// scheme, https://tools.ietf.org/html/rfc3986#section-3.1
...
...
@@ -41,8 +56,14 @@ function _validateUri(ret: URI): void {
}
}
// graceful behaviour when scheme is missing: fallback to using 'file'-scheme
function
_schemeFix
(
scheme
:
string
):
string
{
// for a while we allowed uris *without* schemes and this is the migration
// for them, e.g. an uri without scheme and without strict-mode warns and falls
// back to the file-scheme. that should cause the least carnage and still be a
// clear warning
function
_schemeFix
(
scheme
:
string
,
_strict
:
boolean
):
string
{
if
(
_strict
||
_throwOnMissingSchema
)
{
return
scheme
||
_empty
;
}
if
(
!
scheme
)
{
console
.
trace
(
'
BAD uri lacks scheme, falling back to file-scheme.
'
);
scheme
=
'
file
'
;
...
...
@@ -138,7 +159,7 @@ export class URI implements UriComponents {
/**
* @internal
*/
protected
constructor
(
scheme
:
string
,
authority
?:
string
,
path
?:
string
,
query
?:
string
,
fragment
?:
string
);
protected
constructor
(
scheme
:
string
,
authority
?:
string
,
path
?:
string
,
query
?:
string
,
fragment
?:
string
,
_strict
?:
boolean
);
/**
* @internal
...
...
@@ -148,7 +169,7 @@ export class URI implements UriComponents {
/**
* @internal
*/
protected
constructor
(
schemeOrData
:
string
|
UriComponents
,
authority
?:
string
,
path
?:
string
,
query
?:
string
,
fragment
?:
string
)
{
protected
constructor
(
schemeOrData
:
string
|
UriComponents
,
authority
?:
string
,
path
?:
string
,
query
?:
string
,
fragment
?:
string
,
_strict
:
boolean
=
false
)
{
if
(
typeof
schemeOrData
===
'
object
'
)
{
this
.
scheme
=
schemeOrData
.
scheme
||
_empty
;
...
...
@@ -160,13 +181,13 @@ export class URI implements UriComponents {
// that creates uri components.
// _validateUri(this);
}
else
{
this
.
scheme
=
_schemeFix
(
schemeOrData
);
this
.
scheme
=
_schemeFix
(
schemeOrData
,
_strict
);
this
.
authority
=
authority
||
_empty
;
this
.
path
=
_referenceResolution
(
this
.
scheme
,
path
||
_empty
);
this
.
query
=
query
||
_empty
;
this
.
fragment
=
fragment
||
_empty
;
_validateUri
(
this
);
_validateUri
(
this
,
_strict
);
}
}
...
...
@@ -205,7 +226,7 @@ export class URI implements UriComponents {
// ---- modify to new -------------------------
with
(
change
:
{
scheme
?:
string
;
authority
?:
string
|
null
;
path
?:
string
|
null
;
query
?:
string
|
null
;
fragment
?:
string
|
null
;
}):
URI
{
with
(
change
:
{
scheme
?:
string
;
authority
?:
string
|
null
;
path
?:
string
|
null
;
query
?:
string
|
null
;
fragment
?:
string
|
null
}):
URI
{
if
(
!
change
)
{
return
this
;
...
...
@@ -258,7 +279,7 @@ export class URI implements UriComponents {
*
* @param value A string which represents an URI (see `URI#toString`).
*/
static
parse
(
value
:
string
):
URI
{
static
parse
(
value
:
string
,
_strict
:
boolean
=
false
):
URI
{
const
match
=
_regexp
.
exec
(
value
);
if
(
!
match
)
{
return
new
_URI
(
_empty
,
_empty
,
_empty
,
_empty
,
_empty
);
...
...
@@ -268,7 +289,8 @@ export class URI implements UriComponents {
decodeURIComponent
(
match
[
4
]
||
_empty
),
decodeURIComponent
(
match
[
5
]
||
_empty
),
decodeURIComponent
(
match
[
7
]
||
_empty
),
decodeURIComponent
(
match
[
9
]
||
_empty
)
decodeURIComponent
(
match
[
9
]
||
_empty
),
_strict
);
}
...
...
@@ -320,7 +342,7 @@ export class URI implements UriComponents {
return
new
_URI
(
'
file
'
,
authority
,
path
,
_empty
,
_empty
);
}
static
from
(
components
:
{
scheme
:
string
;
authority
?:
string
;
path
?:
string
;
query
?:
string
;
fragment
?:
string
;
}):
URI
{
static
from
(
components
:
{
scheme
:
string
;
authority
?:
string
;
path
?:
string
;
query
?:
string
;
fragment
?:
string
}):
URI
{
return
new
_URI
(
components
.
scheme
,
components
.
authority
,
...
...
@@ -444,7 +466,7 @@ class _URI extends URI {
}
// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2
const
encodeTable
:
{
[
ch
:
number
]:
string
;
}
=
{
const
encodeTable
:
{
[
ch
:
number
]:
string
}
=
{
[
CharCode
.
Colon
]:
'
%3A
'
,
// gen-delims
[
CharCode
.
Slash
]:
'
%2F
'
,
[
CharCode
.
QuestionMark
]:
'
%3F
'
,
...
...
src/vs/monaco.d.ts
浏览文件 @
21247028
...
...
@@ -55,6 +55,7 @@ declare namespace monaco {
*/
readonly
onCancellationRequested
:
IEvent
<
any
>
;
}
/**
* Uniform Resource Identifier (Uri) http://tools.ietf.org/html/rfc3986.
* This class is a simple parser which creates the basic component parts
...
...
@@ -131,7 +132,7 @@ declare namespace monaco {
*
* @param value A string which represents an Uri (see `Uri#toString`).
*/
static
parse
(
value
:
string
):
Uri
;
static
parse
(
value
:
string
,
_strict
?:
boolean
):
Uri
;
/**
* Creates a new Uri from a file system path, e.g. `c:\my\files`,
* `/usr/home`, or `\\server\share\some\path`.
...
...
src/vs/workbench/api/common/extHostTypeConverters.ts
浏览文件 @
21247028
...
...
@@ -255,12 +255,12 @@ export namespace MarkdownString {
}
// extract uris into a separate object
const
resUris
:
{
[
href
:
string
]:
UriComponents
;
}
=
Object
.
create
(
null
);
const
resUris
:
{
[
href
:
string
]:
UriComponents
}
=
Object
.
create
(
null
);
res
.
uris
=
resUris
;
const
collectUri
=
(
href
:
string
):
string
=>
{
try
{
let
uri
=
URI
.
parse
(
href
);
let
uri
=
URI
.
parse
(
href
,
true
);
uri
=
uri
.
with
({
query
:
_uriMassage
(
uri
.
query
,
resUris
)
});
resUris
[
href
]
=
uri
;
}
catch
(
e
)
{
...
...
@@ -277,7 +277,7 @@ export namespace MarkdownString {
return
res
;
}
function
_uriMassage
(
part
:
string
,
bucket
:
{
[
n
:
string
]:
UriComponents
;
}):
string
{
function
_uriMassage
(
part
:
string
,
bucket
:
{
[
n
:
string
]:
UriComponents
}):
string
{
if
(
!
part
)
{
return
part
;
}
...
...
@@ -513,7 +513,7 @@ export namespace WorkspaceEdit {
export
namespace
SymbolKind
{
const
_fromMapping
:
{
[
kind
:
number
]:
modes
.
SymbolKind
;
}
=
Object
.
create
(
null
);
const
_fromMapping
:
{
[
kind
:
number
]:
modes
.
SymbolKind
}
=
Object
.
create
(
null
);
_fromMapping
[
types
.
SymbolKind
.
File
]
=
modes
.
SymbolKind
.
File
;
_fromMapping
[
types
.
SymbolKind
.
Module
]
=
modes
.
SymbolKind
.
Module
;
_fromMapping
[
types
.
SymbolKind
.
Namespace
]
=
modes
.
SymbolKind
.
Namespace
;
...
...
@@ -893,7 +893,7 @@ export namespace DocumentLink {
let
target
:
URI
|
undefined
=
undefined
;
if
(
link
.
url
)
{
try
{
target
=
typeof
link
.
url
===
'
string
'
?
URI
.
parse
(
link
.
url
)
:
URI
.
revive
(
link
.
url
);
target
=
typeof
link
.
url
===
'
string
'
?
URI
.
parse
(
link
.
url
,
true
)
:
URI
.
revive
(
link
.
url
);
}
catch
(
err
)
{
// ignore
}
...
...
src/vs/workbench/services/extensions/common/extensionHostMain.ts
浏览文件 @
21247028
...
...
@@ -6,7 +6,7 @@
import
{
timeout
}
from
'
vs/base/common/async
'
;
import
*
as
errors
from
'
vs/base/common/errors
'
;
import
{
DisposableStore
}
from
'
vs/base/common/lifecycle
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
URI
,
setUriThrowOnMissingScheme
}
from
'
vs/base/common/uri
'
;
import
{
IURITransformer
}
from
'
vs/base/common/uriIpc
'
;
import
{
IMessagePassingProtocol
}
from
'
vs/base/parts/ipc/common/ipc
'
;
import
{
IInitData
,
MainContext
,
MainThreadConsoleShape
}
from
'
vs/workbench/api/common/extHost.protocol
'
;
...
...
@@ -22,6 +22,10 @@ import { IExtHostRpcService, ExtHostRpcService } from 'vs/workbench/api/common/e
import
{
IURITransformerService
,
URITransformerService
}
from
'
vs/workbench/api/common/extHostUriTransformerService
'
;
import
{
IExtHostExtensionService
,
IHostUtils
}
from
'
vs/workbench/api/common/extHostExtensionService
'
;
// we don't (yet) throw when extensions parse
// uris that have no scheme
setUriThrowOnMissingScheme
(
false
);
export
interface
IExitFn
{
(
code
?:
number
):
any
;
}
...
...
src/vs/workbench/test/electron-browser/api/extHostTypeConverter.test.ts
浏览文件 @
21247028
...
...
@@ -22,13 +22,11 @@ suite('ExtHostTypeConverter', function () {
data
=
MarkdownString
.
from
(
'
Hello [link](foo)
'
);
assert
.
equal
(
data
.
value
,
'
Hello [link](foo)
'
);
assert
.
equal
(
size
(
data
.
uris
!
),
1
);
assert
.
ok
(
!!
data
.
uris
!
[
'
foo
'
]);
assert
.
equal
(
isEmptyObject
(
data
.
uris
),
true
);
// no scheme, no uri
data
=
MarkdownString
.
from
(
'
Hello [link](www.noscheme.bad)
'
);
assert
.
equal
(
data
.
value
,
'
Hello [link](www.noscheme.bad)
'
);
assert
.
equal
(
size
(
data
.
uris
!
),
1
);
assert
.
ok
(
!!
data
.
uris
!
[
'
www.noscheme.bad
'
]);
assert
.
equal
(
isEmptyObject
(
data
.
uris
),
true
);
// no scheme, no uri
data
=
MarkdownString
.
from
(
'
Hello [link](foo:path)
'
);
assert
.
equal
(
data
.
value
,
'
Hello [link](foo:path)
'
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录