Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
e15fbab4
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e15fbab4
编写于
3月 17, 2017
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fs - more avoidance of toLowerCase()
上级
d3d0b7a8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
177 addition
and
43 deletion
+177
-43
src/vs/platform/files/common/files.ts
src/vs/platform/files/common/files.ts
+32
-7
src/vs/platform/files/test/files.test.ts
src/vs/platform/files/test/files.test.ts
+145
-36
未找到文件。
src/vs/platform/files/common/files.ts
浏览文件 @
e15fbab4
...
...
@@ -334,15 +334,23 @@ export function isEqual(resourceOrPathA: string | URI, resourceOrPathB: string |
}
export
function
isParent
(
path
:
string
,
candidate
:
string
):
boolean
{
if
(
!
path
||
!
candidate
||
path
===
candidate
)
{
return
false
;
}
if
(
candidate
.
length
>
path
.
length
)
{
return
false
;
}
if
(
candidate
.
charAt
(
candidate
.
length
-
1
)
!==
paths
.
nativeSep
)
{
candidate
+=
paths
.
nativeSep
;
}
if
(
!
isLinux
)
{
return
beginsWithIgnoreCase
(
path
,
candidate
+
paths
.
nativeSep
);
return
beginsWithIgnoreCase
(
path
,
candidate
);
}
return
path
.
indexOf
(
candidate
+
paths
.
nativeSep
)
===
0
;
return
path
.
indexOf
(
candidate
)
===
0
;
}
export
function
isEqualOrParent
(
path
:
string
,
candidate
:
string
):
boolean
{
...
...
@@ -350,20 +358,37 @@ export function isEqualOrParent(path: string, candidate: string): boolean {
return
true
;
}
if
(
!
path
||
!
candidate
)
{
return
false
;
}
if
(
candidate
.
length
>
path
.
length
)
{
return
false
;
}
if
(
!
isLinux
)
{
path
=
path
.
toLowerCase
();
candidate
=
candidate
.
toLowerCase
();
const
beginsWith
=
beginsWithIgnoreCase
(
path
,
candidate
);
if
(
!
beginsWith
)
{
return
false
;
}
if
(
candidate
.
length
===
path
.
length
)
{
return
true
;
// same path, different casing
}
if
(
path
===
candidate
)
{
return
true
;
let
sepOffset
=
candidate
.
length
;
if
(
candidate
.
charAt
(
candidate
.
length
-
1
)
===
paths
.
nativeSep
)
{
sepOffset
--
;
// adjust the expected sep offset in case our candidate already ends in separator character
}
return
path
.
charAt
(
sepOffset
)
===
paths
.
nativeSep
;
}
if
(
candidate
.
charAt
(
candidate
.
length
-
1
)
!==
paths
.
nativeSep
)
{
candidate
+=
paths
.
nativeSep
;
}
return
path
.
indexOf
(
candidate
+
paths
.
nativeSep
)
===
0
;
return
path
.
indexOf
(
candidate
)
===
0
;
}
export
function
indexOf
(
path
:
string
,
candidate
:
string
):
number
{
...
...
src/vs/platform/files/test/files.test.ts
浏览文件 @
e15fbab4
...
...
@@ -47,82 +47,191 @@ suite('Files', () => {
assert
.
strictEqual
(
true
,
r1
.
gotDeleted
());
});
function
testIsEqual
(
testMethod
:
(
pA
:
string
,
pB
:
string
)
=>
boolean
):
void
{
// corner cases
assert
(
testMethod
(
''
,
''
));
assert
(
!
testMethod
(
null
,
''
));
assert
(
!
testMethod
(
void
0
,
''
));
// basics (string)
assert
(
testMethod
(
'
/
'
,
'
/
'
));
assert
(
testMethod
(
'
/some
'
,
'
/some
'
));
assert
(
testMethod
(
'
/some/path
'
,
'
/some/path
'
));
assert
(
testMethod
(
'
c:
\\
'
,
'
c:
\\
'
));
assert
(
testMethod
(
'
c:
\\
some
'
,
'
c:
\\
some
'
));
assert
(
testMethod
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
\\
path
'
));
assert
(
testMethod
(
'
/someöäü/path
'
,
'
/someöäü/path
'
));
assert
(
testMethod
(
'
c:
\\
someöäü
\\
path
'
,
'
c:
\\
someöäü
\\
path
'
));
assert
(
!
testMethod
(
'
/some/path
'
,
'
/some/other/path
'
));
assert
(
!
testMethod
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
\\
other
\\
path
'
));
assert
(
!
testMethod
(
'
c:
\\
some
\\
path
'
,
'
d:
\\
some
\\
path
'
));
// case insensitive (unless isLinux)
if
(
isLinux
)
{
assert
(
!
testMethod
(
'
/some/path
'
,
'
/some/PATH
'
));
assert
(
!
testMethod
(
'
/some/path
'
,
'
/some/other/PATH
'
));
}
else
{
assert
(
testMethod
(
'
/some/path
'
,
'
/some/PATH
'
));
assert
(
testMethod
(
'
/someöäü/path
'
,
'
/someÖÄÜ/PATH
'
));
assert
(
testMethod
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
\\
PATH
'
));
assert
(
testMethod
(
'
c:
\\
someöäü
\\
path
'
,
'
c:
\\
someÖÄÜ
\\
PATH
'
));
assert
(
testMethod
(
'
c:
\\
some
\\
path
'
,
'
C:
\\
some
\\
PATH
'
));
}
}
test
(
'
isEqual
'
,
function
()
{
assert
(
isEqual
(
'
/some/path
'
,
'
/some/path
'
));
testIsEqual
(
isEqual
);
// basics (uris)
assert
(
isEqual
(
URI
.
file
(
'
/some/path
'
),
URI
.
file
(
'
/some/path
'
)));
assert
(
isEqual
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
\\
path
'
));
assert
(
isEqual
(
URI
.
file
(
'
c:
\\
some
\\
path
'
),
URI
.
file
(
'
c:
\\
some
\\
path
'
)));
assert
(
!
isEqual
(
'
/some/path
'
,
'
/some/other/path
'
));
assert
(
isEqual
(
URI
.
file
(
'
/someöäü/path
'
),
URI
.
file
(
'
/someöäü/path
'
)));
assert
(
isEqual
(
URI
.
file
(
'
c:
\\
someöäü
\\
path
'
),
URI
.
file
(
'
c:
\\
someöäü
\\
path
'
)));
assert
(
!
isEqual
(
URI
.
file
(
'
/some/path
'
),
URI
.
file
(
'
/some/other/path
'
)));
assert
(
!
isEqual
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
\\
other
\\
path
'
));
assert
(
!
isEqual
(
URI
.
file
(
'
c:
\\
some
\\
path
'
),
URI
.
file
(
'
c:
\\
some
\\
other
\\
path
'
)));
assert
(
isEqual
(
URI
.
parse
(
'
some://cool/uri
'
),
URI
.
parse
(
'
some://cool/uri
'
)));
assert
(
!
isEqual
(
URI
.
parse
(
'
some://cool/uri
'
),
URI
.
parse
(
'
some://other/uri
'
)));
// case insensitive (unless isLinux)
if
(
isLinux
)
{
assert
(
!
isEqual
(
'
/some/path
'
,
'
/some/PATH
'
));
assert
(
!
isEqual
(
URI
.
file
(
'
/some/path
'
),
URI
.
file
(
'
/some/PATH
'
)));
}
else
{
assert
(
isEqual
(
URI
.
file
(
'
/some/path
'
),
URI
.
file
(
'
/some/PATH
'
)));
assert
(
isEqual
(
URI
.
file
(
'
/someöäü/path
'
),
URI
.
file
(
'
/someÖÄÜ/PATH
'
)));
assert
(
isEqual
(
URI
.
file
(
'
c:
\\
some
\\
path
'
),
URI
.
file
(
'
c:
\\
some
\\
PATH
'
)));
assert
(
isEqual
(
URI
.
file
(
'
c:
\\
someöäü
\\
path
'
),
URI
.
file
(
'
c:
\\
someÖÄÜ
\\
PATH
'
)));
assert
(
isEqual
(
URI
.
file
(
'
c:
\\
some
\\
path
'
),
URI
.
file
(
'
C:
\\
some
\\
PATH
'
)));
}
assert
(
isEqual
(
URI
.
parse
(
'
some://cool/uri
'
),
URI
.
parse
(
'
some://cool/uri
'
)));
assert
(
!
isEqual
(
URI
.
parse
(
'
some://cool/uri
'
),
URI
.
parse
(
'
some://other/uri
'
)));
});
test
(
'
isParent
'
,
function
()
{
if
(
isWindows
)
{
assert
(
!
isParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
\\
path
'
));
assert
(
isParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
'
));
assert
(
isParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
'
));
assert
(
isParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
\\
'
));
assert
(
isParent
(
'
c:
\\
someöäü
\\
path
'
,
'
c:
\\
someöäü
'
));
assert
(
isParent
(
'
c:
\\
someöäü
\\
path
'
,
'
c:
\\
someöäü
\\
'
));
assert
(
isParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
bar
'
));
assert
(
isParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
bar
\\
'
));
assert
(
isParent
(
'
c:
\\
some
\\
path
'
,
'
C:
\\
'
));
assert
(
isParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
SOME
'
));
assert
(
isParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
SOME
\\
'
));
assert
(
!
isParent
(
'
c:
\\
some
\\
path
'
,
'
d:
\\
'
));
assert
(
!
isParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
\\
path
'
));
assert
(
!
isParent
(
'
c:
\\
some
\\
path
'
,
'
d:
\\
some
\\
path
'
));
assert
(
!
isParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
barr
'
));
assert
(
!
isParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
bar
\\
test
'
));
}
if
(
isMacintosh
)
{
assert
(
!
isParent
(
'
/some/path
'
,
'
/some/path
'
));
assert
(
!
isParent
(
'
/some/path
'
,
'
/some/other/path
'
));
assert
(
isParent
(
'
/some/path
'
,
'
/
'
));
assert
(
isParent
(
'
/some/path
'
,
'
/some
'
));
assert
(
isParent
(
'
/some/path
'
,
'
/some/
'
));
assert
(
isParent
(
'
/someöäü/path
'
,
'
/someöäü
'
));
assert
(
isParent
(
'
/someöäü/path
'
,
'
/someöäü/
'
));
assert
(
isParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar
'
));
assert
(
isParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar/
'
));
assert
(
isParent
(
'
/some/path
'
,
'
/SOME
'
));
assert
(
isParent
(
'
/some/path
'
,
'
/SOME/
'
));
assert
(
isParent
(
'
/someöäü/path
'
,
'
/SOMEÖÄÜ
'
));
assert
(
isParent
(
'
/someöäü/path
'
,
'
/SOMEÖÄÜ/
'
));
assert
(
!
isParent
(
'
/some/path
'
,
'
/some/path
'
));
assert
(
!
isParent
(
'
/foo/bar/test.ts
'
,
'
/foo/barr
'
));
assert
(
!
isParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar/test
'
));
}
if
(
isLinux
)
{
assert
(
isParent
(
'
/some/path
'
,
'
/
'
));
assert
(
isParent
(
'
/some/path
'
,
'
/some
'
));
assert
(
isParent
(
'
/some/path
'
,
'
/some/
'
));
assert
(
isParent
(
'
/someöäü/path
'
,
'
/someöäü
'
));
assert
(
isParent
(
'
/someöäü/path
'
,
'
/someöäü/
'
));
assert
(
isParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar
'
));
assert
(
isParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar/
'
));
assert
(
!
isParent
(
'
/some/path
'
,
'
/SOME
'
));
}
else
{
if
(
isMacintosh
)
{
assert
(
isParent
(
'
/some/path
'
,
'
/SOME
'
));
}
if
(
isWindows
)
{
assert
(
isParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
SOME
'
));
}
assert
(
!
isParent
(
'
/some/path
'
,
'
/some/path
'
));
assert
(
!
isParent
(
'
/foo/bar/test.ts
'
,
'
/foo/barr
'
));
assert
(
!
isParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar/test
'
));
}
});
test
(
'
isEqualOrParent
'
,
function
()
{
// same assertions apply as with isEqual()
testIsEqual
(
isEqualOrParent
);
if
(
isWindows
)
{
assert
(
isEqualOrParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
\\
path
'
));
assert
(
isEqualOrParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
'
));
assert
(
isEqualOrParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
'
));
assert
(
isEqualOrParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
\\
'
));
assert
(
isEqualOrParent
(
'
c:
\\
someöäü
\\
path
'
,
'
c:
\\
someöäü
'
));
assert
(
isEqualOrParent
(
'
c:
\\
someöäü
\\
path
'
,
'
c:
\\
someöäü
\\
'
));
assert
(
isEqualOrParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
bar
'
));
assert
(
!
isEqualOrParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
barr
'
));
assert
(
isEqualOrParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
bar
\\
'
));
assert
(
isEqualOrParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
some
\\
path
'
));
assert
(
isEqualOrParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
bar
\\
test.ts
'
));
assert
(
isEqualOrParent
(
'
c:
\\
some
\\
path
'
,
'
C:
\\
'
));
assert
(
isEqualOrParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
SOME
'
));
assert
(
isEqualOrParent
(
'
c:
\\
some
\\
path
'
,
'
c:
\\
SOME
\\
'
));
assert
(
!
isEqualOrParent
(
'
c:
\\
some
\\
path
'
,
'
d:
\\
'
));
assert
(
!
isEqualOrParent
(
'
c:
\\
some
\\
path
'
,
'
d:
\\
some
\\
path
'
));
assert
(
!
isEqualOrParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
barr
'
));
assert
(
!
isEqualOrParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
bar
\\
test
'
));
assert
(
!
isEqualOrParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
bar
\\
test.
'
));
}
else
{
assert
(
isEqualOrParent
(
'
foo/bar/test.ts
'
,
'
foo
'
));
assert
(
isEqualOrParent
(
'
/
'
,
'
/
'
));
assert
(
isEqualOrParent
(
'
/foo
'
,
'
/foo
'
));
assert
(
!
isEqualOrParent
(
'
/foo
'
,
'
/f
'
));
assert
(
!
isEqualOrParent
(
'
/foo
'
,
'
/foo/b
'
));
assert
(
isEqualOrParent
(
'
foo/bar/test.ts
'
,
'
foo/bar
'
));
assert
(
!
isEqualOrParent
(
'
foo/bar/test.ts
'
,
'
/foo/bar
'
));
assert
(
!
isEqualOrParent
(
'
foo/bar/test.ts
'
,
'
foo/barr
'
));
assert
(
isEqualOrParent
(
'
foo/bar/test.ts
'
,
'
foo/bar/test.ts
'
));
assert
(
!
isEqualOrParent
(
'
foo/bar/test.ts
'
,
'
foo/bar/test
'
));
assert
(
!
isEqualOrParent
(
'
foo/bar/test.ts
'
,
'
foo/bar/test.
'
));
assert
(
!
isEqualOrParent
(
'
c:
\\
foo
\\
bar
\\
test.ts
'
,
'
c:
\\
foo
\\
BAR
\\
test.
'
));
}
if
(
!
isLinux
)
{
assert
(
isEqualOrParent
(
'
/foo
'
,
'
/fOO
'
));
assert
(
isEqualOrParent
(
'
/fOO
'
,
'
/foo
'
));
assert
(
isEqualOrParent
(
'
foo/bar/test.ts
'
,
'
foo/BAR/test.ts
'
));
if
(
isMacintosh
)
{
assert
(
isEqualOrParent
(
'
/some/path
'
,
'
/
'
));
assert
(
isEqualOrParent
(
'
/some/path
'
,
'
/some
'
));
assert
(
isEqualOrParent
(
'
/some/path
'
,
'
/some/
'
));
assert
(
isEqualOrParent
(
'
/someöäü/path
'
,
'
/someöäü
'
));
assert
(
isEqualOrParent
(
'
/someöäü/path
'
,
'
/someöäü/
'
));
assert
(
isEqualOrParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar
'
));
assert
(
isEqualOrParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar/
'
));
assert
(
isEqualOrParent
(
'
/some/path
'
,
'
/some/path
'
));
assert
(
isEqualOrParent
(
'
/some/path
'
,
'
/SOME
'
));
assert
(
isEqualOrParent
(
'
/some/path
'
,
'
/SOME/
'
));
assert
(
isEqualOrParent
(
'
/someöäü/path
'
,
'
/SOMEÖÄÜ
'
));
assert
(
isEqualOrParent
(
'
/someöäü/path
'
,
'
/SOMEÖÄÜ/
'
));
assert
(
!
isEqualOrParent
(
'
/foo/bar/test.ts
'
,
'
/foo/barr
'
));
assert
(
!
isEqualOrParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar/test
'
));
assert
(
!
isEqualOrParent
(
'
foo/bar/test.ts
'
,
'
foo/bar/test.
'
));
assert
(
!
isEqualOrParent
(
'
foo/bar/test.ts
'
,
'
foo/BAR/test.
'
));
}
if
(
isLinux
)
{
assert
(
isEqualOrParent
(
'
/some/path
'
,
'
/
'
));
assert
(
isEqualOrParent
(
'
/some/path
'
,
'
/some
'
));
assert
(
isEqualOrParent
(
'
/some/path
'
,
'
/some/
'
));
assert
(
isEqualOrParent
(
'
/someöäü/path
'
,
'
/someöäü
'
));
assert
(
isEqualOrParent
(
'
/someöäü/path
'
,
'
/someöäü/
'
));
assert
(
isEqualOrParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar
'
));
assert
(
isEqualOrParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar/
'
));
assert
(
isEqualOrParent
(
'
/some/path
'
,
'
/some/path
'
));
assert
(
!
isEqualOrParent
(
'
/some/path
'
,
'
/SOME
'
));
assert
(
!
isEqualOrParent
(
'
/foo/bar/test.ts
'
,
'
/foo/barr
'
));
assert
(
!
isEqualOrParent
(
'
/foo/bar/test.ts
'
,
'
/foo/bar/test
'
));
}
});
test
(
'
indexOf
'
,
function
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录