Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
9727eb60
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,发现更多精彩内容 >>
提交
9727eb60
编写于
11月 18, 2019
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
untitled - fix save with associated file path
上级
fe03510f
变更
25
隐藏空白更改
内联
并排
Showing
25 changed file
with
130 addition
and
126 deletion
+130
-126
src/vs/workbench/api/browser/mainThreadSaveParticipant.ts
src/vs/workbench/api/browser/mainThreadSaveParticipant.ts
+1
-1
src/vs/workbench/api/common/extHost.protocol.ts
src/vs/workbench/api/common/extHost.protocol.ts
+1
-1
src/vs/workbench/api/common/extHostDocumentSaveParticipant.ts
...vs/workbench/api/common/extHostDocumentSaveParticipant.ts
+1
-1
src/vs/workbench/api/common/extHostTypeConverters.ts
src/vs/workbench/api/common/extHostTypeConverters.ts
+1
-1
src/vs/workbench/browser/parts/editor/editorGroupView.ts
src/vs/workbench/browser/parts/editor/editorGroupView.ts
+1
-1
src/vs/workbench/browser/parts/editor/textEditor.ts
src/vs/workbench/browser/parts/editor/textEditor.ts
+1
-2
src/vs/workbench/common/editor.ts
src/vs/workbench/common/editor.ts
+73
-10
src/vs/workbench/common/editor/untitledTextEditorInput.ts
src/vs/workbench/common/editor/untitledTextEditorInput.ts
+25
-5
src/vs/workbench/common/editor/untitledTextEditorModel.ts
src/vs/workbench/common/editor/untitledTextEditorModel.ts
+2
-2
src/vs/workbench/contrib/customEditor/browser/customEditorInput.ts
...rkbench/contrib/customEditor/browser/customEditorInput.ts
+2
-3
src/vs/workbench/contrib/customEditor/common/customEditorModel.ts
...orkbench/contrib/customEditor/common/customEditorModel.ts
+2
-2
src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts
...workbench/contrib/files/common/editors/fileEditorInput.ts
+1
-2
src/vs/workbench/contrib/files/test/browser/fileEditorInput.test.ts
...kbench/contrib/files/test/browser/fileEditorInput.test.ts
+1
-1
src/vs/workbench/contrib/preferences/browser/preferencesEditor.ts
...orkbench/contrib/preferences/browser/preferencesEditor.ts
+1
-1
src/vs/workbench/contrib/testCustomEditors/browser/testCustomEditors.ts
...ch/contrib/testCustomEditors/browser/testCustomEditors.ts
+3
-3
src/vs/workbench/services/editor/browser/editorService.ts
src/vs/workbench/services/editor/browser/editorService.ts
+3
-4
src/vs/workbench/services/editor/common/editorService.ts
src/vs/workbench/services/editor/common/editorService.ts
+1
-2
src/vs/workbench/services/textfile/browser/textFileService.ts
...vs/workbench/services/textfile/browser/textFileService.ts
+1
-1
src/vs/workbench/services/textfile/common/textFileEditorModel.ts
...workbench/services/textfile/common/textFileEditorModel.ts
+2
-2
src/vs/workbench/services/textfile/common/textfiles.ts
src/vs/workbench/services/textfile/common/textfiles.ts
+2
-2
src/vs/workbench/services/workingCopy/common/workingCopyService.ts
...rkbench/services/workingCopy/common/workingCopyService.ts
+0
-71
src/vs/workbench/services/workingCopy/test/common/workingCopyService.test.ts
...rvices/workingCopy/test/common/workingCopyService.test.ts
+1
-4
src/vs/workbench/test/electron-browser/api/extHostDocumentSaveParticipant.test.ts
...ectron-browser/api/extHostDocumentSaveParticipant.test.ts
+1
-1
src/vs/workbench/test/electron-browser/api/mainThreadSaveParticipant.test.ts
...st/electron-browser/api/mainThreadSaveParticipant.test.ts
+1
-1
src/vs/workbench/test/workbenchTestServices.ts
src/vs/workbench/test/workbenchTestServices.ts
+2
-2
未找到文件。
src/vs/workbench/api/browser/mainThreadSaveParticipant.ts
浏览文件 @
9727eb60
...
...
@@ -31,7 +31,7 @@ import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/
import
{
extHostCustomer
}
from
'
vs/workbench/api/common/extHostCustomers
'
;
import
{
TextFileEditorModel
}
from
'
vs/workbench/services/textfile/common/textFileEditorModel
'
;
import
{
ISaveParticipant
,
IResolvedTextFileEditorModel
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
SaveReason
}
from
'
vs/workbench/
services/workingCopy/common/workingCopyService
'
;
import
{
SaveReason
}
from
'
vs/workbench/
common/editor
'
;
import
{
ExtHostContext
,
ExtHostDocumentSaveParticipantShape
,
IExtHostContext
}
from
'
../common/extHost.protocol
'
;
export
interface
ICodeActionsOnSaveOptions
{
...
...
src/vs/workbench/api/common/extHost.protocol.ts
浏览文件 @
9727eb60
...
...
@@ -45,7 +45,7 @@ import { ITerminalDimensions, IShellLaunchConfig } from 'vs/workbench/contrib/te
import
{
ExtensionActivationError
}
from
'
vs/workbench/services/extensions/common/extensions
'
;
import
{
createExtHostContextProxyIdentifier
as
createExtId
,
createMainContextProxyIdentifier
as
createMainId
,
IRPCProtocol
}
from
'
vs/workbench/services/extensions/common/proxyIdentifier
'
;
import
*
as
search
from
'
vs/workbench/services/search/common/search
'
;
import
{
SaveReason
}
from
'
vs/workbench/
services/workingCopy/common/workingCopyService
'
;
import
{
SaveReason
}
from
'
vs/workbench/
common/editor
'
;
import
{
ExtensionActivationReason
}
from
'
vs/workbench/api/common/extHostExtensionActivator
'
;
export
interface
IEnvironment
{
...
...
src/vs/workbench/api/common/extHostDocumentSaveParticipant.ts
浏览文件 @
9727eb60
...
...
@@ -11,7 +11,7 @@ import { ExtHostDocumentSaveParticipantShape, MainThreadTextEditorsShape, IResou
import
{
TextEdit
}
from
'
vs/workbench/api/common/extHostTypes
'
;
import
{
Range
,
TextDocumentSaveReason
,
EndOfLine
}
from
'
vs/workbench/api/common/extHostTypeConverters
'
;
import
{
ExtHostDocuments
}
from
'
vs/workbench/api/common/extHostDocuments
'
;
import
{
SaveReason
}
from
'
vs/workbench/
services/workingCopy/common/workingCopyService
'
;
import
{
SaveReason
}
from
'
vs/workbench/
common/editor
'
;
import
*
as
vscode
from
'
vscode
'
;
import
{
LinkedList
}
from
'
vs/base/common/linkedList
'
;
import
{
ILogService
}
from
'
vs/platform/log/common/log
'
;
...
...
src/vs/workbench/api/common/extHostTypeConverters.ts
浏览文件 @
9727eb60
...
...
@@ -13,7 +13,7 @@ import { EndOfLineSequence, TrackedRangeStickiness } from 'vs/editor/common/mode
import
*
as
vscode
from
'
vscode
'
;
import
{
URI
,
UriComponents
}
from
'
vs/base/common/uri
'
;
import
{
ProgressLocation
as
MainProgressLocation
}
from
'
vs/platform/progress/common/progress
'
;
import
{
SaveReason
}
from
'
vs/workbench/
services/workingCopy/common/workingCopyService
'
;
import
{
SaveReason
}
from
'
vs/workbench/
common/editor
'
;
import
{
IPosition
}
from
'
vs/editor/common/core/position
'
;
import
*
as
editorRange
from
'
vs/editor/common/core/range
'
;
import
{
ISelection
}
from
'
vs/editor/common/core/selection
'
;
...
...
src/vs/workbench/browser/parts/editor/editorGroupView.ts
浏览文件 @
9727eb60
...
...
@@ -1310,7 +1310,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView {
// Otherwise, handle accordingly
switch
(
res
)
{
case
ConfirmResult
.
SAVE
:
const
result
=
await
editor
.
save
();
const
result
=
await
editor
.
save
(
this
.
_group
.
id
);
return
!
result
;
case
ConfirmResult
.
DONT_SAVE
:
...
...
src/vs/workbench/browser/parts/editor/textEditor.ts
浏览文件 @
9727eb60
...
...
@@ -9,7 +9,7 @@ import { distinct, deepClone, assign } from 'vs/base/common/objects';
import
{
isObject
,
assertIsDefined
,
withNullAsUndefined
}
from
'
vs/base/common/types
'
;
import
{
Dimension
}
from
'
vs/base/browser/dom
'
;
import
{
CodeEditorWidget
}
from
'
vs/editor/browser/widget/codeEditorWidget
'
;
import
{
EditorInput
,
EditorOptions
,
IEditorMemento
,
ITextEditor
}
from
'
vs/workbench/common/editor
'
;
import
{
EditorInput
,
EditorOptions
,
IEditorMemento
,
ITextEditor
,
SaveReason
}
from
'
vs/workbench/common/editor
'
;
import
{
BaseEditor
}
from
'
vs/workbench/browser/parts/editor/baseEditor
'
;
import
{
IEditorViewState
,
IEditor
}
from
'
vs/editor/common/editorCommon
'
;
import
{
IStorageService
}
from
'
vs/platform/storage/common/storage
'
;
...
...
@@ -17,7 +17,6 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
IThemeService
}
from
'
vs/platform/theme/common/themeService
'
;
import
{
ITextFileService
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
SaveReason
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
ITextResourceConfigurationService
}
from
'
vs/editor/common/services/resourceConfiguration
'
;
import
{
IEditorOptions
}
from
'
vs/editor/common/config/editorOptions
'
;
import
{
isDiffEditor
,
isCodeEditor
,
getCodeEditor
}
from
'
vs/editor/browser/editorBrowser
'
;
...
...
src/vs/workbench/common/editor.ts
浏览文件 @
9727eb60
...
...
@@ -20,7 +20,6 @@ import { ActionRunner, IAction } from 'vs/base/common/actions';
import
{
IFileService
}
from
'
vs/platform/files/common/files
'
;
import
{
IPathData
}
from
'
vs/platform/windows/common/windows
'
;
import
{
coalesce
,
firstOrDefault
}
from
'
vs/base/common/arrays
'
;
import
{
ISaveOptions
,
IRevertOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
ITextFileSaveOptions
,
ITextFileService
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
IEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
isEqual
}
from
'
vs/base/common/resources
'
;
...
...
@@ -277,6 +276,68 @@ export const enum Verbosity {
LONG
}
export
const
enum
SaveReason
{
/**
* Explicit user gesture.
*/
EXPLICIT
=
1
,
/**
* Auto save after a timeout.
*/
AUTO
=
2
,
/**
* Auto save after editor focus change.
*/
FOCUS_CHANGE
=
3
,
/**
* Auto save after window change.
*/
WINDOW_CHANGE
=
4
}
export
interface
ISaveOptions
{
/**
* An indicator how the save operation was triggered.
*/
reason
?:
SaveReason
;
/**
* Forces to load the contents of the working copy
* again even if the working copy is not dirty.
*/
force
?:
boolean
;
/**
* Instructs the save operation to skip any save participants.
*/
skipSaveParticipants
?:
boolean
;
/**
* A hint as to which file systems should be available for saving.
*/
availableFileSystems
?:
string
[];
}
export
interface
IRevertOptions
{
/**
* Forces to load the contents of the working copy
* again even if the working copy is not dirty.
*/
force
?:
boolean
;
/**
* A soft revert will clear dirty state of a working copy
* but will not attempt to load it from its persisted state.
*/
soft
?:
boolean
;
}
export
interface
IEditorInput
extends
IDisposable
{
/**
...
...
@@ -330,9 +391,11 @@ export interface IEditorInput extends IDisposable {
isDirty
():
boolean
;
/**
* Saves the editor.
* Saves the editor. The provided groupId helps
* implementors to e.g. preserve view state of the editor
* and re-open it in the correct group after saving.
*/
save
(
options
?:
ISaveOptions
):
Promise
<
boolean
>
;
save
(
groupId
:
GroupIdentifier
,
options
?:
ISaveOptions
):
Promise
<
boolean
>
;
/**
* Saves the editor to a different location. The provided groupId
...
...
@@ -464,7 +527,7 @@ export abstract class EditorInput extends Disposable implements IEditorInput {
/**
* Saves the editor if it is dirty. Subclasses return a promise with a boolean indicating the success of the operation.
*/
save
(
options
?:
ISaveOptions
):
Promise
<
boolean
>
{
save
(
groupId
:
GroupIdentifier
,
options
?:
ISaveOptions
):
Promise
<
boolean
>
{
return
Promise
.
resolve
(
true
);
}
...
...
@@ -530,15 +593,15 @@ export abstract class TextEditorInput extends EditorInput {
return
this
.
resource
;
}
save
(
options
?:
ITextFileSaveOptions
):
Promise
<
boolean
>
{
save
(
groupId
:
GroupIdentifier
,
options
?:
ITextFileSaveOptions
):
Promise
<
boolean
>
{
return
this
.
textFileService
.
save
(
this
.
resource
,
options
);
}
saveAs
(
group
:
GroupIdentifier
,
options
?:
ITextFileSaveOptions
):
Promise
<
boolean
>
{
return
this
.
doSaveAs
(
group
,
options
);
return
this
.
doSaveAs
(
group
,
()
=>
this
.
textFileService
.
saveAs
(
this
.
resource
,
undefined
,
options
)
);
}
protected
async
doSaveAs
(
group
:
GroupIdentifier
,
options
?:
ITextFileSaveOptions
,
replaceAllEditors
?:
boolean
):
Promise
<
boolean
>
{
protected
async
doSaveAs
(
group
:
GroupIdentifier
,
saveRunnable
:
()
=>
Promise
<
URI
|
undefined
>
,
replaceAllEditors
?:
boolean
):
Promise
<
boolean
>
{
// Preserve view state by opening the editor first. In addition
// this allows the user to review the contents of the editor.
...
...
@@ -549,7 +612,7 @@ export abstract class TextEditorInput extends EditorInput {
}
// Save as
const
target
=
await
this
.
textFileService
.
saveAs
(
this
.
resource
,
undefined
,
options
);
const
target
=
await
saveRunnable
(
);
if
(
!
target
)
{
return
false
;
// save cancelled
}
...
...
@@ -667,8 +730,8 @@ export class SideBySideEditorInput extends EditorInput {
return
this
.
master
.
isDirty
();
}
save
(
options
?:
ISaveOptions
):
Promise
<
boolean
>
{
return
this
.
master
.
save
(
options
);
save
(
groupId
:
GroupIdentifier
,
options
?:
ISaveOptions
):
Promise
<
boolean
>
{
return
this
.
master
.
save
(
groupId
,
options
);
}
saveAs
(
groupId
:
GroupIdentifier
,
options
?:
ISaveOptions
):
Promise
<
boolean
>
{
...
...
src/vs/workbench/common/editor/untitledTextEditorInput.ts
浏览文件 @
9727eb60
...
...
@@ -7,17 +7,17 @@ import { URI } from 'vs/base/common/uri';
import
{
suggestFilename
}
from
'
vs/base/common/mime
'
;
import
{
createMemoizer
}
from
'
vs/base/common/decorators
'
;
import
{
PLAINTEXT_MODE_ID
}
from
'
vs/editor/common/modes/modesRegistry
'
;
import
{
basenameOrAuthority
,
dirname
}
from
'
vs/base/common/resources
'
;
import
{
IEncodingSupport
,
EncodingMode
,
Verbosity
,
IModeSupport
,
TextEditorInput
,
GroupIdentifier
}
from
'
vs/workbench/common/editor
'
;
import
{
basenameOrAuthority
,
dirname
,
toLocalResource
}
from
'
vs/base/common/resources
'
;
import
{
IEncodingSupport
,
EncodingMode
,
Verbosity
,
IModeSupport
,
TextEditorInput
,
GroupIdentifier
,
IRevertOptions
}
from
'
vs/workbench/common/editor
'
;
import
{
UntitledTextEditorModel
}
from
'
vs/workbench/common/editor/untitledTextEditorModel
'
;
import
{
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
ITextFileService
,
ITextFileSaveOptions
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
ILabelService
}
from
'
vs/platform/label/common/label
'
;
import
{
IResolvedTextEditorModel
}
from
'
vs/editor/common/services/resolverService
'
;
import
{
IRevertOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
IEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
IEditorGroupsService
}
from
'
vs/workbench/services/editor/common/editorGroupsService
'
;
import
{
IWorkbenchEnvironmentService
}
from
'
vs/workbench/services/environment/common/environmentService
'
;
/**
* An editor input to be used for untitled text buffers.
...
...
@@ -47,7 +47,8 @@ export class UntitledTextEditorInput extends TextEditorInput implements IEncodin
@
ITextFileService
textFileService
:
ITextFileService
,
@
ILabelService
private
readonly
labelService
:
ILabelService
,
@
IEditorService
editorService
:
IEditorService
,
@
IEditorGroupsService
editorGroupService
:
IEditorGroupsService
@
IEditorGroupsService
editorGroupService
:
IEditorGroupsService
,
@
IWorkbenchEnvironmentService
private
readonly
environmentService
:
IWorkbenchEnvironmentService
)
{
super
(
resource
,
editorService
,
editorGroupService
,
textFileService
);
...
...
@@ -161,8 +162,27 @@ export class UntitledTextEditorInput extends TextEditorInput implements IEncodin
return
false
;
}
save
(
group
:
GroupIdentifier
,
options
?:
ITextFileSaveOptions
):
Promise
<
boolean
>
{
return
this
.
doSaveAs
(
group
,
async
()
=>
{
// With associated file path, save to the path that is
// associated. Make sure to convert the result using
// remote authority properly.
if
(
this
.
hasAssociatedFilePath
)
{
if
(
await
this
.
textFileService
.
save
(
this
.
resource
,
options
))
{
return
toLocalResource
(
this
.
resource
,
this
.
environmentService
.
configuration
.
remoteAuthority
);
}
return
;
}
// Without associated file path, do a normal "Save As"
return
this
.
textFileService
.
saveAs
(
this
.
resource
,
undefined
,
options
);
},
true
/* replace editor across all groups */
);
}
saveAs
(
group
:
GroupIdentifier
,
options
?:
ITextFileSaveOptions
):
Promise
<
boolean
>
{
return
this
.
doSaveAs
(
group
,
options
,
true
/* replace editor across all groups */
);
return
this
.
doSaveAs
(
group
,
()
=>
this
.
textFileService
.
saveAs
(
this
.
resource
,
undefined
,
options
)
,
true
/* replace editor across all groups */
);
}
revert
(
options
?:
IRevertOptions
):
Promise
<
boolean
>
{
...
...
src/vs/workbench/common/editor/untitledTextEditorModel.ts
浏览文件 @
9727eb60
...
...
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
IEncodingSupport
}
from
'
vs/workbench/common/editor
'
;
import
{
IEncodingSupport
,
ISaveOptions
}
from
'
vs/workbench/common/editor
'
;
import
{
BaseTextEditorModel
}
from
'
vs/workbench/common/editor/textEditorModel
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
CONTENT_CHANGE_EVENT_BUFFER_DELAY
}
from
'
vs/platform/files/common/files
'
;
...
...
@@ -16,7 +16,7 @@ import { ITextResourceConfigurationService } from 'vs/editor/common/services/res
import
{
ITextBufferFactory
}
from
'
vs/editor/common/model
'
;
import
{
createTextBufferFactory
}
from
'
vs/editor/common/model/textModel
'
;
import
{
IResolvedTextEditorModel
}
from
'
vs/editor/common/services/resolverService
'
;
import
{
IWorkingCopyService
,
IWorkingCopy
,
ISaveOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
IWorkingCopyService
,
IWorkingCopy
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
ITextFileService
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
export
class
UntitledTextEditorModel
extends
BaseTextEditorModel
implements
IEncodingSupport
,
IWorkingCopy
{
...
...
src/vs/workbench/contrib/customEditor/browser/customEditorInput.ts
浏览文件 @
9727eb60
...
...
@@ -12,11 +12,10 @@ import { DataUri, isEqual } from 'vs/base/common/resources';
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
ILabelService
}
from
'
vs/platform/label/common/label
'
;
import
{
ILifecycleService
}
from
'
vs/platform/lifecycle/common/lifecycle
'
;
import
{
IEditorInput
,
Verbosity
,
GroupIdentifier
}
from
'
vs/workbench/common/editor
'
;
import
{
IEditorInput
,
Verbosity
,
GroupIdentifier
,
ISaveOptions
,
IRevertOptions
}
from
'
vs/workbench/common/editor
'
;
import
{
WebviewEditorOverlay
}
from
'
vs/workbench/contrib/webview/browser/webview
'
;
import
{
IWebviewWorkbenchService
,
LazilyResolvedWebviewEditorInput
}
from
'
vs/workbench/contrib/webview/browser/webviewWorkbenchService
'
;
import
{
CustomEditorModel
}
from
'
../common/customEditorModel
'
;
import
{
ISaveOptions
,
IRevertOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
export
class
CustomFileEditorInput
extends
LazilyResolvedWebviewEditorInput
{
...
...
@@ -125,7 +124,7 @@ export class CustomFileEditorInput extends LazilyResolvedWebviewEditorInput {
return
this
.
_model
?
this
.
_model
.
isDirty
()
:
false
;
}
public
save
(
options
?:
ISaveOptions
):
Promise
<
boolean
>
{
public
save
(
groupId
:
GroupIdentifier
,
options
?:
ISaveOptions
):
Promise
<
boolean
>
{
return
this
.
_model
?
this
.
_model
.
save
(
options
)
:
Promise
.
resolve
(
false
);
}
...
...
src/vs/workbench/contrib/customEditor/common/customEditorModel.ts
浏览文件 @
9727eb60
...
...
@@ -7,8 +7,8 @@ import { Emitter, Event } from 'vs/base/common/event';
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
ICustomEditorModel
,
CustomEditorEdit
}
from
'
vs/workbench/contrib/customEditor/common/customEditor
'
;
import
{
IRevertOptions
,
ISaveOptions
,
WorkingCopyCapabilities
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
WorkingCopyCapabilities
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
ISaveOptions
,
IRevertOptions
}
from
'
vs/workbench/common/editor
'
;
export
class
CustomEditorModel
extends
Disposable
implements
ICustomEditorModel
{
...
...
src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts
浏览文件 @
9727eb60
...
...
@@ -7,8 +7,7 @@ import { localize } from 'vs/nls';
import
{
createMemoizer
}
from
'
vs/base/common/decorators
'
;
import
{
dirname
}
from
'
vs/base/common/resources
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
EncodingMode
,
IFileEditorInput
,
ITextEditorModel
,
Verbosity
,
TextEditorInput
}
from
'
vs/workbench/common/editor
'
;
import
{
IRevertOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
EncodingMode
,
IFileEditorInput
,
ITextEditorModel
,
Verbosity
,
TextEditorInput
,
IRevertOptions
}
from
'
vs/workbench/common/editor
'
;
import
{
TextFileEditorModel
}
from
'
vs/workbench/services/textfile/common/textFileEditorModel
'
;
import
{
BinaryEditorModel
}
from
'
vs/workbench/common/editor/binaryEditorModel
'
;
import
{
FileOperationError
,
FileOperationResult
,
IFileService
,
FileSystemProviderCapabilities
}
from
'
vs/platform/files/common/files
'
;
...
...
src/vs/workbench/contrib/files/test/browser/fileEditorInput.test.ts
浏览文件 @
9727eb60
...
...
@@ -141,7 +141,7 @@ suite('Files - FileEditorInput', () => {
resolved
.
textEditorModel
!
.
setValue
(
'
changed
'
);
assert
.
ok
(
input
.
isDirty
());
await
input
.
save
();
await
input
.
save
(
0
);
assert
.
ok
(
!
input
.
isDirty
());
resolved
.
dispose
();
});
...
...
src/vs/workbench/contrib/preferences/browser/preferencesEditor.ts
浏览文件 @
9727eb60
...
...
@@ -255,7 +255,7 @@ export class PreferencesEditor extends BaseEditor {
if
(
this
.
editorService
.
activeControl
!==
this
)
{
this
.
focus
();
}
const
promise
:
Promise
<
boolean
>
=
this
.
input
&&
this
.
input
.
isDirty
()
?
this
.
input
.
save
()
:
Promise
.
resolve
(
true
);
const
promise
:
Promise
<
boolean
>
=
this
.
input
&&
this
.
input
.
isDirty
()
?
this
.
input
.
save
(
this
.
group
!
.
id
)
:
Promise
.
resolve
(
true
);
promise
.
then
(()
=>
{
if
(
target
===
ConfigurationTarget
.
USER_LOCAL
)
{
this
.
preferencesService
.
switchSettings
(
ConfigurationTarget
.
USER_LOCAL
,
this
.
preferencesService
.
userSettingsResource
,
true
);
...
...
src/vs/workbench/contrib/testCustomEditors/browser/testCustomEditors.ts
浏览文件 @
9727eb60
...
...
@@ -6,7 +6,7 @@
import
*
as
nls
from
'
vs/nls
'
;
import
{
Action
}
from
'
vs/base/common/actions
'
;
import
{
BaseEditor
}
from
'
vs/workbench/browser/parts/editor/baseEditor
'
;
import
{
IEditorInputFactory
,
EditorInput
,
IEditorInputFactoryRegistry
,
Extensions
as
EditorInputExtensions
,
EditorModel
,
EditorOptions
,
GroupIdentifier
}
from
'
vs/workbench/common/editor
'
;
import
{
IEditorInputFactory
,
EditorInput
,
IEditorInputFactoryRegistry
,
Extensions
as
EditorInputExtensions
,
EditorModel
,
EditorOptions
,
GroupIdentifier
,
ISaveOptions
,
IRevertOptions
}
from
'
vs/workbench/common/editor
'
;
import
{
IEditorService
}
from
'
vs/workbench/services/editor/common/editorService
'
;
import
{
IEditorModel
}
from
'
vs/platform/editor/common/editor
'
;
import
{
Dimension
,
addDisposableListener
,
EventType
}
from
'
vs/base/browser/dom
'
;
...
...
@@ -24,7 +24,7 @@ import { isEqual } from 'vs/base/common/resources';
import
{
generateUuid
}
from
'
vs/base/common/uuid
'
;
import
{
CancellationToken
}
from
'
vs/base/common/cancellation
'
;
import
{
editorBackground
,
editorForeground
}
from
'
vs/platform/theme/common/colorRegistry
'
;
import
{
IWorkingCopy
,
IWorkingCopyService
,
IRevertOptions
,
ISaveOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
IWorkingCopy
,
IWorkingCopyService
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
env
}
from
'
vs/base/common/process
'
;
const
CUSTOM_SCHEME
=
'
testCustomEditor
'
;
...
...
@@ -168,7 +168,7 @@ class TestCustomEditorInput extends EditorInput implements IWorkingCopy {
return
this
.
dirty
;
}
async
save
(
options
?:
ISaveOptions
):
Promise
<
boolean
>
{
async
save
(
groupId
:
GroupIdentifier
,
options
?:
ISaveOptions
):
Promise
<
boolean
>
{
this
.
setDirty
(
false
);
return
true
;
...
...
src/vs/workbench/services/editor/browser/editorService.ts
浏览文件 @
9727eb60
...
...
@@ -5,7 +5,7 @@
import
{
IInstantiationService
,
ServicesAccessor
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IResourceInput
,
ITextEditorOptions
,
IEditorOptions
,
EditorActivation
}
from
'
vs/platform/editor/common/editor
'
;
import
{
IEditorInput
,
IEditor
,
GroupIdentifier
,
IFileEditorInput
,
IUntitledTextResourceInput
,
IResourceDiffInput
,
IResourceSideBySideInput
,
IEditorInputFactoryRegistry
,
Extensions
as
EditorExtensions
,
IFileInputFactory
,
EditorInput
,
SideBySideEditorInput
,
IEditorInputWithOptions
,
isEditorInputWithOptions
,
EditorOptions
,
TextEditorOptions
,
IEditorIdentifier
,
IEditorCloseEvent
,
ITextEditor
,
ITextDiffEditor
,
ITextSideBySideEditor
,
toResource
,
SideBySideEditor
}
from
'
vs/workbench/common/editor
'
;
import
{
IEditorInput
,
IEditor
,
GroupIdentifier
,
IFileEditorInput
,
IUntitledTextResourceInput
,
IResourceDiffInput
,
IResourceSideBySideInput
,
IEditorInputFactoryRegistry
,
Extensions
as
EditorExtensions
,
IFileInputFactory
,
EditorInput
,
SideBySideEditorInput
,
IEditorInputWithOptions
,
isEditorInputWithOptions
,
EditorOptions
,
TextEditorOptions
,
IEditorIdentifier
,
IEditorCloseEvent
,
ITextEditor
,
ITextDiffEditor
,
ITextSideBySideEditor
,
toResource
,
SideBySideEditor
,
IRevertOptions
}
from
'
vs/workbench/common/editor
'
;
import
{
ResourceEditorInput
}
from
'
vs/workbench/common/editor/resourceEditorInput
'
;
import
{
DataUriEditorInput
}
from
'
vs/workbench/common/editor/dataUriEditorInput
'
;
import
{
Registry
}
from
'
vs/platform/registry/common/platform
'
;
...
...
@@ -28,7 +28,6 @@ import { IEditorGroupView, IEditorOpeningEvent, EditorServiceImpl } from 'vs/wor
import
{
ILabelService
}
from
'
vs/platform/label/common/label
'
;
import
{
registerSingleton
}
from
'
vs/platform/instantiation/common/extensions
'
;
import
{
withNullAsUndefined
}
from
'
vs/base/common/types
'
;
import
{
IRevertOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
type
CachedEditorInput
=
ResourceEditorInput
|
IFileEditorInput
|
DataUriEditorInput
;
type
OpenInEditorGroup
=
IEditorGroup
|
GroupIdentifier
|
SIDE_GROUP_TYPE
|
ACTIVE_GROUP_TYPE
;
...
...
@@ -691,7 +690,7 @@ export class EditorService extends Disposable implements EditorServiceImpl {
this
.
editorGroupService
.
getGroup
(
groupId
)?.
pinEditor
(
editor
);
// Save
return
editor
.
save
(
options
);
return
editor
.
save
(
groupId
,
options
);
}));
// Editors to save sequentially
...
...
@@ -700,7 +699,7 @@ export class EditorService extends Disposable implements EditorServiceImpl {
continue
;
// might have been disposed from from the save already
}
const
result
=
await
editor
.
saveAs
(
groupId
,
options
);
const
result
=
options
?.
saveAs
?
await
editor
.
saveAs
(
groupId
,
options
)
:
await
editor
.
save
(
groupId
,
options
);
if
(
!
result
)
{
return
false
;
// failed or cancelled, abort
}
...
...
src/vs/workbench/services/editor/common/editorService.ts
浏览文件 @
9727eb60
...
...
@@ -5,12 +5,11 @@
import
{
createDecorator
,
ServicesAccessor
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IResourceInput
,
IEditorOptions
,
ITextEditorOptions
}
from
'
vs/platform/editor/common/editor
'
;
import
{
IEditorInput
,
IEditor
,
GroupIdentifier
,
IEditorInputWithOptions
,
IUntitledTextResourceInput
,
IResourceDiffInput
,
IResourceSideBySideInput
,
ITextEditor
,
ITextDiffEditor
,
ITextSideBySideEditor
,
IEditorIdentifier
}
from
'
vs/workbench/common/editor
'
;
import
{
IEditorInput
,
IEditor
,
GroupIdentifier
,
IEditorInputWithOptions
,
IUntitledTextResourceInput
,
IResourceDiffInput
,
IResourceSideBySideInput
,
ITextEditor
,
ITextDiffEditor
,
ITextSideBySideEditor
,
IEditorIdentifier
,
ISaveOptions
,
IRevertOptions
}
from
'
vs/workbench/common/editor
'
;
import
{
Event
}
from
'
vs/base/common/event
'
;
import
{
IEditor
as
ICodeEditor
}
from
'
vs/editor/common/editorCommon
'
;
import
{
IEditorGroup
,
IEditorReplacement
}
from
'
vs/workbench/services/editor/common/editorGroupsService
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
ISaveOptions
,
IRevertOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
export
const
IEditorService
=
createDecorator
<
IEditorService
>
(
'
editorService
'
);
...
...
src/vs/workbench/services/textfile/browser/textFileService.ts
浏览文件 @
9727eb60
...
...
@@ -9,7 +9,7 @@ import { Emitter, AsyncEmitter } from 'vs/base/common/event';
import
*
as
platform
from
'
vs/base/common/platform
'
;
import
{
IBackupFileService
}
from
'
vs/workbench/services/backup/common/backup
'
;
import
{
IResult
,
ITextFileOperationResult
,
ITextFileService
,
ITextFileStreamContent
,
ITextFileEditorModelManager
,
ITextFileEditorModel
,
ModelState
,
ITextFileContent
,
IResourceEncodings
,
IReadTextFileOptions
,
IWriteTextFileOptions
,
toBufferOrReadable
,
TextFileOperationError
,
TextFileOperationResult
,
FileOperationWillRunEvent
,
FileOperationDidRunEvent
,
ITextFileSaveOptions
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
SaveReason
,
IRevertOptions
}
from
'
vs/workbench/
services/workingCopy/common/workingCopyService
'
;
import
{
SaveReason
,
IRevertOptions
}
from
'
vs/workbench/
common/editor
'
;
import
{
ILifecycleService
,
ShutdownReason
,
LifecyclePhase
}
from
'
vs/platform/lifecycle/common/lifecycle
'
;
import
{
IWorkspaceContextService
,
WorkbenchState
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
IFileService
,
FileOperationError
,
FileOperationResult
,
HotExitConfiguration
,
IFileStatWithMetadata
,
ICreateFileOptions
,
FileOperation
}
from
'
vs/platform/files/common/files
'
;
...
...
src/vs/workbench/services/textfile/common/textFileEditorModel.ts
浏览文件 @
9727eb60
...
...
@@ -12,7 +12,7 @@ import { isUndefinedOrNull, assertIsDefined } from 'vs/base/common/types';
import
{
IWorkspaceContextService
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
IEnvironmentService
}
from
'
vs/platform/environment/common/environment
'
;
import
{
ITextFileService
,
ModelState
,
ITextFileEditorModel
,
ISaveErrorHandler
,
ISaveParticipant
,
StateChange
,
ITextFileStreamContent
,
ILoadOptions
,
LoadReason
,
IResolvedTextFileEditorModel
,
ITextFileSaveOptions
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
EncodingMode
}
from
'
vs/workbench/common/editor
'
;
import
{
EncodingMode
,
IRevertOptions
,
SaveReason
}
from
'
vs/workbench/common/editor
'
;
import
{
BaseTextEditorModel
}
from
'
vs/workbench/common/editor/textEditorModel
'
;
import
{
IBackupFileService
}
from
'
vs/workbench/services/backup/common/backup
'
;
import
{
IFileService
,
FileOperationError
,
FileOperationResult
,
CONTENT_CHANGE_EVENT_BUFFER_DELAY
,
FileChangesEvent
,
FileChangeType
,
IFileStatWithMetadata
,
ETAG_DISABLED
}
from
'
vs/platform/files/common/files
'
;
...
...
@@ -29,7 +29,7 @@ import { ILogService } from 'vs/platform/log/common/log';
import
{
isEqual
,
isEqualOrParent
,
extname
,
basename
,
joinPath
}
from
'
vs/base/common/resources
'
;
import
{
onUnexpectedError
}
from
'
vs/base/common/errors
'
;
import
{
Schemas
}
from
'
vs/base/common/network
'
;
import
{
IWorkingCopyService
,
WorkingCopyCapabilities
,
SaveReason
,
IRevertOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
IWorkingCopyService
,
WorkingCopyCapabilities
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
IFilesConfigurationService
,
IAutoSaveConfiguration
}
from
'
vs/workbench/services/filesConfiguration/common/filesConfigurationService
'
;
export
interface
IBackupMetaData
{
...
...
src/vs/workbench/services/textfile/common/textfiles.ts
浏览文件 @
9727eb60
...
...
@@ -6,7 +6,7 @@
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
Event
,
IWaitUntil
}
from
'
vs/base/common/event
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
IEncodingSupport
,
IModeSupport
}
from
'
vs/workbench/common/editor
'
;
import
{
IEncodingSupport
,
IModeSupport
,
ISaveOptions
,
IRevertOptions
,
SaveReason
}
from
'
vs/workbench/common/editor
'
;
import
{
IBaseStatWithMetadata
,
IFileStatWithMetadata
,
IReadFileOptions
,
IWriteFileOptions
,
FileOperationError
,
FileOperationResult
,
FileOperation
}
from
'
vs/platform/files/common/files
'
;
import
{
createDecorator
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
ITextEditorModel
}
from
'
vs/editor/common/services/resolverService
'
;
...
...
@@ -14,7 +14,7 @@ import { ITextBufferFactory, ITextModel, ITextSnapshot } from 'vs/editor/common/
import
{
VSBuffer
,
VSBufferReadable
}
from
'
vs/base/common/buffer
'
;
import
{
isUndefinedOrNull
}
from
'
vs/base/common/types
'
;
import
{
isNative
}
from
'
vs/base/common/platform
'
;
import
{
IWorkingCopy
,
ISaveOptions
,
SaveReason
,
IRevertOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
IWorkingCopy
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
export
const
ITextFileService
=
createDecorator
<
ITextFileService
>
(
'
textFileService
'
);
...
...
src/vs/workbench/services/workingCopy/common/workingCopyService.ts
浏览文件 @
9727eb60
...
...
@@ -19,68 +19,6 @@ export const enum WorkingCopyCapabilities {
AutoSave
=
1
<<
1
}
export
const
enum
SaveReason
{
/**
* Explicit user gesture.
*/
EXPLICIT
=
1
,
/**
* Auto save after a timeout.
*/
AUTO
=
2
,
/**
* Auto save after editor focus change.
*/
FOCUS_CHANGE
=
3
,
/**
* Auto save after window change.
*/
WINDOW_CHANGE
=
4
}
export
interface
ISaveOptions
{
/**
* An indicator how the save operation was triggered.
*/
reason
?:
SaveReason
;
/**
* Forces to load the contents of the working copy
* again even if the working copy is not dirty.
*/
force
?:
boolean
;
/**
* Instructs the save operation to skip any save participants.
*/
skipSaveParticipants
?:
boolean
;
/**
* A hint as to which file systems should be available for saving.
*/
availableFileSystems
?:
string
[];
}
export
interface
IRevertOptions
{
/**
* Forces to load the contents of the working copy
* again even if the working copy is not dirty.
*/
force
?:
boolean
;
/**
* A soft revert will clear dirty state of a working copy
* but will not attempt to load it from its persisted state.
*/
soft
?:
boolean
;
}
export
interface
IWorkingCopy
{
//#region Dirty Tracking
...
...
@@ -92,15 +30,6 @@ export interface IWorkingCopy {
//#endregion
//#region Save/Revert
save
(
options
?:
ISaveOptions
):
Promise
<
boolean
>
;
revert
(
options
?:
IRevertOptions
):
Promise
<
boolean
>
;
//#endregion
readonly
resource
:
URI
;
readonly
capabilities
:
WorkingCopyCapabilities
;
...
...
src/vs/workbench/services/workingCopy/test/common/workingCopyService.test.ts
浏览文件 @
9727eb60
...
...
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import
*
as
assert
from
'
assert
'
;
import
{
IWorkingCopy
,
ISaveOptions
,
IRevertOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
IWorkingCopy
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
...
...
@@ -41,9 +41,6 @@ suite('WorkingCopyService', () => {
return
this
.
dirty
;
}
async
save
(
options
?:
ISaveOptions
):
Promise
<
boolean
>
{
return
true
;
}
async
revert
(
options
?:
IRevertOptions
):
Promise
<
boolean
>
{
return
true
;
}
dispose
():
void
{
this
.
_onDispose
.
fire
();
...
...
src/vs/workbench/test/electron-browser/api/extHostDocumentSaveParticipant.test.ts
浏览文件 @
9727eb60
...
...
@@ -10,7 +10,7 @@ import { TextDocumentSaveReason, TextEdit, Position, EndOfLine } from 'vs/workbe
import
{
MainThreadTextEditorsShape
,
IWorkspaceEditDto
}
from
'
vs/workbench/api/common/extHost.protocol
'
;
import
{
ExtHostDocumentSaveParticipant
}
from
'
vs/workbench/api/common/extHostDocumentSaveParticipant
'
;
import
{
SingleProxyRPCProtocol
}
from
'
./testRPCProtocol
'
;
import
{
SaveReason
}
from
'
vs/workbench/
services/workingCopy/common/workingCopyService
'
;
import
{
SaveReason
}
from
'
vs/workbench/
common/editor
'
;
import
*
as
vscode
from
'
vscode
'
;
import
{
mock
}
from
'
vs/workbench/test/electron-browser/api/mock
'
;
import
{
NullLogService
}
from
'
vs/platform/log/common/log
'
;
...
...
src/vs/workbench/test/electron-browser/api/mainThreadSaveParticipant.test.ts
浏览文件 @
9727eb60
...
...
@@ -14,7 +14,7 @@ import { Range } from 'vs/editor/common/core/range';
import
{
Selection
}
from
'
vs/editor/common/core/selection
'
;
import
{
TextFileEditorModel
}
from
'
vs/workbench/services/textfile/common/textFileEditorModel
'
;
import
{
ITextFileService
,
IResolvedTextFileEditorModel
,
snapshotToString
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
SaveReason
}
from
'
vs/workbench/
services/workingCopy/common/workingCopyService
'
;
import
{
SaveReason
}
from
'
vs/workbench/
common/editor
'
;
import
{
TextFileEditorModelManager
}
from
'
vs/workbench/services/textfile/common/textFileEditorModelManager
'
;
class
ServiceAccessor
{
...
...
src/vs/workbench/test/workbenchTestServices.ts
浏览文件 @
9727eb60
...
...
@@ -11,7 +11,7 @@ import * as resources from 'vs/base/common/resources';
import
{
URI
,
UriComponents
}
from
'
vs/base/common/uri
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
NullTelemetryService
}
from
'
vs/platform/telemetry/common/telemetryUtils
'
;
import
{
IEditorInputWithOptions
,
CloseDirection
,
IEditorIdentifier
,
IUntitledTextResourceInput
,
IResourceDiffInput
,
IResourceSideBySideInput
,
IEditorInput
,
IEditor
,
IEditorCloseEvent
,
IEditorPartOptions
}
from
'
vs/workbench/common/editor
'
;
import
{
IEditorInputWithOptions
,
CloseDirection
,
IEditorIdentifier
,
IUntitledTextResourceInput
,
IResourceDiffInput
,
IResourceSideBySideInput
,
IEditorInput
,
IEditor
,
IEditorCloseEvent
,
IEditorPartOptions
,
IRevertOptions
}
from
'
vs/workbench/common/editor
'
;
import
{
IEditorOpeningEvent
,
EditorServiceImpl
,
IEditorGroupView
}
from
'
vs/workbench/browser/parts/editor/editor
'
;
import
{
Event
,
Emitter
}
from
'
vs/base/common/event
'
;
import
Severity
from
'
vs/base/common/severity
'
;
...
...
@@ -92,7 +92,7 @@ import { IBackupMainService, IWorkspaceBackupInfo } from 'vs/platform/backup/ele
import
{
IEmptyWindowBackupInfo
}
from
'
vs/platform/backup/node/backup
'
;
import
{
IDialogMainService
}
from
'
vs/platform/dialogs/electron-main/dialogs
'
;
import
{
find
}
from
'
vs/base/common/arrays
'
;
import
{
WorkingCopyService
,
IWorkingCopyService
,
IRevertOptions
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
WorkingCopyService
,
IWorkingCopyService
}
from
'
vs/workbench/services/workingCopy/common/workingCopyService
'
;
import
{
IFilesConfigurationService
,
FilesConfigurationService
}
from
'
vs/workbench/services/filesConfiguration/common/filesConfigurationService
'
;
export
function
createFileInput
(
instantiationService
:
IInstantiationService
,
resource
:
URI
):
FileEditorInput
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录