Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
0edcdab8
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,体验更适合开发者的 AI 搜索 >>
提交
0edcdab8
编写于
2月 01, 2018
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
undo workspace edit changes for now, #10659
上级
cfea9719
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
105 addition
and
144 deletion
+105
-144
extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts
...vscode-api-tests/src/singlefolder-tests/workspace.test.ts
+36
-36
src/vs/vscode.d.ts
src/vs/vscode.d.ts
+0
-40
src/vs/workbench/api/node/extHostTextEditors.ts
src/vs/workbench/api/node/extHostTextEditors.ts
+3
-3
src/vs/workbench/api/node/extHostTypeConverters.ts
src/vs/workbench/api/node/extHostTypeConverters.ts
+7
-7
src/vs/workbench/api/node/extHostTypes.ts
src/vs/workbench/api/node/extHostTypes.ts
+26
-25
src/vs/workbench/test/electron-browser/api/extHostTypes.test.ts
.../workbench/test/electron-browser/api/extHostTypes.test.ts
+33
-33
未找到文件。
extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts
浏览文件 @
0edcdab8
...
...
@@ -523,42 +523,42 @@ suite('workspace-namespace', () => {
});
test
(
'
applyEdit should fail when editing deleted resource
'
,
async
()
=>
{
const
resource
=
await
createRandomFile
();
const
edit
=
new
vscode
.
WorkspaceEdit
();
edit
.
deleteResource
(
resource
);
try
{
edit
.
insert
(
resource
,
new
vscode
.
Position
(
0
,
0
),
''
);
assert
.
fail
(
false
,
'
Should disallow edit of deleted resource
'
);
}
catch
{
// noop
}
});
test
(
'
applyEdit should fail when renaming deleted resource
'
,
async
()
=>
{
const
resource
=
await
createRandomFile
();
// test('applyEdit should fail when editing deleted resource', async () => {
// const resource = await createRandomFile();
// const edit = new vscode.WorkspaceEdit();
// edit.deleteResource(resource);
// try {
// edit.insert(resource, new vscode.Position(0, 0), '');
// assert.fail(false, 'Should disallow edit of deleted resource');
// } catch {
// // noop
// }
// });
const
edit
=
new
vscode
.
WorkspaceEdit
();
edit
.
deleteResource
(
resource
);
try
{
edit
.
renameResource
(
resource
,
resource
);
assert
.
fail
(
false
,
'
Should disallow rename of deleted resource
'
);
}
catch
{
// noop
}
});
// test('applyEdit should fail when renaming deleted resource', async () => {
// const resource = await createRandomFile();
// const edit = new vscode.WorkspaceEdit();
// edit.deleteResource(resource);
// try {
// edit.renameResource(resource, resource);
// assert.fail(false, 'Should disallow rename of deleted resource');
// } catch {
// // noop
// }
// });
test
(
'
applyEdit should fail when editing renamed from resource
'
,
async
()
=>
{
const
resource
=
await
createRandomFile
();
const
newResource
=
vscode
.
Uri
.
parse
(
resource
.
fsPath
+
'
.1
'
);
const
edit
=
new
vscode
.
WorkspaceEdit
();
edit
.
renameResource
(
resource
,
newResource
);
try
{
edit
.
insert
(
resource
,
new
vscode
.
Position
(
0
,
0
),
''
);
assert
.
fail
(
false
,
'
Should disallow editing renamed file
'
);
}
catch
{
// noop
}
});
//
test('applyEdit should fail when editing renamed from resource', async () => {
//
const resource = await createRandomFile();
//
const newResource = vscode.Uri.parse(resource.fsPath + '.1');
//
const edit = new vscode.WorkspaceEdit();
//
edit.renameResource(resource, newResource);
//
try {
//
edit.insert(resource, new vscode.Position(0, 0), '');
//
assert.fail(false, 'Should disallow editing renamed file');
//
} catch {
//
// noop
//
}
//
});
});
src/vs/vscode.d.ts
浏览文件 @
0edcdab8
...
...
@@ -2582,46 +2582,6 @@ declare module 'vscode' {
* @return A shallow copy of `[Uri, TextEdit[]]`-tuples.
*/
entries
():
[
Uri
,
TextEdit
[]][];
/**
* Renames a given resource in the workspace.
*
* @param from Uri of current resource.
* @param to Uri of renamed resource.
*/
renameResource
(
from
:
Uri
,
to
:
Uri
):
void
;
/**
* Create a new resource in the workspace.
*
* @param uri Uri of resource to create.
*/
createResource
(
uri
:
Uri
):
void
;
/**
* Delete a given resource in the workspace.
*
* @param uri Uri of resource to delete.
*/
deleteResource
(
uri
:
Uri
):
void
;
/**
* Get the resource edits for this workspace edit.
*
* @returns A shallow copy of uri-tuples in which a rename-edit
* is represented as `[from, to]`, a delete-operation as `[from, null]`,
* and a create-operation as `[null, to]`;
*/
resourceEdits
():
[
Uri
,
Uri
][];
/**
* Get all edits, textual changes and file changes. The order is the order
* in which edits have been added to this workspace edits. Textuals edits
* are grouped and the first textual edit for a resource matters.
*
* @returns A shallow copy of all changes.
*/
allEntries
():
([
Uri
,
TextEdit
[]]
|
[
Uri
,
Uri
])[];
}
/**
...
...
src/vs/workbench/api/node/extHostTextEditors.ts
浏览文件 @
0edcdab8
...
...
@@ -94,7 +94,7 @@ export class ExtHostEditors implements ExtHostEditorsShape {
const
dto
:
WorkspaceEditDto
=
{
edits
:
[]
};
for
(
let
entry
of
edit
.
allE
ntries
())
{
for
(
let
entry
of
edit
.
e
ntries
())
{
let
[
uri
,
uriOrEdits
]
=
entry
;
if
(
Array
.
isArray
(
uriOrEdits
))
{
let
doc
=
this
.
_extHostDocumentsAndEditors
.
getDocument
(
uri
.
toString
());
...
...
@@ -103,8 +103,8 @@ export class ExtHostEditors implements ExtHostEditorsShape {
modelVersionId
:
doc
&&
doc
.
version
,
edits
:
uriOrEdits
.
map
(
TypeConverters
.
TextEdit
.
from
)
});
}
else
{
dto
.
edits
.
push
({
oldUri
:
uri
,
newUri
:
uriOrEdits
});
//
} else {
//
dto.edits.push({ oldUri: uri, newUri: uriOrEdits });
}
}
...
...
src/vs/workbench/api/node/extHostTypeConverters.ts
浏览文件 @
0edcdab8
...
...
@@ -20,7 +20,7 @@ import { ISelection } from 'vs/editor/common/core/selection';
import
*
as
htmlContent
from
'
vs/base/common/htmlContent
'
;
import
{
IRelativePattern
}
from
'
vs/base/common/glob
'
;
import
{
LanguageSelector
,
LanguageFilter
}
from
'
vs/editor/common/modes/languageSelector
'
;
import
{
WorkspaceEditDto
,
ResourceTextEditDto
,
ResourceFileEditDto
}
from
'
vs/workbench/api/node/extHost.protocol
'
;
import
{
WorkspaceEditDto
,
ResourceTextEditDto
}
from
'
vs/workbench/api/node/extHost.protocol
'
;
export
interface
PositionLike
{
line
:
number
;
...
...
@@ -232,7 +232,7 @@ export namespace WorkspaceEdit {
const
result
:
modes
.
WorkspaceEdit
=
{
edits
:
[]
};
for
(
const
entry
of
value
.
allE
ntries
())
{
for
(
const
entry
of
value
.
e
ntries
())
{
const
[
uri
,
uriOrEdits
]
=
entry
;
if
(
Array
.
isArray
(
uriOrEdits
))
{
// text edits
...
...
@@ -253,11 +253,11 @@ export namespace WorkspaceEdit {
URI
.
revive
((
<
ResourceTextEditDto
>
edit
).
resource
),
<
types
.
TextEdit
[]
>
(
<
ResourceTextEditDto
>
edit
).
edits
.
map
(
TextEdit
.
to
)
);
}
else
{
result
.
renameResource
(
URI
.
revive
((
<
ResourceFileEditDto
>
edit
).
oldUri
),
URI
.
revive
((
<
ResourceFileEditDto
>
edit
).
newUri
)
);
//
} else {
//
result.renameResource(
//
URI.revive((<ResourceFileEditDto>edit).oldUri),
//
URI.revive((<ResourceFileEditDto>edit).newUri)
//
);
}
}
return
result
;
...
...
src/vs/workbench/api/node/extHostTypes.ts
浏览文件 @
0edcdab8
...
...
@@ -499,21 +499,21 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit {
private
_resourceEdits
:
{
seq
:
number
,
from
:
URI
,
to
:
URI
}[]
=
[];
private
_textEdits
=
new
Map
<
string
,
{
seq
:
number
,
uri
:
URI
,
edits
:
TextEdit
[]
}
>
();
createResource
(
uri
:
vscode
.
Uri
):
void
{
this
.
renameResource
(
undefined
,
uri
);
}
//
createResource(uri: vscode.Uri): void {
//
this.renameResource(undefined, uri);
//
}
deleteResource
(
uri
:
vscode
.
Uri
):
void
{
this
.
renameResource
(
uri
,
undefined
);
}
//
deleteResource(uri: vscode.Uri): void {
//
this.renameResource(uri, undefined);
//
}
renameResource
(
from
:
vscode
.
Uri
,
to
:
vscode
.
Uri
):
void
{
this
.
_resourceEdits
.
push
({
seq
:
this
.
_seqPool
++
,
from
,
to
});
}
//
renameResource(from: vscode.Uri, to: vscode.Uri): void {
//
this._resourceEdits.push({ seq: this._seqPool++, from, to });
//
}
resourceEdits
():
[
vscode
.
Uri
,
vscode
.
Uri
][]
{
return
this
.
_resourceEdits
.
map
(({
from
,
to
})
=>
(
<
[
vscode
.
Uri
,
vscode
.
Uri
]
>
[
from
,
to
]));
}
//
resourceEdits(): [vscode.Uri, vscode.Uri][] {
//
return this._resourceEdits.map(({ from, to }) => (<[vscode.Uri, vscode.Uri]>[from, to]));
//
}
replace
(
uri
:
URI
,
range
:
Range
,
newText
:
string
):
void
{
let
edit
=
new
TextEdit
(
range
,
newText
);
...
...
@@ -566,19 +566,20 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit {
}
allEntries
():
([
URI
,
TextEdit
[]]
|
[
URI
,
URI
])[]
{
// use the 'seq' the we have assigned when inserting
// the operation and use that order in the resulting
// array
const
res
:
([
URI
,
TextEdit
[]]
|
[
URI
,
URI
])[]
=
[];
this
.
_textEdits
.
forEach
(
value
=>
{
const
{
seq
,
uri
,
edits
}
=
value
;
res
[
seq
]
=
[
uri
,
edits
];
});
this
.
_resourceEdits
.
forEach
(
value
=>
{
const
{
seq
,
from
,
to
}
=
value
;
res
[
seq
]
=
[
from
,
to
];
});
return
res
;
return
this
.
entries
();
// // use the 'seq' the we have assigned when inserting
// // the operation and use that order in the resulting
// // array
// const res: ([URI, TextEdit[]] | [URI, URI])[] = [];
// this._textEdits.forEach(value => {
// const { seq, uri, edits } = value;
// res[seq] = [uri, edits];
// });
// this._resourceEdits.forEach(value => {
// const { seq, from, to } = value;
// res[seq] = [from, to];
// });
// return res;
}
get
size
():
number
{
...
...
src/vs/workbench/test/electron-browser/api/extHostTypes.test.ts
浏览文件 @
0edcdab8
...
...
@@ -375,39 +375,39 @@ suite('ExtHostTypes', function () {
// }
// });
test
(
'
WorkspaceEdit - keep order of text and file changes
'
,
function
()
{
const
edit
=
new
types
.
WorkspaceEdit
();
edit
.
replace
(
URI
.
parse
(
'
foo:a
'
),
new
types
.
Range
(
1
,
1
,
1
,
1
),
'
foo
'
);
edit
.
renameResource
(
URI
.
parse
(
'
foo:a
'
),
URI
.
parse
(
'
foo:b
'
));
edit
.
replace
(
URI
.
parse
(
'
foo:a
'
),
new
types
.
Range
(
2
,
1
,
2
,
1
),
'
bar
'
);
edit
.
replace
(
URI
.
parse
(
'
foo:b
'
),
new
types
.
Range
(
3
,
1
,
3
,
1
),
'
bazz
'
);
const
all
=
edit
.
allEntries
();
assert
.
equal
(
all
.
length
,
3
);
function
isFileChange
(
thing
:
[
URI
,
types
.
TextEdit
[]]
|
[
URI
,
URI
]):
thing
is
[
URI
,
URI
]
{
const
[
f
,
s
]
=
thing
;
return
URI
.
isUri
(
f
)
&&
URI
.
isUri
(
s
);
}
function
isTextChange
(
thing
:
[
URI
,
types
.
TextEdit
[]]
|
[
URI
,
URI
]):
thing
is
[
URI
,
types
.
TextEdit
[]]
{
const
[
f
,
s
]
=
thing
;
return
URI
.
isUri
(
f
)
&&
Array
.
isArray
(
s
);
}
const
[
first
,
second
,
third
]
=
all
;
assert
.
equal
(
first
[
0
].
toString
(),
'
foo:a
'
);
assert
.
ok
(
!
isFileChange
(
first
));
assert
.
ok
(
isTextChange
(
first
)
&&
first
[
1
].
length
===
2
);
assert
.
equal
(
second
[
0
].
toString
(),
'
foo:a
'
);
assert
.
ok
(
isFileChange
(
second
));
assert
.
equal
(
third
[
0
].
toString
(),
'
foo:b
'
);
assert
.
ok
(
!
isFileChange
(
third
));
assert
.
ok
(
isTextChange
(
third
)
&&
third
[
1
].
length
===
1
);
});
//
test('WorkspaceEdit - keep order of text and file changes', function () {
//
const edit = new types.WorkspaceEdit();
//
edit.replace(URI.parse('foo:a'), new types.Range(1, 1, 1, 1), 'foo');
//
edit.renameResource(URI.parse('foo:a'), URI.parse('foo:b'));
//
edit.replace(URI.parse('foo:a'), new types.Range(2, 1, 2, 1), 'bar');
//
edit.replace(URI.parse('foo:b'), new types.Range(3, 1, 3, 1), 'bazz');
//
const all = edit.allEntries();
//
assert.equal(all.length, 3);
//
function isFileChange(thing: [URI, types.TextEdit[]] | [URI, URI]): thing is [URI, URI] {
//
const [f, s] = thing;
//
return URI.isUri(f) && URI.isUri(s);
//
}
//
function isTextChange(thing: [URI, types.TextEdit[]] | [URI, URI]): thing is [URI, types.TextEdit[]] {
//
const [f, s] = thing;
//
return URI.isUri(f) && Array.isArray(s);
//
}
//
const [first, second, third] = all;
//
assert.equal(first[0].toString(), 'foo:a');
//
assert.ok(!isFileChange(first));
//
assert.ok(isTextChange(first) && first[1].length === 2);
//
assert.equal(second[0].toString(), 'foo:a');
//
assert.ok(isFileChange(second));
//
assert.equal(third[0].toString(), 'foo:b');
//
assert.ok(!isFileChange(third));
//
assert.ok(isTextChange(third) && third[1].length === 1);
//
});
test
(
'
DocumentLink
'
,
function
()
{
assert
.
throws
(()
=>
new
types
.
DocumentLink
(
null
,
null
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录