Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
fa69b4e7
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,发现更多精彩内容 >>
提交
fa69b4e7
编写于
5月 23, 2019
作者:
P
Peng Lyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Show context for diff view of merge conflict and introduce compareAll.
上级
7b078e11
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
83 addition
and
10 deletion
+83
-10
extensions/merge-conflict/package.json
extensions/merge-conflict/package.json
+11
-0
extensions/merge-conflict/package.nls.json
extensions/merge-conflict/package.nls.json
+3
-1
extensions/merge-conflict/src/codelensProvider.ts
extensions/merge-conflict/src/codelensProvider.ts
+7
-1
extensions/merge-conflict/src/commandHandler.ts
extensions/merge-conflict/src/commandHandler.ts
+29
-3
extensions/merge-conflict/src/contentProvider.ts
extensions/merge-conflict/src/contentProvider.ts
+33
-5
未找到文件。
extensions/merge-conflict/package.json
浏览文件 @
fa69b4e7
...
...
@@ -81,6 +81,12 @@
"title"
:
"%command.compare%"
,
"original"
:
"Compare Current Conflict"
,
"command"
:
"merge-conflict.compare"
},
{
"category"
:
"%command.category%"
,
"title"
:
"%command.compareAll%"
,
"original"
:
"Compare All Conflict in Current Editor"
,
"command"
:
"merge-conflict.compareAll"
}
],
"menus"
:
{
...
...
@@ -114,6 +120,11 @@
"type"
:
"boolean"
,
"description"
:
"%config.autoNavigateNextConflictEnabled%"
,
"default"
:
false
},
"merge-conflict.diffViewContext"
:
{
"type"
:
"number"
,
"description"
:
"%config.diffViewContext%"
,
"default"
:
0
}
}
}
...
...
extensions/merge-conflict/package.nls.json
浏览文件 @
fa69b4e7
...
...
@@ -12,8 +12,10 @@
"command.next"
:
"Next Conflict"
,
"command.previous"
:
"Previous Conflict"
,
"command.compare"
:
"Compare Current Conflict"
,
"command.compareAll"
:
"Compare All Conflict in Current Editor"
,
"config.title"
:
"Merge Conflict"
,
"config.autoNavigateNextConflictEnabled"
:
"Whether to automatically navigate to the next merge conflict after resolving a merge conflict."
,
"config.codeLensEnabled"
:
"Create a Code Lens for merge conflict blocks within editor."
,
"config.decoratorsEnabled"
:
"Create decorators for merge conflict blocks within editor."
"config.decoratorsEnabled"
:
"Create decorators for merge conflict blocks within editor."
,
"config.diffViewContext"
:
"Controls how many unchanged lines around the merge conflict should be displayed in the diff view."
}
\ No newline at end of file
extensions/merge-conflict/src/codelensProvider.ts
浏览文件 @
fa69b4e7
...
...
@@ -85,11 +85,17 @@ export default class MergeConflictCodeLensProvider implements vscode.CodeLensPro
arguments
:
[
conflict
]
};
let
diffAllCommand
:
vscode
.
Command
=
{
command
:
'
merge-conflict.compareAll
'
,
title
:
localize
(
'
compareAllChanges
'
,
'
Compare All Changes
'
)
};
items
.
push
(
new
vscode
.
CodeLens
(
conflict
.
range
,
acceptCurrentCommand
),
new
vscode
.
CodeLens
(
conflict
.
range
.
with
(
conflict
.
range
.
start
.
with
({
character
:
conflict
.
range
.
start
.
character
+
1
})),
acceptIncomingCommand
),
new
vscode
.
CodeLens
(
conflict
.
range
.
with
(
conflict
.
range
.
start
.
with
({
character
:
conflict
.
range
.
start
.
character
+
2
})),
acceptBothCommand
),
new
vscode
.
CodeLens
(
conflict
.
range
.
with
(
conflict
.
range
.
start
.
with
({
character
:
conflict
.
range
.
start
.
character
+
3
})),
diffCommand
)
new
vscode
.
CodeLens
(
conflict
.
range
.
with
(
conflict
.
range
.
start
.
with
({
character
:
conflict
.
range
.
start
.
character
+
3
})),
diffCommand
),
new
vscode
.
CodeLens
(
conflict
.
range
.
with
(
conflict
.
range
.
start
.
with
({
character
:
conflict
.
range
.
start
.
character
+
4
})),
diffAllCommand
)
);
});
...
...
extensions/merge-conflict/src/commandHandler.ts
浏览文件 @
fa69b4e7
...
...
@@ -39,7 +39,8 @@ export default class CommandHandler implements vscode.Disposable {
this
.
registerTextEditorCommand
(
'
merge-conflict.accept.all-both
'
,
this
.
acceptAllBoth
),
this
.
registerTextEditorCommand
(
'
merge-conflict.next
'
,
this
.
navigateNext
),
this
.
registerTextEditorCommand
(
'
merge-conflict.previous
'
,
this
.
navigatePrevious
),
this
.
registerTextEditorCommand
(
'
merge-conflict.compare
'
,
this
.
compare
)
this
.
registerTextEditorCommand
(
'
merge-conflict.compare
'
,
this
.
compare
),
this
.
registerTextEditorCommand
(
'
merge-conflict.compareAll
'
,
this
.
compareAll
)
);
}
...
...
@@ -92,11 +93,36 @@ export default class CommandHandler implements vscode.Disposable {
let
range
=
conflict
.
current
.
content
;
const
leftUri
=
editor
.
document
.
uri
.
with
({
scheme
:
ContentProvider
.
scheme
,
query
:
JSON
.
stringify
({
scheme
,
range
})
query
:
JSON
.
stringify
({
scheme
,
range
,
fullRange
:
conflict
.
range
})
});
range
=
conflict
.
incoming
.
content
;
const
rightUri
=
leftUri
.
with
({
query
:
JSON
.
stringify
({
scheme
,
range
})
});
const
rightUri
=
leftUri
.
with
({
query
:
JSON
.
stringify
({
scheme
,
range
,
fullRange
:
conflict
.
range
})
});
const
title
=
localize
(
'
compareChangesTitle
'
,
'
{0}: Current Changes ⟷ Incoming Changes
'
,
fileName
);
vscode
.
commands
.
executeCommand
(
'
vscode.diff
'
,
leftUri
,
rightUri
,
title
);
}
async
compareAll
(
editor
:
vscode
.
TextEditor
)
{
const
fileName
=
path
.
basename
(
editor
.
document
.
uri
.
fsPath
);
const
conflicts
=
await
this
.
tracker
.
getConflicts
(
editor
.
document
);
// Still failed to find conflict, warn the user and exit
if
(
!
conflicts
)
{
vscode
.
window
.
showWarningMessage
(
localize
(
'
cursorNotInConflict
'
,
'
Editor cursor is not within a merge conflict
'
));
return
;
}
const
scheme
=
editor
.
document
.
uri
.
scheme
;
let
leftRanges
=
conflicts
.
map
(
conflict
=>
[
conflict
.
current
.
content
,
conflict
.
range
]);
let
rightRanges
=
conflicts
.
map
(
conflict
=>
[
conflict
.
incoming
.
content
,
conflict
.
range
]);
const
leftUri
=
editor
.
document
.
uri
.
with
({
scheme
:
ContentProvider
.
scheme
,
query
:
JSON
.
stringify
({
type
:
'
full
'
,
scheme
,
ranges
:
leftRanges
})
});
const
rightUri
=
leftUri
.
with
({
query
:
JSON
.
stringify
({
type
:
'
full
'
,
scheme
,
ranges
:
rightRanges
})
});
const
title
=
localize
(
'
compareChangesTitle
'
,
'
{0}: Current Changes ⟷ Incoming Changes
'
,
fileName
);
vscode
.
commands
.
executeCommand
(
'
vscode.diff
'
,
leftUri
,
rightUri
,
title
);
...
...
extensions/merge-conflict/src/contentProvider.ts
浏览文件 @
fa69b4e7
...
...
@@ -23,12 +23,40 @@ export default class MergeConflictContentProvider implements vscode.TextDocument
async
provideTextDocumentContent
(
uri
:
vscode
.
Uri
):
Promise
<
string
|
null
>
{
try
{
const
{
scheme
,
range
}
=
JSON
.
parse
(
uri
.
query
)
as
{
scheme
:
string
;
range
:
{
line
:
number
,
character
:
number
}[]
};
const
[
start
,
end
]
=
range
;
const
{
type
,
scheme
,
range
,
fullRange
,
ranges
}
=
JSON
.
parse
(
uri
.
query
)
as
{
type
:
string
,
scheme
:
string
;
range
:
{
line
:
number
,
character
:
number
}[],
fullRange
:
{
line
:
number
,
character
:
number
}[],
ranges
:
[{
line
:
number
,
character
:
number
}[],
{
line
:
number
,
character
:
number
}[]][]
};
const
document
=
await
vscode
.
workspace
.
openTextDocument
(
uri
.
with
({
scheme
,
query
:
''
}));
const
text
=
document
.
getText
(
new
vscode
.
Range
(
start
.
line
,
start
.
character
,
end
.
line
,
end
.
character
));
return
text
;
if
(
type
===
'
full
'
)
{
// complete diff
const
document
=
await
vscode
.
workspace
.
openTextDocument
(
uri
.
with
({
scheme
,
query
:
''
}));
let
text
=
''
;
let
lastPosition
=
new
vscode
.
Position
(
0
,
0
);
ranges
.
forEach
(
rangeObj
=>
{
let
[
range
,
fullRange
]
=
rangeObj
;
const
[
start
,
end
]
=
range
;
const
[
fullStart
,
fullEnd
]
=
fullRange
;
text
+=
document
.
getText
(
new
vscode
.
Range
(
lastPosition
.
line
,
lastPosition
.
character
,
fullStart
.
line
,
fullStart
.
character
));
text
+=
document
.
getText
(
new
vscode
.
Range
(
start
.
line
,
start
.
character
,
end
.
line
,
end
.
character
));
lastPosition
=
new
vscode
.
Position
(
fullEnd
.
line
,
fullEnd
.
character
);
});
let
documentEnd
=
document
.
lineAt
(
document
.
lineCount
-
1
).
range
.
end
;
text
+=
document
.
getText
(
new
vscode
.
Range
(
lastPosition
.
line
,
lastPosition
.
character
,
documentEnd
.
line
,
documentEnd
.
character
));
return
text
;
}
else
{
const
[
start
,
end
]
=
range
;
const
[
fullStart
,
fullEnd
]
=
fullRange
;
const
mergeConflictConfig
=
vscode
.
workspace
.
getConfiguration
(
'
merge-conflict
'
);
const
context
=
Math
.
max
(
0
,
mergeConflictConfig
.
get
<
number
>
(
'
diffViewContext
'
)
||
0
);
const
document
=
await
vscode
.
workspace
.
openTextDocument
(
uri
.
with
({
scheme
,
query
:
''
}));
const
text
=
document
.
getText
(
new
vscode
.
Range
(
Math
.
max
(
0
,
fullStart
.
line
-
context
),
0
,
fullStart
.
line
,
fullStart
.
character
))
+
document
.
getText
(
new
vscode
.
Range
(
start
.
line
,
start
.
character
,
end
.
line
,
end
.
character
))
+
document
.
getText
(
new
vscode
.
Range
(
fullEnd
.
line
,
fullEnd
.
character
,
Math
.
min
(
document
.
lineCount
,
fullEnd
.
line
+
context
+
1
),
0
));
return
text
;
}
}
catch
(
ex
)
{
await
vscode
.
window
.
showErrorMessage
(
'
Unable to show comparison
'
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录