@theia/monaco 1.45.0 → 1.46.0-next.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -100
- package/data/monaco-nls.json +1379 -1379
- package/data/monaco-themes/vscode/dark_plus.json +201 -201
- package/data/monaco-themes/vscode/dark_theia.json +5 -5
- package/data/monaco-themes/vscode/dark_vs.json +393 -393
- package/data/monaco-themes/vscode/hc_black.json +457 -457
- package/data/monaco-themes/vscode/hc_light.json +590 -590
- package/data/monaco-themes/vscode/hc_theia.json +5 -5
- package/data/monaco-themes/vscode/hc_theia_light.json +5 -5
- package/data/monaco-themes/vscode/light_plus.json +202 -202
- package/data/monaco-themes/vscode/light_theia.json +10 -10
- package/data/monaco-themes/vscode/light_vs.json +421 -421
- package/lib/browser/index.d.ts +1 -1
- package/lib/browser/index.js +28 -28
- package/lib/browser/markdown-renderer/monaco-markdown-renderer.d.ts +20 -24
- package/lib/browser/markdown-renderer/monaco-markdown-renderer.d.ts.map +1 -1
- package/lib/browser/markdown-renderer/monaco-markdown-renderer.js +122 -137
- package/lib/browser/markdown-renderer/monaco-markdown-renderer.js.map +1 -1
- package/lib/browser/monaco-bulk-edit-service.d.ts +12 -14
- package/lib/browser/monaco-bulk-edit-service.d.ts.map +1 -1
- package/lib/browser/monaco-bulk-edit-service.js +66 -66
- package/lib/browser/monaco-bulk-edit-service.js.map +1 -1
- package/lib/browser/monaco-color-registry.d.ts +16 -16
- package/lib/browser/monaco-color-registry.js +82 -82
- package/lib/browser/monaco-command-registry.d.ts +19 -19
- package/lib/browser/monaco-command-registry.d.ts.map +1 -1
- package/lib/browser/monaco-command-registry.js +88 -85
- package/lib/browser/monaco-command-registry.js.map +1 -1
- package/lib/browser/monaco-command-service.d.ts +21 -26
- package/lib/browser/monaco-command-service.d.ts.map +1 -1
- package/lib/browser/monaco-command-service.js +93 -92
- package/lib/browser/monaco-command-service.js.map +1 -1
- package/lib/browser/monaco-command.d.ts +88 -94
- package/lib/browser/monaco-command.d.ts.map +1 -1
- package/lib/browser/monaco-command.js +294 -307
- package/lib/browser/monaco-command.js.map +1 -1
- package/lib/browser/monaco-context-key-service.d.ts +22 -22
- package/lib/browser/monaco-context-key-service.d.ts.map +1 -1
- package/lib/browser/monaco-context-key-service.js +146 -147
- package/lib/browser/monaco-context-key-service.js.map +1 -1
- package/lib/browser/monaco-context-menu.d.ts +17 -16
- package/lib/browser/monaco-context-menu.d.ts.map +1 -1
- package/lib/browser/monaco-context-menu.js +112 -102
- package/lib/browser/monaco-context-menu.js.map +1 -1
- package/lib/browser/monaco-diff-editor.d.ts +29 -29
- package/lib/browser/monaco-diff-editor.d.ts.map +1 -1
- package/lib/browser/monaco-diff-editor.js +74 -74
- package/lib/browser/monaco-diff-editor.js.map +1 -1
- package/lib/browser/monaco-diff-navigator-factory.d.ts +6 -7
- package/lib/browser/monaco-diff-navigator-factory.d.ts.map +1 -1
- package/lib/browser/monaco-diff-navigator-factory.js +45 -66
- package/lib/browser/monaco-diff-navigator-factory.js.map +1 -1
- package/lib/browser/monaco-editor-model.d.ts +158 -156
- package/lib/browser/monaco-editor-model.d.ts.map +1 -1
- package/lib/browser/monaco-editor-model.js +562 -559
- package/lib/browser/monaco-editor-model.js.map +1 -1
- package/lib/browser/monaco-editor-provider.d.ts +70 -89
- package/lib/browser/monaco-editor-provider.d.ts.map +1 -1
- package/lib/browser/monaco-editor-provider.js +386 -440
- package/lib/browser/monaco-editor-provider.js.map +1 -1
- package/lib/browser/monaco-editor-service.d.ts +32 -27
- package/lib/browser/monaco-editor-service.d.ts.map +1 -1
- package/lib/browser/monaco-editor-service.js +158 -155
- package/lib/browser/monaco-editor-service.js.map +1 -1
- package/lib/browser/monaco-editor-zone-widget.d.ts +43 -43
- package/lib/browser/monaco-editor-zone-widget.js +194 -194
- package/lib/browser/monaco-editor.d.ts +154 -151
- package/lib/browser/monaco-editor.d.ts.map +1 -1
- package/lib/browser/monaco-editor.js +542 -524
- package/lib/browser/monaco-editor.js.map +1 -1
- package/lib/browser/monaco-formatting-conflicts.d.ts +13 -13
- package/lib/browser/monaco-formatting-conflicts.js +111 -111
- package/lib/browser/monaco-formatting-conflicts.js.map +1 -1
- package/lib/browser/monaco-frontend-application-contribution.d.ts +22 -28
- package/lib/browser/monaco-frontend-application-contribution.d.ts.map +1 -1
- package/lib/browser/monaco-frontend-application-contribution.js +178 -215
- package/lib/browser/monaco-frontend-application-contribution.js.map +1 -1
- package/lib/browser/monaco-frontend-module.d.ts +7 -7
- package/lib/browser/monaco-frontend-module.d.ts.map +1 -1
- package/lib/browser/monaco-frontend-module.js +280 -271
- package/lib/browser/monaco-frontend-module.js.map +1 -1
- package/lib/browser/monaco-gotoline-quick-access.d.ts +11 -11
- package/lib/browser/monaco-gotoline-quick-access.js +64 -64
- package/lib/browser/monaco-gotosymbol-quick-access.d.ts +16 -16
- package/lib/browser/monaco-gotosymbol-quick-access.js +70 -70
- package/lib/browser/monaco-icon-registry.d.ts +10 -11
- package/lib/browser/monaco-icon-registry.d.ts.map +1 -1
- package/lib/browser/monaco-icon-registry.js +52 -50
- package/lib/browser/monaco-icon-registry.js.map +1 -1
- package/lib/browser/monaco-indexed-db.d.ts +28 -28
- package/lib/browser/monaco-indexed-db.js +131 -131
- package/lib/browser/monaco-init.d.ts +5 -0
- package/lib/browser/monaco-init.d.ts.map +1 -0
- package/lib/browser/monaco-init.js +125 -0
- package/lib/browser/monaco-init.js.map +1 -0
- package/lib/browser/monaco-keybinding.d.ts +16 -16
- package/lib/browser/monaco-keybinding.js +134 -134
- package/lib/browser/monaco-keybinding.js.map +1 -1
- package/lib/browser/monaco-keycode-map.d.ts +2 -2
- package/lib/browser/monaco-keycode-map.js +163 -163
- package/lib/browser/monaco-keycode-map.js.map +1 -1
- package/lib/browser/monaco-languages.d.ts +35 -35
- package/lib/browser/monaco-languages.js +180 -180
- package/lib/browser/monaco-marker-collection.d.ts +18 -18
- package/lib/browser/monaco-marker-collection.js +70 -70
- package/lib/browser/monaco-menu.d.ts +20 -20
- package/lib/browser/monaco-menu.js +145 -145
- package/lib/browser/monaco-mime-service.d.ts +10 -10
- package/lib/browser/monaco-mime-service.js +78 -78
- package/lib/browser/monaco-outline-contribution.d.ts +78 -78
- package/lib/browser/monaco-outline-contribution.js +384 -384
- package/lib/browser/monaco-outline-decorator.d.ts +12 -12
- package/lib/browser/monaco-outline-decorator.js +67 -67
- package/lib/browser/monaco-quick-access-registry.d.ts +11 -11
- package/lib/browser/monaco-quick-access-registry.js +99 -99
- package/lib/browser/monaco-quick-input-service.d.ts +99 -101
- package/lib/browser/monaco-quick-input-service.d.ts.map +1 -1
- package/lib/browser/monaco-quick-input-service.js +529 -568
- package/lib/browser/monaco-quick-input-service.js.map +1 -1
- package/lib/browser/monaco-resolved-keybinding.d.ts +23 -23
- package/lib/browser/monaco-resolved-keybinding.d.ts.map +1 -1
- package/lib/browser/monaco-resolved-keybinding.js +131 -131
- package/lib/browser/monaco-resolved-keybinding.js.map +1 -1
- package/lib/browser/monaco-snippet-suggest-provider.d.ts +66 -66
- package/lib/browser/monaco-snippet-suggest-provider.js +273 -273
- package/lib/browser/monaco-status-bar-contribution.d.ts +17 -17
- package/lib/browser/monaco-status-bar-contribution.js +121 -121
- package/lib/browser/monaco-text-model-service.d.ts +51 -51
- package/lib/browser/monaco-text-model-service.js +189 -189
- package/lib/browser/monaco-text-model-service.js.map +1 -1
- package/lib/browser/monaco-theming-service.d.ts +67 -67
- package/lib/browser/monaco-theming-service.js +171 -171
- package/lib/browser/monaco-to-protocol-converter.d.ts +26 -26
- package/lib/browser/monaco-to-protocol-converter.js +61 -61
- package/lib/browser/monaco-workspace.d.ts +83 -85
- package/lib/browser/monaco-workspace.d.ts.map +1 -1
- package/lib/browser/monaco-workspace.js +384 -384
- package/lib/browser/monaco-workspace.js.map +1 -1
- package/lib/browser/protocol-to-monaco-converter.d.ts +31 -31
- package/lib/browser/protocol-to-monaco-converter.js +133 -133
- package/lib/browser/simple-monaco-editor.d.ts +45 -44
- package/lib/browser/simple-monaco-editor.d.ts.map +1 -1
- package/lib/browser/simple-monaco-editor.js +184 -176
- package/lib/browser/simple-monaco-editor.js.map +1 -1
- package/lib/browser/textmate/index.d.ts +4 -4
- package/lib/browser/textmate/index.js +31 -31
- package/lib/browser/textmate/monaco-textmate-frontend-bindings.d.ts +11 -11
- package/lib/browser/textmate/monaco-textmate-frontend-bindings.js +91 -91
- package/lib/browser/textmate/monaco-textmate-service.d.ts +30 -30
- package/lib/browser/textmate/monaco-textmate-service.js +185 -185
- package/lib/browser/textmate/monaco-textmate-service.js.map +1 -1
- package/lib/browser/textmate/monaco-theme-registry.d.ts +27 -27
- package/lib/browser/textmate/monaco-theme-registry.js +173 -173
- package/lib/browser/textmate/monaco-theme-types.d.ts +20 -20
- package/lib/browser/textmate/monaco-theme-types.js +21 -21
- package/lib/browser/textmate/textmate-contribution.d.ts +9 -9
- package/lib/browser/textmate/textmate-contribution.js +27 -27
- package/lib/browser/textmate/textmate-registry.d.ts +31 -31
- package/lib/browser/textmate/textmate-registry.js +109 -109
- package/lib/browser/textmate/textmate-snippet-completion-provider.d.ts +26 -26
- package/lib/browser/textmate/textmate-snippet-completion-provider.js +53 -53
- package/lib/browser/textmate/textmate-tokenizer.d.ts +22 -22
- package/lib/browser/textmate/textmate-tokenizer.js +65 -65
- package/lib/browser/workspace-symbol-command.d.ts +55 -55
- package/lib/browser/workspace-symbol-command.js +215 -215
- package/lib/package.spec.js +25 -25
- package/package.json +10 -10
- package/src/browser/index.ts +17 -17
- package/src/browser/markdown-renderer/monaco-markdown-renderer.ts +109 -117
- package/src/browser/monaco-bulk-edit-service.ts +64 -64
- package/src/browser/monaco-color-registry.ts +73 -73
- package/src/browser/monaco-command-registry.ts +85 -82
- package/src/browser/monaco-command-service.ts +90 -99
- package/src/browser/monaco-command.ts +303 -313
- package/src/browser/monaco-context-key-service.ts +144 -143
- package/src/browser/monaco-context-menu.ts +100 -90
- package/src/browser/monaco-diff-editor.ts +100 -101
- package/src/browser/monaco-diff-navigator-factory.ts +39 -61
- package/src/browser/monaco-editor-model.ts +684 -681
- package/src/browser/monaco-editor-provider.ts +409 -452
- package/src/browser/monaco-editor-service.ts +149 -144
- package/src/browser/monaco-editor-zone-widget.ts +250 -250
- package/src/browser/monaco-editor.ts +663 -644
- package/src/browser/monaco-formatting-conflicts.ts +116 -116
- package/src/browser/monaco-frontend-application-contribution.ts +165 -200
- package/src/browser/monaco-frontend-module.ts +328 -320
- package/src/browser/monaco-gotoline-quick-access.ts +47 -47
- package/src/browser/monaco-gotosymbol-quick-access.ts +53 -53
- package/src/browser/monaco-icon-registry.ts +49 -47
- package/src/browser/monaco-indexed-db.ts +130 -130
- package/src/browser/monaco-init.ts +114 -0
- package/src/browser/monaco-keybinding.ts +111 -111
- package/src/browser/monaco-keycode-map.ts +171 -171
- package/src/browser/monaco-languages.ts +177 -177
- package/src/browser/monaco-marker-collection.ts +83 -83
- package/src/browser/monaco-menu.ts +142 -142
- package/src/browser/monaco-mime-service.ts +71 -71
- package/src/browser/monaco-outline-contribution.ts +404 -404
- package/src/browser/monaco-outline-decorator.ts +66 -66
- package/src/browser/monaco-quick-access-registry.ts +112 -112
- package/src/browser/monaco-quick-input-service.ts +647 -676
- package/src/browser/monaco-resolved-keybinding.ts +162 -162
- package/src/browser/monaco-snippet-suggest-provider.ts +306 -306
- package/src/browser/monaco-status-bar-contribution.ts +110 -110
- package/src/browser/monaco-text-model-service.ts +199 -199
- package/src/browser/monaco-theming-service.ts +204 -204
- package/src/browser/monaco-to-protocol-converter.ts +71 -71
- package/src/browser/monaco-workspace.ts +412 -412
- package/src/browser/protocol-to-monaco-converter.ts +158 -158
- package/src/browser/simple-monaco-editor.ts +217 -210
- package/src/browser/style/index.css +263 -263
- package/src/browser/textmate/index.ts +20 -20
- package/src/browser/textmate/monaco-textmate-frontend-bindings.ts +90 -90
- package/src/browser/textmate/monaco-textmate-service.ts +187 -187
- package/src/browser/textmate/monaco-theme-registry.ts +176 -176
- package/src/browser/textmate/monaco-theme-types.ts +37 -37
- package/src/browser/textmate/textmate-contribution.ts +29 -29
- package/src/browser/textmate/textmate-registry.ts +129 -129
- package/src/browser/textmate/textmate-snippet-completion-provider.ts +73 -73
- package/src/browser/textmate/textmate-tokenizer.ts +84 -84
- package/src/browser/workspace-symbol-command.ts +196 -196
- package/src/package.spec.ts +28 -28
|
@@ -1,385 +1,385 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// *****************************************************************************
|
|
3
|
-
// Copyright (C) 2018 TypeFox and others.
|
|
4
|
-
//
|
|
5
|
-
// This program and the accompanying materials are made available under the
|
|
6
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
-
//
|
|
9
|
-
// This Source Code may also be made available under the following Secondary
|
|
10
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
-
// with the GNU Classpath Exception which is available at
|
|
13
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
-
//
|
|
15
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
-
// *****************************************************************************
|
|
17
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
-
};
|
|
23
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
24
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
|
-
};
|
|
26
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
exports.MonacoWorkspace = exports.ResourceTextEdit = exports.ResourceFileEdit = exports.WorkspaceTextEdit = exports.WorkspaceFileEdit = void 0;
|
|
28
|
-
const inversify_1 = require("@theia/core/shared/inversify");
|
|
29
|
-
const uri_1 = require("@theia/core/lib/common/uri");
|
|
30
|
-
const event_1 = require("@theia/core/lib/common/event");
|
|
31
|
-
const browser_1 = require("@theia/filesystem/lib/browser");
|
|
32
|
-
const browser_2 = require("@theia/editor/lib/browser");
|
|
33
|
-
const monaco_text_model_service_1 = require("./monaco-text-model-service");
|
|
34
|
-
const monaco_editor_1 = require("./monaco-editor");
|
|
35
|
-
const browser_3 = require("@theia/markers/lib/browser");
|
|
36
|
-
const types_1 = require("@theia/core/lib/common/types");
|
|
37
|
-
const file_service_1 = require("@theia/filesystem/lib/browser/file-service");
|
|
38
|
-
const monaco = require("@theia/monaco-editor-core");
|
|
39
|
-
const bulkEditService_1 = require("@theia/monaco-editor-core/esm/vs/editor/browser/services/bulkEditService");
|
|
40
|
-
const editorWorker_1 = require("@theia/monaco-editor-core/esm/vs/editor/common/services/editorWorker");
|
|
41
|
-
const standaloneServices_1 = require("@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices");
|
|
42
|
-
const snippetParser_1 = require("@theia/monaco-editor-core/esm/vs/editor/contrib/snippet/browser/snippetParser");
|
|
43
|
-
const common_1 = require("@theia/core/lib/common");
|
|
44
|
-
var WorkspaceFileEdit;
|
|
45
|
-
(function (WorkspaceFileEdit) {
|
|
46
|
-
function is(arg) {
|
|
47
|
-
return ('oldResource' in arg && monaco.Uri.isUri(arg.oldResource)) ||
|
|
48
|
-
('newResource' in arg && monaco.Uri.isUri(arg.newResource));
|
|
49
|
-
}
|
|
50
|
-
WorkspaceFileEdit.is = is;
|
|
51
|
-
})(WorkspaceFileEdit = exports.WorkspaceFileEdit || (exports.WorkspaceFileEdit = {}));
|
|
52
|
-
var WorkspaceTextEdit;
|
|
53
|
-
(function (WorkspaceTextEdit) {
|
|
54
|
-
function is(arg) {
|
|
55
|
-
return (0, common_1.isObject)(arg)
|
|
56
|
-
&& monaco.Uri.isUri(arg.resource)
|
|
57
|
-
&& (0, common_1.isObject)(arg.textEdit);
|
|
58
|
-
}
|
|
59
|
-
WorkspaceTextEdit.is = is;
|
|
60
|
-
})(WorkspaceTextEdit = exports.WorkspaceTextEdit || (exports.WorkspaceTextEdit = {}));
|
|
61
|
-
var ResourceFileEdit;
|
|
62
|
-
(function (ResourceFileEdit) {
|
|
63
|
-
function is(arg) {
|
|
64
|
-
return (0, common_1.isObject)(arg) && (monaco.Uri.isUri(arg.oldResource) || monaco.Uri.isUri(arg.newResource));
|
|
65
|
-
}
|
|
66
|
-
ResourceFileEdit.is = is;
|
|
67
|
-
})(ResourceFileEdit = exports.ResourceFileEdit || (exports.ResourceFileEdit = {}));
|
|
68
|
-
var ResourceTextEdit;
|
|
69
|
-
(function (ResourceTextEdit) {
|
|
70
|
-
function is(arg) {
|
|
71
|
-
return ('resource' in arg && monaco.Uri.isUri(arg.resource));
|
|
72
|
-
}
|
|
73
|
-
ResourceTextEdit.is = is;
|
|
74
|
-
})(ResourceTextEdit = exports.ResourceTextEdit || (exports.ResourceTextEdit = {}));
|
|
75
|
-
let MonacoWorkspace = class MonacoWorkspace {
|
|
76
|
-
constructor() {
|
|
77
|
-
this.ready = new Promise(resolve => {
|
|
78
|
-
this.resolveReady = resolve;
|
|
79
|
-
});
|
|
80
|
-
this.onDidOpenTextDocumentEmitter = new event_1.Emitter();
|
|
81
|
-
this.onDidOpenTextDocument = this.onDidOpenTextDocumentEmitter.event;
|
|
82
|
-
this.onDidCloseTextDocumentEmitter = new event_1.Emitter();
|
|
83
|
-
this.onDidCloseTextDocument = this.onDidCloseTextDocumentEmitter.event;
|
|
84
|
-
this.onDidChangeTextDocumentEmitter = new event_1.Emitter();
|
|
85
|
-
this.onDidChangeTextDocument = this.onDidChangeTextDocumentEmitter.event;
|
|
86
|
-
this.onWillSaveTextDocumentEmitter = new event_1.Emitter();
|
|
87
|
-
this.onWillSaveTextDocument = this.onWillSaveTextDocumentEmitter.event;
|
|
88
|
-
this.onDidSaveTextDocumentEmitter = new event_1.Emitter();
|
|
89
|
-
this.onDidSaveTextDocument = this.onDidSaveTextDocumentEmitter.event;
|
|
90
|
-
this.suppressedOpenIfDirty = [];
|
|
91
|
-
}
|
|
92
|
-
init() {
|
|
93
|
-
this.resolveReady();
|
|
94
|
-
for (const model of this.textModelService.models) {
|
|
95
|
-
this.fireDidOpen(model);
|
|
96
|
-
}
|
|
97
|
-
this.textModelService.onDidCreate(model => this.fireDidOpen(model));
|
|
98
|
-
}
|
|
99
|
-
get textDocuments() {
|
|
100
|
-
return this.textModelService.models;
|
|
101
|
-
}
|
|
102
|
-
getTextDocument(uri) {
|
|
103
|
-
return this.textModelService.get(uri);
|
|
104
|
-
}
|
|
105
|
-
fireDidOpen(model) {
|
|
106
|
-
this.doFireDidOpen(model);
|
|
107
|
-
model.textEditorModel.onDidChangeLanguage(e => {
|
|
108
|
-
this.problems.cleanAllMarkers(new uri_1.default(model.uri));
|
|
109
|
-
model.setLanguageId(e.oldLanguage);
|
|
110
|
-
try {
|
|
111
|
-
this.fireDidClose(model);
|
|
112
|
-
}
|
|
113
|
-
finally {
|
|
114
|
-
model.setLanguageId(undefined);
|
|
115
|
-
}
|
|
116
|
-
this.doFireDidOpen(model);
|
|
117
|
-
});
|
|
118
|
-
model.onDidChangeContent(event => this.fireDidChangeContent(event));
|
|
119
|
-
model.onDidSaveModel(() => this.fireDidSave(model));
|
|
120
|
-
model.onWillSaveModel(event => this.fireWillSave(event));
|
|
121
|
-
model.onDirtyChanged(() => this.openEditorIfDirty(model));
|
|
122
|
-
model.onDispose(() => this.fireDidClose(model));
|
|
123
|
-
}
|
|
124
|
-
doFireDidOpen(model) {
|
|
125
|
-
this.onDidOpenTextDocumentEmitter.fire(model);
|
|
126
|
-
}
|
|
127
|
-
fireDidClose(model) {
|
|
128
|
-
this.onDidCloseTextDocumentEmitter.fire(model);
|
|
129
|
-
}
|
|
130
|
-
fireDidChangeContent(event) {
|
|
131
|
-
this.onDidChangeTextDocumentEmitter.fire(event);
|
|
132
|
-
}
|
|
133
|
-
fireWillSave(event) {
|
|
134
|
-
this.onWillSaveTextDocumentEmitter.fire(event);
|
|
135
|
-
}
|
|
136
|
-
fireDidSave(model) {
|
|
137
|
-
this.onDidSaveTextDocumentEmitter.fire(model);
|
|
138
|
-
}
|
|
139
|
-
openEditorIfDirty(model) {
|
|
140
|
-
if (model.suppressOpenEditorWhenDirty || this.suppressedOpenIfDirty.indexOf(model) !== -1) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
if (model.dirty && monaco_editor_1.MonacoEditor.findByDocument(this.editorManager, model).length === 0) {
|
|
144
|
-
// create a new reference to make sure the model is not disposed before it is
|
|
145
|
-
// acquired by the editor, thus losing the changes that made it dirty.
|
|
146
|
-
this.textModelService.createModelReference(model.textEditorModel.uri).then(ref => {
|
|
147
|
-
(model.autoSave !== 'off' ? new Promise(resolve => model.onDidSaveModel(resolve)) :
|
|
148
|
-
this.editorManager.open(new uri_1.default(model.uri), { mode: 'open' })).then(() => ref.dispose());
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
async suppressOpenIfDirty(model, cb) {
|
|
153
|
-
this.suppressedOpenIfDirty.push(model);
|
|
154
|
-
try {
|
|
155
|
-
await cb();
|
|
156
|
-
}
|
|
157
|
-
finally {
|
|
158
|
-
const i = this.suppressedOpenIfDirty.indexOf(model);
|
|
159
|
-
if (i !== -1) {
|
|
160
|
-
this.suppressedOpenIfDirty.splice(i, 1);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Applies given edits to the given model.
|
|
166
|
-
* The model is saved if no editors is opened for it.
|
|
167
|
-
*/
|
|
168
|
-
applyBackgroundEdit(model, editOperations, shouldSave = true) {
|
|
169
|
-
return this.suppressOpenIfDirty(model, async () => {
|
|
170
|
-
const editor = monaco_editor_1.MonacoEditor.findByDocument(this.editorManager, model)[0];
|
|
171
|
-
const cursorState = editor && editor.getControl().getSelections() || [];
|
|
172
|
-
model.textEditorModel.pushStackElement();
|
|
173
|
-
model.textEditorModel.pushEditOperations(cursorState, editOperations, () => cursorState);
|
|
174
|
-
model.textEditorModel.pushStackElement();
|
|
175
|
-
if (!editor && shouldSave) {
|
|
176
|
-
await model.save();
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
async applyBulkEdit(edits, options) {
|
|
181
|
-
try {
|
|
182
|
-
let totalEdits = 0;
|
|
183
|
-
let totalFiles = 0;
|
|
184
|
-
const fileEdits = edits.filter(edit => edit instanceof bulkEditService_1.ResourceFileEdit);
|
|
185
|
-
const [snippetEdits, textEdits] = types_1.ArrayUtils.partition(edits.filter(edit => edit instanceof bulkEditService_1.ResourceTextEdit), edit => { var _a, _b; return edit.textEdit.insertAsSnippet && (edit.resource.toString() === ((_b = (_a = this.editorManager.activeEditor) === null || _a === void 0 ? void 0 : _a.getResourceUri()) === null || _b === void 0 ? void 0 : _b.toString())); });
|
|
186
|
-
if (fileEdits.length > 0) {
|
|
187
|
-
await this.performFileEdits(fileEdits);
|
|
188
|
-
}
|
|
189
|
-
if (textEdits.length > 0) {
|
|
190
|
-
const result = await this.performTextEdits(textEdits);
|
|
191
|
-
totalEdits += result.totalEdits;
|
|
192
|
-
totalFiles += result.totalFiles;
|
|
193
|
-
}
|
|
194
|
-
if (snippetEdits.length > 0) {
|
|
195
|
-
await this.performSnippetEdits(snippetEdits);
|
|
196
|
-
}
|
|
197
|
-
// when enabled (option AND setting) loop over all dirty working copies and trigger save
|
|
198
|
-
// for those that were involved in this bulk edit operation.
|
|
199
|
-
const resources = new Set(edits
|
|
200
|
-
.filter((edit) => edit instanceof bulkEditService_1.ResourceTextEdit)
|
|
201
|
-
.map(edit => edit.resource.toString()));
|
|
202
|
-
if (resources.size > 0 && (options === null || options === void 0 ? void 0 : options.respectAutoSaveConfig) && this.editorPreferences.get('files.refactoring.autoSave') === true) {
|
|
203
|
-
await this.saveAll(resources);
|
|
204
|
-
}
|
|
205
|
-
const ariaSummary = this.getAriaSummary(totalEdits, totalFiles);
|
|
206
|
-
return { ariaSummary,
|
|
207
|
-
}
|
|
208
|
-
catch (e) {
|
|
209
|
-
console.error('Failed to apply Resource edits:', e);
|
|
210
|
-
return {
|
|
211
|
-
ariaSummary: `Error applying Resource edits: ${e.toString()}`,
|
|
212
|
-
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
async saveAll(resources) {
|
|
217
|
-
await Promise.all(Array.from(resources.values()).map(uri => { var _a; return (_a = this.textModelService.get(uri)) === null || _a === void 0 ? void 0 : _a.save(); }));
|
|
218
|
-
}
|
|
219
|
-
getAriaSummary(totalEdits, totalFiles) {
|
|
220
|
-
if (totalEdits === 0) {
|
|
221
|
-
return common_1.nls.localizeByDefault('Made no edits');
|
|
222
|
-
}
|
|
223
|
-
if (totalEdits > 1 && totalFiles > 1) {
|
|
224
|
-
return common_1.nls.localizeByDefault('Made {0} text edits in {1} files', totalEdits, totalFiles);
|
|
225
|
-
}
|
|
226
|
-
return common_1.nls.localizeByDefault('Made {0} text edits in one file', totalEdits);
|
|
227
|
-
}
|
|
228
|
-
async performTextEdits(edits) {
|
|
229
|
-
let totalEdits = 0;
|
|
230
|
-
let totalFiles = 0;
|
|
231
|
-
const resourceEdits = new Map();
|
|
232
|
-
for (const edit of edits) {
|
|
233
|
-
if (typeof edit.versionId === 'number') {
|
|
234
|
-
const model = this.textModelService.get(edit.resource.toString());
|
|
235
|
-
if (model && model.textEditorModel.getVersionId() !== edit.versionId) {
|
|
236
|
-
throw new Error(`${model.uri} has changed in the meantime`);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
const key = edit.resource.toString();
|
|
240
|
-
let array = resourceEdits.get(key);
|
|
241
|
-
if (!array) {
|
|
242
|
-
array = [];
|
|
243
|
-
resourceEdits.set(key, array);
|
|
244
|
-
}
|
|
245
|
-
array.push(edit);
|
|
246
|
-
}
|
|
247
|
-
const pending = [];
|
|
248
|
-
for (const [key, value] of resourceEdits) {
|
|
249
|
-
pending.push((async () => {
|
|
250
|
-
var _a;
|
|
251
|
-
const uri = monaco.Uri.parse(key);
|
|
252
|
-
let eol;
|
|
253
|
-
const editOperations = [];
|
|
254
|
-
const minimalEdits = await standaloneServices_1.StandaloneServices.get(editorWorker_1.IEditorWorkerService)
|
|
255
|
-
.computeMoreMinimalEdits(uri, value.map(edit => this.transformSnippetStringToInsertText(edit)));
|
|
256
|
-
if (minimalEdits) {
|
|
257
|
-
for (const textEdit of minimalEdits) {
|
|
258
|
-
if (typeof textEdit.eol === 'number') {
|
|
259
|
-
eol = textEdit.eol;
|
|
260
|
-
}
|
|
261
|
-
if (monaco.Range.isEmpty(textEdit.range) && !textEdit.text) {
|
|
262
|
-
// skip no-op
|
|
263
|
-
continue;
|
|
264
|
-
}
|
|
265
|
-
editOperations.push({
|
|
266
|
-
forceMoveMarkers: false,
|
|
267
|
-
range: monaco.Range.lift(textEdit.range),
|
|
268
|
-
text: textEdit.text
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
if (!editOperations.length && eol === undefined) {
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
const reference = await this.textModelService.createModelReference(uri);
|
|
276
|
-
try {
|
|
277
|
-
const document = reference.object;
|
|
278
|
-
const model = document.textEditorModel;
|
|
279
|
-
const editor = monaco_editor_1.MonacoEditor.findByDocument(this.editorManager, document)[0];
|
|
280
|
-
const cursorState = (_a = editor === null || editor === void 0 ? void 0 : editor.getControl().getSelections()) !== null && _a !== void 0 ? _a : [];
|
|
281
|
-
// start a fresh operation
|
|
282
|
-
model.pushStackElement();
|
|
283
|
-
if (editOperations.length) {
|
|
284
|
-
model.pushEditOperations(cursorState, editOperations, () => cursorState);
|
|
285
|
-
}
|
|
286
|
-
if (eol !== undefined) {
|
|
287
|
-
model.pushEOL(eol);
|
|
288
|
-
}
|
|
289
|
-
// push again to make this change an undoable operation
|
|
290
|
-
model.pushStackElement();
|
|
291
|
-
totalFiles += 1;
|
|
292
|
-
totalEdits += editOperations.length;
|
|
293
|
-
}
|
|
294
|
-
finally {
|
|
295
|
-
reference.dispose();
|
|
296
|
-
}
|
|
297
|
-
})());
|
|
298
|
-
}
|
|
299
|
-
await Promise.all(pending);
|
|
300
|
-
return { totalEdits, totalFiles };
|
|
301
|
-
}
|
|
302
|
-
async performFileEdits(edits) {
|
|
303
|
-
for (const edit of edits) {
|
|
304
|
-
const options = edit.options || {};
|
|
305
|
-
if (edit.newResource && edit.oldResource) {
|
|
306
|
-
// rename
|
|
307
|
-
if (options.overwrite === undefined && options.ignoreIfExists && await this.fileService.exists(
|
|
308
|
-
return; // not overwriting, but ignoring, and the target file exists
|
|
309
|
-
}
|
|
310
|
-
await this.fileService.move(
|
|
311
|
-
}
|
|
312
|
-
else if (!edit.newResource && edit.oldResource) {
|
|
313
|
-
// delete file
|
|
314
|
-
if (await this.fileService.exists(
|
|
315
|
-
let useTrash = this.filePreferences['files.enableTrash'];
|
|
316
|
-
if (useTrash && !(this.fileService.hasCapability(
|
|
317
|
-
useTrash = false; // not supported by provider
|
|
318
|
-
}
|
|
319
|
-
await this.fileService.delete(
|
|
320
|
-
}
|
|
321
|
-
else if (!options.ignoreIfNotExists) {
|
|
322
|
-
throw new Error(`${edit.oldResource} does not exist and can not be deleted`);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
else if (edit.newResource && !edit.oldResource) {
|
|
326
|
-
// create file
|
|
327
|
-
if (options.overwrite === undefined && options.ignoreIfExists && await this.fileService.exists(
|
|
328
|
-
return; // not overwriting, but ignoring, and the target file exists
|
|
329
|
-
}
|
|
330
|
-
await this.fileService.create(
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
async performSnippetEdits(edits) {
|
|
335
|
-
var _a;
|
|
336
|
-
const activeEditor = (_a = monaco_editor_1.MonacoEditor.getActive(this.editorManager)) === null || _a === void 0 ? void 0 : _a.getControl();
|
|
337
|
-
if (activeEditor) {
|
|
338
|
-
const snippetController = activeEditor.getContribution('snippetController2');
|
|
339
|
-
snippetController.apply(edits.map(edit => ({ range: monaco.Range.lift(edit.textEdit.range), template: edit.textEdit.text })));
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
transformSnippetStringToInsertText(resourceEdit) {
|
|
343
|
-
if (resourceEdit.textEdit.insertAsSnippet) {
|
|
344
|
-
return { ...resourceEdit.textEdit, insertAsSnippet: false, text: snippetParser_1.SnippetParser.asInsertText(resourceEdit.textEdit.text) };
|
|
345
|
-
}
|
|
346
|
-
else {
|
|
347
|
-
return resourceEdit.textEdit;
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
};
|
|
351
|
-
__decorate([
|
|
352
|
-
(0, inversify_1.inject)(file_service_1.FileService),
|
|
353
|
-
__metadata("design:type", file_service_1.FileService)
|
|
354
|
-
], MonacoWorkspace.prototype, "fileService", void 0);
|
|
355
|
-
__decorate([
|
|
356
|
-
(0, inversify_1.inject)(browser_1.FileSystemPreferences),
|
|
357
|
-
__metadata("design:type", Object)
|
|
358
|
-
], MonacoWorkspace.prototype, "filePreferences", void 0);
|
|
359
|
-
__decorate([
|
|
360
|
-
(0, inversify_1.inject)(browser_2.EditorPreferences),
|
|
361
|
-
__metadata("design:type", Object)
|
|
362
|
-
], MonacoWorkspace.prototype, "editorPreferences", void 0);
|
|
363
|
-
__decorate([
|
|
364
|
-
(0, inversify_1.inject)(monaco_text_model_service_1.MonacoTextModelService),
|
|
365
|
-
__metadata("design:type", monaco_text_model_service_1.MonacoTextModelService)
|
|
366
|
-
], MonacoWorkspace.prototype, "textModelService", void 0);
|
|
367
|
-
__decorate([
|
|
368
|
-
(0, inversify_1.inject)(browser_2.EditorManager),
|
|
369
|
-
__metadata("design:type", browser_2.EditorManager)
|
|
370
|
-
], MonacoWorkspace.prototype, "editorManager", void 0);
|
|
371
|
-
__decorate([
|
|
372
|
-
(0, inversify_1.inject)(browser_3.ProblemManager),
|
|
373
|
-
__metadata("design:type", browser_3.ProblemManager)
|
|
374
|
-
], MonacoWorkspace.prototype, "problems", void 0);
|
|
375
|
-
__decorate([
|
|
376
|
-
(0, inversify_1.postConstruct)(),
|
|
377
|
-
__metadata("design:type", Function),
|
|
378
|
-
__metadata("design:paramtypes", []),
|
|
379
|
-
__metadata("design:returntype", void 0)
|
|
380
|
-
], MonacoWorkspace.prototype, "init", null);
|
|
381
|
-
MonacoWorkspace = __decorate([
|
|
382
|
-
(0, inversify_1.injectable)()
|
|
383
|
-
], MonacoWorkspace);
|
|
384
|
-
exports.MonacoWorkspace = MonacoWorkspace;
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2018 TypeFox and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
+
};
|
|
23
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
24
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.MonacoWorkspace = exports.ResourceTextEdit = exports.ResourceFileEdit = exports.WorkspaceTextEdit = exports.WorkspaceFileEdit = void 0;
|
|
28
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
29
|
+
const uri_1 = require("@theia/core/lib/common/uri");
|
|
30
|
+
const event_1 = require("@theia/core/lib/common/event");
|
|
31
|
+
const browser_1 = require("@theia/filesystem/lib/browser");
|
|
32
|
+
const browser_2 = require("@theia/editor/lib/browser");
|
|
33
|
+
const monaco_text_model_service_1 = require("./monaco-text-model-service");
|
|
34
|
+
const monaco_editor_1 = require("./monaco-editor");
|
|
35
|
+
const browser_3 = require("@theia/markers/lib/browser");
|
|
36
|
+
const types_1 = require("@theia/core/lib/common/types");
|
|
37
|
+
const file_service_1 = require("@theia/filesystem/lib/browser/file-service");
|
|
38
|
+
const monaco = require("@theia/monaco-editor-core");
|
|
39
|
+
const bulkEditService_1 = require("@theia/monaco-editor-core/esm/vs/editor/browser/services/bulkEditService");
|
|
40
|
+
const editorWorker_1 = require("@theia/monaco-editor-core/esm/vs/editor/common/services/editorWorker");
|
|
41
|
+
const standaloneServices_1 = require("@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices");
|
|
42
|
+
const snippetParser_1 = require("@theia/monaco-editor-core/esm/vs/editor/contrib/snippet/browser/snippetParser");
|
|
43
|
+
const common_1 = require("@theia/core/lib/common");
|
|
44
|
+
var WorkspaceFileEdit;
|
|
45
|
+
(function (WorkspaceFileEdit) {
|
|
46
|
+
function is(arg) {
|
|
47
|
+
return ('oldResource' in arg && monaco.Uri.isUri(arg.oldResource)) ||
|
|
48
|
+
('newResource' in arg && monaco.Uri.isUri(arg.newResource));
|
|
49
|
+
}
|
|
50
|
+
WorkspaceFileEdit.is = is;
|
|
51
|
+
})(WorkspaceFileEdit = exports.WorkspaceFileEdit || (exports.WorkspaceFileEdit = {}));
|
|
52
|
+
var WorkspaceTextEdit;
|
|
53
|
+
(function (WorkspaceTextEdit) {
|
|
54
|
+
function is(arg) {
|
|
55
|
+
return (0, common_1.isObject)(arg)
|
|
56
|
+
&& monaco.Uri.isUri(arg.resource)
|
|
57
|
+
&& (0, common_1.isObject)(arg.textEdit);
|
|
58
|
+
}
|
|
59
|
+
WorkspaceTextEdit.is = is;
|
|
60
|
+
})(WorkspaceTextEdit = exports.WorkspaceTextEdit || (exports.WorkspaceTextEdit = {}));
|
|
61
|
+
var ResourceFileEdit;
|
|
62
|
+
(function (ResourceFileEdit) {
|
|
63
|
+
function is(arg) {
|
|
64
|
+
return (0, common_1.isObject)(arg) && (monaco.Uri.isUri(arg.oldResource) || monaco.Uri.isUri(arg.newResource));
|
|
65
|
+
}
|
|
66
|
+
ResourceFileEdit.is = is;
|
|
67
|
+
})(ResourceFileEdit = exports.ResourceFileEdit || (exports.ResourceFileEdit = {}));
|
|
68
|
+
var ResourceTextEdit;
|
|
69
|
+
(function (ResourceTextEdit) {
|
|
70
|
+
function is(arg) {
|
|
71
|
+
return ('resource' in arg && monaco.Uri.isUri(arg.resource));
|
|
72
|
+
}
|
|
73
|
+
ResourceTextEdit.is = is;
|
|
74
|
+
})(ResourceTextEdit = exports.ResourceTextEdit || (exports.ResourceTextEdit = {}));
|
|
75
|
+
let MonacoWorkspace = class MonacoWorkspace {
|
|
76
|
+
constructor() {
|
|
77
|
+
this.ready = new Promise(resolve => {
|
|
78
|
+
this.resolveReady = resolve;
|
|
79
|
+
});
|
|
80
|
+
this.onDidOpenTextDocumentEmitter = new event_1.Emitter();
|
|
81
|
+
this.onDidOpenTextDocument = this.onDidOpenTextDocumentEmitter.event;
|
|
82
|
+
this.onDidCloseTextDocumentEmitter = new event_1.Emitter();
|
|
83
|
+
this.onDidCloseTextDocument = this.onDidCloseTextDocumentEmitter.event;
|
|
84
|
+
this.onDidChangeTextDocumentEmitter = new event_1.Emitter();
|
|
85
|
+
this.onDidChangeTextDocument = this.onDidChangeTextDocumentEmitter.event;
|
|
86
|
+
this.onWillSaveTextDocumentEmitter = new event_1.Emitter();
|
|
87
|
+
this.onWillSaveTextDocument = this.onWillSaveTextDocumentEmitter.event;
|
|
88
|
+
this.onDidSaveTextDocumentEmitter = new event_1.Emitter();
|
|
89
|
+
this.onDidSaveTextDocument = this.onDidSaveTextDocumentEmitter.event;
|
|
90
|
+
this.suppressedOpenIfDirty = [];
|
|
91
|
+
}
|
|
92
|
+
init() {
|
|
93
|
+
this.resolveReady();
|
|
94
|
+
for (const model of this.textModelService.models) {
|
|
95
|
+
this.fireDidOpen(model);
|
|
96
|
+
}
|
|
97
|
+
this.textModelService.onDidCreate(model => this.fireDidOpen(model));
|
|
98
|
+
}
|
|
99
|
+
get textDocuments() {
|
|
100
|
+
return this.textModelService.models;
|
|
101
|
+
}
|
|
102
|
+
getTextDocument(uri) {
|
|
103
|
+
return this.textModelService.get(uri);
|
|
104
|
+
}
|
|
105
|
+
fireDidOpen(model) {
|
|
106
|
+
this.doFireDidOpen(model);
|
|
107
|
+
model.textEditorModel.onDidChangeLanguage(e => {
|
|
108
|
+
this.problems.cleanAllMarkers(new uri_1.default(model.uri));
|
|
109
|
+
model.setLanguageId(e.oldLanguage);
|
|
110
|
+
try {
|
|
111
|
+
this.fireDidClose(model);
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
model.setLanguageId(undefined);
|
|
115
|
+
}
|
|
116
|
+
this.doFireDidOpen(model);
|
|
117
|
+
});
|
|
118
|
+
model.onDidChangeContent(event => this.fireDidChangeContent(event));
|
|
119
|
+
model.onDidSaveModel(() => this.fireDidSave(model));
|
|
120
|
+
model.onWillSaveModel(event => this.fireWillSave(event));
|
|
121
|
+
model.onDirtyChanged(() => this.openEditorIfDirty(model));
|
|
122
|
+
model.onDispose(() => this.fireDidClose(model));
|
|
123
|
+
}
|
|
124
|
+
doFireDidOpen(model) {
|
|
125
|
+
this.onDidOpenTextDocumentEmitter.fire(model);
|
|
126
|
+
}
|
|
127
|
+
fireDidClose(model) {
|
|
128
|
+
this.onDidCloseTextDocumentEmitter.fire(model);
|
|
129
|
+
}
|
|
130
|
+
fireDidChangeContent(event) {
|
|
131
|
+
this.onDidChangeTextDocumentEmitter.fire(event);
|
|
132
|
+
}
|
|
133
|
+
fireWillSave(event) {
|
|
134
|
+
this.onWillSaveTextDocumentEmitter.fire(event);
|
|
135
|
+
}
|
|
136
|
+
fireDidSave(model) {
|
|
137
|
+
this.onDidSaveTextDocumentEmitter.fire(model);
|
|
138
|
+
}
|
|
139
|
+
openEditorIfDirty(model) {
|
|
140
|
+
if (model.suppressOpenEditorWhenDirty || this.suppressedOpenIfDirty.indexOf(model) !== -1) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (model.dirty && monaco_editor_1.MonacoEditor.findByDocument(this.editorManager, model).length === 0) {
|
|
144
|
+
// create a new reference to make sure the model is not disposed before it is
|
|
145
|
+
// acquired by the editor, thus losing the changes that made it dirty.
|
|
146
|
+
this.textModelService.createModelReference(model.textEditorModel.uri).then(ref => {
|
|
147
|
+
(model.autoSave !== 'off' ? new Promise(resolve => model.onDidSaveModel(resolve)) :
|
|
148
|
+
this.editorManager.open(new uri_1.default(model.uri), { mode: 'open' })).then(() => ref.dispose());
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async suppressOpenIfDirty(model, cb) {
|
|
153
|
+
this.suppressedOpenIfDirty.push(model);
|
|
154
|
+
try {
|
|
155
|
+
await cb();
|
|
156
|
+
}
|
|
157
|
+
finally {
|
|
158
|
+
const i = this.suppressedOpenIfDirty.indexOf(model);
|
|
159
|
+
if (i !== -1) {
|
|
160
|
+
this.suppressedOpenIfDirty.splice(i, 1);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Applies given edits to the given model.
|
|
166
|
+
* The model is saved if no editors is opened for it.
|
|
167
|
+
*/
|
|
168
|
+
applyBackgroundEdit(model, editOperations, shouldSave = true) {
|
|
169
|
+
return this.suppressOpenIfDirty(model, async () => {
|
|
170
|
+
const editor = monaco_editor_1.MonacoEditor.findByDocument(this.editorManager, model)[0];
|
|
171
|
+
const cursorState = editor && editor.getControl().getSelections() || [];
|
|
172
|
+
model.textEditorModel.pushStackElement();
|
|
173
|
+
model.textEditorModel.pushEditOperations(cursorState, editOperations, () => cursorState);
|
|
174
|
+
model.textEditorModel.pushStackElement();
|
|
175
|
+
if (!editor && shouldSave) {
|
|
176
|
+
await model.save();
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
async applyBulkEdit(edits, options) {
|
|
181
|
+
try {
|
|
182
|
+
let totalEdits = 0;
|
|
183
|
+
let totalFiles = 0;
|
|
184
|
+
const fileEdits = edits.filter(edit => edit instanceof bulkEditService_1.ResourceFileEdit);
|
|
185
|
+
const [snippetEdits, textEdits] = types_1.ArrayUtils.partition(edits.filter(edit => edit instanceof bulkEditService_1.ResourceTextEdit), edit => { var _a, _b; return edit.textEdit.insertAsSnippet && (edit.resource.toString() === ((_b = (_a = this.editorManager.activeEditor) === null || _a === void 0 ? void 0 : _a.getResourceUri()) === null || _b === void 0 ? void 0 : _b.toString())); });
|
|
186
|
+
if (fileEdits.length > 0) {
|
|
187
|
+
await this.performFileEdits(fileEdits);
|
|
188
|
+
}
|
|
189
|
+
if (textEdits.length > 0) {
|
|
190
|
+
const result = await this.performTextEdits(textEdits);
|
|
191
|
+
totalEdits += result.totalEdits;
|
|
192
|
+
totalFiles += result.totalFiles;
|
|
193
|
+
}
|
|
194
|
+
if (snippetEdits.length > 0) {
|
|
195
|
+
await this.performSnippetEdits(snippetEdits);
|
|
196
|
+
}
|
|
197
|
+
// when enabled (option AND setting) loop over all dirty working copies and trigger save
|
|
198
|
+
// for those that were involved in this bulk edit operation.
|
|
199
|
+
const resources = new Set(edits
|
|
200
|
+
.filter((edit) => edit instanceof bulkEditService_1.ResourceTextEdit)
|
|
201
|
+
.map(edit => edit.resource.toString()));
|
|
202
|
+
if (resources.size > 0 && (options === null || options === void 0 ? void 0 : options.respectAutoSaveConfig) && this.editorPreferences.get('files.refactoring.autoSave') === true) {
|
|
203
|
+
await this.saveAll(resources);
|
|
204
|
+
}
|
|
205
|
+
const ariaSummary = this.getAriaSummary(totalEdits, totalFiles);
|
|
206
|
+
return { ariaSummary, isApplied: true };
|
|
207
|
+
}
|
|
208
|
+
catch (e) {
|
|
209
|
+
console.error('Failed to apply Resource edits:', e);
|
|
210
|
+
return {
|
|
211
|
+
ariaSummary: `Error applying Resource edits: ${e.toString()}`,
|
|
212
|
+
isApplied: false
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async saveAll(resources) {
|
|
217
|
+
await Promise.all(Array.from(resources.values()).map(uri => { var _a; return (_a = this.textModelService.get(uri)) === null || _a === void 0 ? void 0 : _a.save(); }));
|
|
218
|
+
}
|
|
219
|
+
getAriaSummary(totalEdits, totalFiles) {
|
|
220
|
+
if (totalEdits === 0) {
|
|
221
|
+
return common_1.nls.localizeByDefault('Made no edits');
|
|
222
|
+
}
|
|
223
|
+
if (totalEdits > 1 && totalFiles > 1) {
|
|
224
|
+
return common_1.nls.localizeByDefault('Made {0} text edits in {1} files', totalEdits, totalFiles);
|
|
225
|
+
}
|
|
226
|
+
return common_1.nls.localizeByDefault('Made {0} text edits in one file', totalEdits);
|
|
227
|
+
}
|
|
228
|
+
async performTextEdits(edits) {
|
|
229
|
+
let totalEdits = 0;
|
|
230
|
+
let totalFiles = 0;
|
|
231
|
+
const resourceEdits = new Map();
|
|
232
|
+
for (const edit of edits) {
|
|
233
|
+
if (typeof edit.versionId === 'number') {
|
|
234
|
+
const model = this.textModelService.get(edit.resource.toString());
|
|
235
|
+
if (model && model.textEditorModel.getVersionId() !== edit.versionId) {
|
|
236
|
+
throw new Error(`${model.uri} has changed in the meantime`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const key = edit.resource.toString();
|
|
240
|
+
let array = resourceEdits.get(key);
|
|
241
|
+
if (!array) {
|
|
242
|
+
array = [];
|
|
243
|
+
resourceEdits.set(key, array);
|
|
244
|
+
}
|
|
245
|
+
array.push(edit);
|
|
246
|
+
}
|
|
247
|
+
const pending = [];
|
|
248
|
+
for (const [key, value] of resourceEdits) {
|
|
249
|
+
pending.push((async () => {
|
|
250
|
+
var _a;
|
|
251
|
+
const uri = monaco.Uri.parse(key);
|
|
252
|
+
let eol;
|
|
253
|
+
const editOperations = [];
|
|
254
|
+
const minimalEdits = await standaloneServices_1.StandaloneServices.get(editorWorker_1.IEditorWorkerService)
|
|
255
|
+
.computeMoreMinimalEdits(uri, value.map(edit => this.transformSnippetStringToInsertText(edit)));
|
|
256
|
+
if (minimalEdits) {
|
|
257
|
+
for (const textEdit of minimalEdits) {
|
|
258
|
+
if (typeof textEdit.eol === 'number') {
|
|
259
|
+
eol = textEdit.eol;
|
|
260
|
+
}
|
|
261
|
+
if (monaco.Range.isEmpty(textEdit.range) && !textEdit.text) {
|
|
262
|
+
// skip no-op
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
editOperations.push({
|
|
266
|
+
forceMoveMarkers: false,
|
|
267
|
+
range: monaco.Range.lift(textEdit.range),
|
|
268
|
+
text: textEdit.text
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (!editOperations.length && eol === undefined) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
const reference = await this.textModelService.createModelReference(uri);
|
|
276
|
+
try {
|
|
277
|
+
const document = reference.object;
|
|
278
|
+
const model = document.textEditorModel;
|
|
279
|
+
const editor = monaco_editor_1.MonacoEditor.findByDocument(this.editorManager, document)[0];
|
|
280
|
+
const cursorState = (_a = editor === null || editor === void 0 ? void 0 : editor.getControl().getSelections()) !== null && _a !== void 0 ? _a : [];
|
|
281
|
+
// start a fresh operation
|
|
282
|
+
model.pushStackElement();
|
|
283
|
+
if (editOperations.length) {
|
|
284
|
+
model.pushEditOperations(cursorState, editOperations, () => cursorState);
|
|
285
|
+
}
|
|
286
|
+
if (eol !== undefined) {
|
|
287
|
+
model.pushEOL(eol);
|
|
288
|
+
}
|
|
289
|
+
// push again to make this change an undoable operation
|
|
290
|
+
model.pushStackElement();
|
|
291
|
+
totalFiles += 1;
|
|
292
|
+
totalEdits += editOperations.length;
|
|
293
|
+
}
|
|
294
|
+
finally {
|
|
295
|
+
reference.dispose();
|
|
296
|
+
}
|
|
297
|
+
})());
|
|
298
|
+
}
|
|
299
|
+
await Promise.all(pending);
|
|
300
|
+
return { totalEdits, totalFiles };
|
|
301
|
+
}
|
|
302
|
+
async performFileEdits(edits) {
|
|
303
|
+
for (const edit of edits) {
|
|
304
|
+
const options = edit.options || {};
|
|
305
|
+
if (edit.newResource && edit.oldResource) {
|
|
306
|
+
// rename
|
|
307
|
+
if (options.overwrite === undefined && options.ignoreIfExists && await this.fileService.exists(uri_1.default.fromComponents(edit.newResource))) {
|
|
308
|
+
return; // not overwriting, but ignoring, and the target file exists
|
|
309
|
+
}
|
|
310
|
+
await this.fileService.move(uri_1.default.fromComponents(edit.oldResource), uri_1.default.fromComponents(edit.newResource), { overwrite: options.overwrite });
|
|
311
|
+
}
|
|
312
|
+
else if (!edit.newResource && edit.oldResource) {
|
|
313
|
+
// delete file
|
|
314
|
+
if (await this.fileService.exists(uri_1.default.fromComponents(edit.oldResource))) {
|
|
315
|
+
let useTrash = this.filePreferences['files.enableTrash'];
|
|
316
|
+
if (useTrash && !(this.fileService.hasCapability(uri_1.default.fromComponents(edit.oldResource), 4096 /* Trash */))) {
|
|
317
|
+
useTrash = false; // not supported by provider
|
|
318
|
+
}
|
|
319
|
+
await this.fileService.delete(uri_1.default.fromComponents(edit.oldResource), { useTrash, recursive: options.recursive });
|
|
320
|
+
}
|
|
321
|
+
else if (!options.ignoreIfNotExists) {
|
|
322
|
+
throw new Error(`${edit.oldResource} does not exist and can not be deleted`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
else if (edit.newResource && !edit.oldResource) {
|
|
326
|
+
// create file
|
|
327
|
+
if (options.overwrite === undefined && options.ignoreIfExists && await this.fileService.exists(uri_1.default.fromComponents(edit.newResource))) {
|
|
328
|
+
return; // not overwriting, but ignoring, and the target file exists
|
|
329
|
+
}
|
|
330
|
+
await this.fileService.create(uri_1.default.fromComponents(edit.newResource), undefined, { overwrite: options.overwrite });
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
async performSnippetEdits(edits) {
|
|
335
|
+
var _a;
|
|
336
|
+
const activeEditor = (_a = monaco_editor_1.MonacoEditor.getActive(this.editorManager)) === null || _a === void 0 ? void 0 : _a.getControl();
|
|
337
|
+
if (activeEditor) {
|
|
338
|
+
const snippetController = activeEditor.getContribution('snippetController2');
|
|
339
|
+
snippetController.apply(edits.map(edit => ({ range: monaco.Range.lift(edit.textEdit.range), template: edit.textEdit.text })));
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
transformSnippetStringToInsertText(resourceEdit) {
|
|
343
|
+
if (resourceEdit.textEdit.insertAsSnippet) {
|
|
344
|
+
return { ...resourceEdit.textEdit, insertAsSnippet: false, text: snippetParser_1.SnippetParser.asInsertText(resourceEdit.textEdit.text) };
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
return resourceEdit.textEdit;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
__decorate([
|
|
352
|
+
(0, inversify_1.inject)(file_service_1.FileService),
|
|
353
|
+
__metadata("design:type", file_service_1.FileService)
|
|
354
|
+
], MonacoWorkspace.prototype, "fileService", void 0);
|
|
355
|
+
__decorate([
|
|
356
|
+
(0, inversify_1.inject)(browser_1.FileSystemPreferences),
|
|
357
|
+
__metadata("design:type", Object)
|
|
358
|
+
], MonacoWorkspace.prototype, "filePreferences", void 0);
|
|
359
|
+
__decorate([
|
|
360
|
+
(0, inversify_1.inject)(browser_2.EditorPreferences),
|
|
361
|
+
__metadata("design:type", Object)
|
|
362
|
+
], MonacoWorkspace.prototype, "editorPreferences", void 0);
|
|
363
|
+
__decorate([
|
|
364
|
+
(0, inversify_1.inject)(monaco_text_model_service_1.MonacoTextModelService),
|
|
365
|
+
__metadata("design:type", monaco_text_model_service_1.MonacoTextModelService)
|
|
366
|
+
], MonacoWorkspace.prototype, "textModelService", void 0);
|
|
367
|
+
__decorate([
|
|
368
|
+
(0, inversify_1.inject)(browser_2.EditorManager),
|
|
369
|
+
__metadata("design:type", browser_2.EditorManager)
|
|
370
|
+
], MonacoWorkspace.prototype, "editorManager", void 0);
|
|
371
|
+
__decorate([
|
|
372
|
+
(0, inversify_1.inject)(browser_3.ProblemManager),
|
|
373
|
+
__metadata("design:type", browser_3.ProblemManager)
|
|
374
|
+
], MonacoWorkspace.prototype, "problems", void 0);
|
|
375
|
+
__decorate([
|
|
376
|
+
(0, inversify_1.postConstruct)(),
|
|
377
|
+
__metadata("design:type", Function),
|
|
378
|
+
__metadata("design:paramtypes", []),
|
|
379
|
+
__metadata("design:returntype", void 0)
|
|
380
|
+
], MonacoWorkspace.prototype, "init", null);
|
|
381
|
+
MonacoWorkspace = __decorate([
|
|
382
|
+
(0, inversify_1.injectable)()
|
|
383
|
+
], MonacoWorkspace);
|
|
384
|
+
exports.MonacoWorkspace = MonacoWorkspace;
|
|
385
385
|
//# sourceMappingURL=monaco-workspace.js.map
|