@theia/bulk-edit 1.45.1 → 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.
Files changed (37) hide show
  1. package/README.md +30 -30
  2. package/lib/browser/bulk-edit-commands.d.ts +6 -6
  3. package/lib/browser/bulk-edit-commands.js +33 -33
  4. package/lib/browser/bulk-edit-contribution.d.ts +19 -19
  5. package/lib/browser/bulk-edit-contribution.js +115 -115
  6. package/lib/browser/bulk-edit-frontend-module.d.ts +4 -4
  7. package/lib/browser/bulk-edit-frontend-module.js +37 -37
  8. package/lib/browser/bulk-edit-tree/bulk-edit-node-selection.d.ts +14 -14
  9. package/lib/browser/bulk-edit-tree/bulk-edit-node-selection.js +35 -35
  10. package/lib/browser/bulk-edit-tree/bulk-edit-tree-container.d.ts +4 -4
  11. package/lib/browser/bulk-edit-tree/bulk-edit-tree-container.js +35 -35
  12. package/lib/browser/bulk-edit-tree/bulk-edit-tree-model.d.ts +10 -10
  13. package/lib/browser/bulk-edit-tree/bulk-edit-tree-model.js +58 -58
  14. package/lib/browser/bulk-edit-tree/bulk-edit-tree-widget.d.ts +33 -33
  15. package/lib/browser/bulk-edit-tree/bulk-edit-tree-widget.js +231 -231
  16. package/lib/browser/bulk-edit-tree/bulk-edit-tree.d.ts +24 -24
  17. package/lib/browser/bulk-edit-tree/bulk-edit-tree.js +112 -112
  18. package/lib/browser/bulk-edit-tree/bulk-edit-tree.spec.d.ts +1 -1
  19. package/lib/browser/bulk-edit-tree/bulk-edit-tree.spec.js +62 -62
  20. package/lib/browser/bulk-edit-tree/bulk-edit-tree.spec.js.map +1 -1
  21. package/lib/browser/bulk-edit-tree/index.d.ts +5 -5
  22. package/lib/browser/bulk-edit-tree/index.js +32 -32
  23. package/lib/browser/bulk-edit-tree-label-provider.d.ts +15 -15
  24. package/lib/browser/bulk-edit-tree-label-provider.js +80 -80
  25. package/package.json +9 -9
  26. package/src/browser/bulk-edit-commands.ts +34 -34
  27. package/src/browser/bulk-edit-contribution.ts +112 -112
  28. package/src/browser/bulk-edit-frontend-module.ts +39 -39
  29. package/src/browser/bulk-edit-tree/bulk-edit-node-selection.ts +44 -44
  30. package/src/browser/bulk-edit-tree/bulk-edit-tree-container.ts +35 -35
  31. package/src/browser/bulk-edit-tree/bulk-edit-tree-model.ts +42 -42
  32. package/src/browser/bulk-edit-tree/bulk-edit-tree-widget.tsx +231 -231
  33. package/src/browser/bulk-edit-tree/bulk-edit-tree.spec.ts +73 -73
  34. package/src/browser/bulk-edit-tree/bulk-edit-tree.ts +114 -114
  35. package/src/browser/bulk-edit-tree/index.ts +21 -21
  36. package/src/browser/bulk-edit-tree-label-provider.ts +71 -71
  37. package/src/browser/style/bulk-edit.css +66 -66
@@ -1,231 +1,231 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2021 SAP SE or an SAP affiliate company and others.
3
- //
4
- // This program and the accompanying materials are made available under the
5
- // terms of the Eclipse Public License v. 2.0 which is available at
6
- // http://www.eclipse.org/legal/epl-2.0.
7
- //
8
- // This Source Code may also be made available under the following Secondary
9
- // Licenses when the conditions for such availability set forth in the Eclipse
10
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
- // with the GNU Classpath Exception which is available at
12
- // https://www.gnu.org/software/classpath/license.html.
13
- //
14
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import { injectable, inject, optional } from '@theia/core/shared/inversify';
18
- import {
19
- DiffUris, TreeWidget, TreeProps, ContextMenuRenderer, TreeNode, TreeModel,
20
- CompositeTreeNode, NodeProps, QuickViewService
21
- } from '@theia/core/lib/browser';
22
- import * as React from '@theia/core/shared/react';
23
- import { BulkEditInfoNode, BulkEditNode } from './bulk-edit-tree';
24
- import { BulkEditTreeModel } from './bulk-edit-tree-model';
25
- import { FileResourceResolver } from '@theia/filesystem/lib/browser';
26
- import URI from '@theia/core/lib/common/uri';
27
- import { EditorWidget, EditorManager, EditorOpenerOptions } from '@theia/editor/lib/browser';
28
- import { MEMORY_TEXT } from '@theia/core/lib/common';
29
- import { Disposable } from '@theia/core/lib/common/disposable';
30
- import { nls } from '@theia/core/lib/common/nls';
31
- import { ResourceEdit, ResourceFileEdit, ResourceTextEdit } from '@theia/monaco-editor-core/esm/vs/editor/browser/services/bulkEditService';
32
-
33
- export const BULK_EDIT_TREE_WIDGET_ID = 'bulkedit';
34
- export const BULK_EDIT_WIDGET_NAME = nls.localizeByDefault('Refactor Preview');
35
-
36
- @injectable()
37
- export class BulkEditTreeWidget extends TreeWidget {
38
- private editorWidgets: EditorWidget[] = [];
39
-
40
- @inject(FileResourceResolver)
41
- protected readonly fileResourceResolver: FileResourceResolver;
42
-
43
- @inject(EditorManager)
44
- protected readonly editorManager: EditorManager;
45
-
46
- @inject(QuickViewService) @optional()
47
- protected readonly quickView: QuickViewService;
48
-
49
- constructor(
50
- @inject(TreeProps) readonly treeProps: TreeProps,
51
- @inject(BulkEditTreeModel) override readonly model: BulkEditTreeModel,
52
- @inject(ContextMenuRenderer) override readonly contextMenuRenderer: ContextMenuRenderer
53
- ) {
54
- super(treeProps, model, contextMenuRenderer);
55
-
56
- this.id = BULK_EDIT_TREE_WIDGET_ID;
57
- this.title.label = BULK_EDIT_WIDGET_NAME;
58
- this.title.caption = BULK_EDIT_WIDGET_NAME;
59
- this.title.closable = true;
60
- this.addClass('theia-bulk-edit-container');
61
-
62
- this.toDispose.push(Disposable.create(() => {
63
- this.disposeEditors();
64
- }));
65
- }
66
-
67
- async initModel(edits: ResourceEdit[]): Promise<void> {
68
- await this.model.initModel(edits, await this.getFileContentsMap(edits));
69
- this.quickView?.showItem(BULK_EDIT_WIDGET_NAME);
70
- }
71
-
72
- protected override tapNode(node?: TreeNode): void {
73
- super.tapNode(node);
74
- if (BulkEditNode.is(node)) {
75
- this.doOpen(node);
76
- }
77
- }
78
-
79
- protected override handleDown(event: KeyboardEvent): void {
80
- const node = this.model.getNextSelectableNode();
81
- super.handleDown(event);
82
- if (BulkEditNode.is(node)) {
83
- this.doOpen(node);
84
- }
85
- }
86
-
87
- protected override handleUp(event: KeyboardEvent): void {
88
- const node = this.model.getPrevSelectableNode();
89
- super.handleUp(event);
90
- if (BulkEditNode.is(node)) {
91
- this.doOpen(node);
92
- }
93
- }
94
-
95
- protected override renderTree(model: TreeModel): React.ReactNode {
96
- if (CompositeTreeNode.is(model.root) && model.root.children.length > 0) {
97
- return super.renderTree(model);
98
- }
99
- return <div className='theia-widget-noInfo noEdits'>{nls.localizeByDefault('Made no edits')}</div>;
100
- }
101
-
102
- protected override renderCaption(node: TreeNode, props: NodeProps): React.ReactNode {
103
- if (BulkEditInfoNode.is(node)) {
104
- return this.decorateBulkEditInfoNode(node);
105
- } else if (BulkEditNode.is(node)) {
106
- return this.decorateBulkEditNode(node);
107
- }
108
- return 'caption';
109
- }
110
-
111
- protected decorateBulkEditNode(node: BulkEditNode): React.ReactNode {
112
- if (node?.parent && node?.bulkEdit && ('textEdit' in node?.bulkEdit)) {
113
- const bulkEdit = node.bulkEdit;
114
- const parent = node.parent as BulkEditInfoNode;
115
-
116
- if (parent?.fileContents) {
117
- const lines = parent.fileContents.split('\n');
118
- const startLineNum = +bulkEdit.textEdit?.range?.startLineNumber;
119
-
120
- if (lines.length > startLineNum) {
121
- const startColumn = +bulkEdit.textEdit.range.startColumn;
122
- const endColumn = +bulkEdit.textEdit.range.endColumn;
123
- const lineText = lines[startLineNum - 1];
124
- const beforeMatch = (startColumn > 26 ? '... ' : '') + lineText.substring(0, startColumn - 1).slice(-25);
125
- const replacedText = lineText.substring(startColumn - 1, endColumn - 1);
126
- const afterMatch = lineText.substring(startColumn - 1 + replacedText.length, startColumn - 1 + replacedText.length + 75);
127
-
128
- return <div className='bulkEditNode'>
129
- <div className='message'>
130
- {beforeMatch}
131
- <span className="replaced-text">{replacedText}</span>
132
- <span className="inserted-text">{bulkEdit.textEdit.text}</span>
133
- {afterMatch}
134
- </div>
135
- </div>;
136
- }
137
- }
138
- }
139
- }
140
-
141
- protected decorateBulkEditInfoNode(node: BulkEditInfoNode): React.ReactNode {
142
- const icon = this.toNodeIcon(node);
143
- const name = this.toNodeName(node);
144
- const description = this.toNodeDescription(node);
145
- const path = this.labelProvider.getLongName(node.uri.withScheme('bulkedit'));
146
- return <div title={path} className='bulkEditInfoNode'>
147
- {icon && <div className={icon + ' file-icon'}></div>}
148
- <div className='name'>{name}</div>
149
- <div className='path'>{description}</div>
150
- </div>;
151
- }
152
-
153
- private async getFileContentsMap(edits: ResourceEdit[]): Promise<Map<string, string>> {
154
- const fileContentMap = new Map<string, string>();
155
-
156
- if (edits) {
157
- for (const element of edits) {
158
- if (element) {
159
- const filePath = (('newResource' in element) && (element as ResourceFileEdit).newResource?.path) ||
160
- (('resource' in element) && (element as ResourceTextEdit).resource.path);
161
-
162
- if (filePath && !fileContentMap.has(filePath)) {
163
- const fileUri = new URI(filePath).withScheme('file');
164
- const resource = await this.fileResourceResolver.resolve(fileUri);
165
- fileContentMap.set(filePath, await resource.readContents());
166
- }
167
- }
168
- }
169
- }
170
- return fileContentMap;
171
- }
172
-
173
- private async doOpen(node: BulkEditNode): Promise<void> {
174
- if (node && node.parent && node.bulkEdit && ('edit' in node.bulkEdit)) {
175
- const resultNode = node.parent as BulkEditInfoNode;
176
- const leftUri = node.uri;
177
- const rightUri = await this.createReplacePreview(resultNode);
178
- const diffUri = DiffUris.encode(leftUri, rightUri);
179
- const editorWidget = await this.editorManager.open(diffUri, this.getEditorOptions(node));
180
- this.editorWidgets.push(editorWidget);
181
- }
182
- }
183
-
184
- private async createReplacePreview(bulkEditInfoNode: BulkEditInfoNode): Promise<URI> {
185
- const fileUri = bulkEditInfoNode.uri;
186
- let lines: string[] = [];
187
- if (bulkEditInfoNode?.fileContents) {
188
- lines = bulkEditInfoNode.fileContents.split('\n');
189
- bulkEditInfoNode.children.map((node: BulkEditNode) => {
190
- if (node.bulkEdit && ('textEdit' in node.bulkEdit)) {
191
- const startLineNum = node.bulkEdit.textEdit.range.startLineNumber;
192
- if (lines.length > startLineNum) {
193
- const startColumn = node.bulkEdit.textEdit.range.startColumn;
194
- const endColumn = node.bulkEdit.textEdit.range.endColumn;
195
- const lineText = lines[startLineNum - 1];
196
- const beforeMatch = lineText.substring(0, startColumn - 1);
197
- const replacedText = lineText.substring(startColumn - 1, endColumn - 1);
198
- const afterMatch = lineText.substring(startColumn - 1 + replacedText.length);
199
- lines[startLineNum - 1] = beforeMatch + node.bulkEdit.textEdit.text + afterMatch;
200
- }
201
- }
202
- });
203
- }
204
-
205
- return fileUri.withScheme(MEMORY_TEXT).withQuery(lines.join('\n'));
206
- }
207
-
208
- private getEditorOptions(node: BulkEditNode): EditorOpenerOptions {
209
- let options = {};
210
- if (('textEdit' in node.bulkEdit) && node?.bulkEdit?.textEdit?.range) {
211
- options = {
212
- selection: {
213
- start: {
214
- line: node.bulkEdit.textEdit.range.startLineNumber - 1,
215
- character: node.bulkEdit.textEdit.range.startColumn - 1
216
- },
217
- end: {
218
- line: node.bulkEdit.textEdit.range.endLineNumber - 1,
219
- character: node.bulkEdit.textEdit.range.endColumn - 1
220
- }
221
- }
222
- };
223
- }
224
- return options;
225
- }
226
-
227
- private disposeEditors(): void {
228
- this.editorWidgets.forEach(w => w.dispose());
229
- this.quickView?.hideItem(BULK_EDIT_WIDGET_NAME);
230
- }
231
- }
1
+ // *****************************************************************************
2
+ // Copyright (C) 2021 SAP SE or an SAP affiliate company and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { injectable, inject, optional } from '@theia/core/shared/inversify';
18
+ import {
19
+ DiffUris, TreeWidget, TreeProps, ContextMenuRenderer, TreeNode, TreeModel,
20
+ CompositeTreeNode, NodeProps, QuickViewService
21
+ } from '@theia/core/lib/browser';
22
+ import * as React from '@theia/core/shared/react';
23
+ import { BulkEditInfoNode, BulkEditNode } from './bulk-edit-tree';
24
+ import { BulkEditTreeModel } from './bulk-edit-tree-model';
25
+ import { FileResourceResolver } from '@theia/filesystem/lib/browser';
26
+ import URI from '@theia/core/lib/common/uri';
27
+ import { EditorWidget, EditorManager, EditorOpenerOptions } from '@theia/editor/lib/browser';
28
+ import { MEMORY_TEXT } from '@theia/core/lib/common';
29
+ import { Disposable } from '@theia/core/lib/common/disposable';
30
+ import { nls } from '@theia/core/lib/common/nls';
31
+ import { ResourceEdit, ResourceFileEdit, ResourceTextEdit } from '@theia/monaco-editor-core/esm/vs/editor/browser/services/bulkEditService';
32
+
33
+ export const BULK_EDIT_TREE_WIDGET_ID = 'bulkedit';
34
+ export const BULK_EDIT_WIDGET_NAME = nls.localizeByDefault('Refactor Preview');
35
+
36
+ @injectable()
37
+ export class BulkEditTreeWidget extends TreeWidget {
38
+ private editorWidgets: EditorWidget[] = [];
39
+
40
+ @inject(FileResourceResolver)
41
+ protected readonly fileResourceResolver: FileResourceResolver;
42
+
43
+ @inject(EditorManager)
44
+ protected readonly editorManager: EditorManager;
45
+
46
+ @inject(QuickViewService) @optional()
47
+ protected readonly quickView: QuickViewService;
48
+
49
+ constructor(
50
+ @inject(TreeProps) readonly treeProps: TreeProps,
51
+ @inject(BulkEditTreeModel) override readonly model: BulkEditTreeModel,
52
+ @inject(ContextMenuRenderer) override readonly contextMenuRenderer: ContextMenuRenderer
53
+ ) {
54
+ super(treeProps, model, contextMenuRenderer);
55
+
56
+ this.id = BULK_EDIT_TREE_WIDGET_ID;
57
+ this.title.label = BULK_EDIT_WIDGET_NAME;
58
+ this.title.caption = BULK_EDIT_WIDGET_NAME;
59
+ this.title.closable = true;
60
+ this.addClass('theia-bulk-edit-container');
61
+
62
+ this.toDispose.push(Disposable.create(() => {
63
+ this.disposeEditors();
64
+ }));
65
+ }
66
+
67
+ async initModel(edits: ResourceEdit[]): Promise<void> {
68
+ await this.model.initModel(edits, await this.getFileContentsMap(edits));
69
+ this.quickView?.showItem(BULK_EDIT_WIDGET_NAME);
70
+ }
71
+
72
+ protected override tapNode(node?: TreeNode): void {
73
+ super.tapNode(node);
74
+ if (BulkEditNode.is(node)) {
75
+ this.doOpen(node);
76
+ }
77
+ }
78
+
79
+ protected override handleDown(event: KeyboardEvent): void {
80
+ const node = this.model.getNextSelectableNode();
81
+ super.handleDown(event);
82
+ if (BulkEditNode.is(node)) {
83
+ this.doOpen(node);
84
+ }
85
+ }
86
+
87
+ protected override handleUp(event: KeyboardEvent): void {
88
+ const node = this.model.getPrevSelectableNode();
89
+ super.handleUp(event);
90
+ if (BulkEditNode.is(node)) {
91
+ this.doOpen(node);
92
+ }
93
+ }
94
+
95
+ protected override renderTree(model: TreeModel): React.ReactNode {
96
+ if (CompositeTreeNode.is(model.root) && model.root.children.length > 0) {
97
+ return super.renderTree(model);
98
+ }
99
+ return <div className='theia-widget-noInfo noEdits'>{nls.localizeByDefault('Made no edits')}</div>;
100
+ }
101
+
102
+ protected override renderCaption(node: TreeNode, props: NodeProps): React.ReactNode {
103
+ if (BulkEditInfoNode.is(node)) {
104
+ return this.decorateBulkEditInfoNode(node);
105
+ } else if (BulkEditNode.is(node)) {
106
+ return this.decorateBulkEditNode(node);
107
+ }
108
+ return 'caption';
109
+ }
110
+
111
+ protected decorateBulkEditNode(node: BulkEditNode): React.ReactNode {
112
+ if (node?.parent && node?.bulkEdit && ('textEdit' in node?.bulkEdit)) {
113
+ const bulkEdit = node.bulkEdit;
114
+ const parent = node.parent as BulkEditInfoNode;
115
+
116
+ if (parent?.fileContents) {
117
+ const lines = parent.fileContents.split('\n');
118
+ const startLineNum = +bulkEdit.textEdit?.range?.startLineNumber;
119
+
120
+ if (lines.length > startLineNum) {
121
+ const startColumn = +bulkEdit.textEdit.range.startColumn;
122
+ const endColumn = +bulkEdit.textEdit.range.endColumn;
123
+ const lineText = lines[startLineNum - 1];
124
+ const beforeMatch = (startColumn > 26 ? '... ' : '') + lineText.substring(0, startColumn - 1).slice(-25);
125
+ const replacedText = lineText.substring(startColumn - 1, endColumn - 1);
126
+ const afterMatch = lineText.substring(startColumn - 1 + replacedText.length, startColumn - 1 + replacedText.length + 75);
127
+
128
+ return <div className='bulkEditNode'>
129
+ <div className='message'>
130
+ {beforeMatch}
131
+ <span className="replaced-text">{replacedText}</span>
132
+ <span className="inserted-text">{bulkEdit.textEdit.text}</span>
133
+ {afterMatch}
134
+ </div>
135
+ </div>;
136
+ }
137
+ }
138
+ }
139
+ }
140
+
141
+ protected decorateBulkEditInfoNode(node: BulkEditInfoNode): React.ReactNode {
142
+ const icon = this.toNodeIcon(node);
143
+ const name = this.toNodeName(node);
144
+ const description = this.toNodeDescription(node);
145
+ const path = this.labelProvider.getLongName(node.uri.withScheme('bulkedit'));
146
+ return <div title={path} className='bulkEditInfoNode'>
147
+ {icon && <div className={icon + ' file-icon'}></div>}
148
+ <div className='name'>{name}</div>
149
+ <div className='path'>{description}</div>
150
+ </div>;
151
+ }
152
+
153
+ private async getFileContentsMap(edits: ResourceEdit[]): Promise<Map<string, string>> {
154
+ const fileContentMap = new Map<string, string>();
155
+
156
+ if (edits) {
157
+ for (const element of edits) {
158
+ if (element) {
159
+ const filePath = (('newResource' in element) && (element as ResourceFileEdit).newResource?.path) ||
160
+ (('resource' in element) && (element as ResourceTextEdit).resource.path);
161
+
162
+ if (filePath && !fileContentMap.has(filePath)) {
163
+ const fileUri = new URI(filePath).withScheme('file');
164
+ const resource = await this.fileResourceResolver.resolve(fileUri);
165
+ fileContentMap.set(filePath, await resource.readContents());
166
+ }
167
+ }
168
+ }
169
+ }
170
+ return fileContentMap;
171
+ }
172
+
173
+ private async doOpen(node: BulkEditNode): Promise<void> {
174
+ if (node && node.parent && node.bulkEdit && ('edit' in node.bulkEdit)) {
175
+ const resultNode = node.parent as BulkEditInfoNode;
176
+ const leftUri = node.uri;
177
+ const rightUri = await this.createReplacePreview(resultNode);
178
+ const diffUri = DiffUris.encode(leftUri, rightUri);
179
+ const editorWidget = await this.editorManager.open(diffUri, this.getEditorOptions(node));
180
+ this.editorWidgets.push(editorWidget);
181
+ }
182
+ }
183
+
184
+ private async createReplacePreview(bulkEditInfoNode: BulkEditInfoNode): Promise<URI> {
185
+ const fileUri = bulkEditInfoNode.uri;
186
+ let lines: string[] = [];
187
+ if (bulkEditInfoNode?.fileContents) {
188
+ lines = bulkEditInfoNode.fileContents.split('\n');
189
+ bulkEditInfoNode.children.map((node: BulkEditNode) => {
190
+ if (node.bulkEdit && ('textEdit' in node.bulkEdit)) {
191
+ const startLineNum = node.bulkEdit.textEdit.range.startLineNumber;
192
+ if (lines.length > startLineNum) {
193
+ const startColumn = node.bulkEdit.textEdit.range.startColumn;
194
+ const endColumn = node.bulkEdit.textEdit.range.endColumn;
195
+ const lineText = lines[startLineNum - 1];
196
+ const beforeMatch = lineText.substring(0, startColumn - 1);
197
+ const replacedText = lineText.substring(startColumn - 1, endColumn - 1);
198
+ const afterMatch = lineText.substring(startColumn - 1 + replacedText.length);
199
+ lines[startLineNum - 1] = beforeMatch + node.bulkEdit.textEdit.text + afterMatch;
200
+ }
201
+ }
202
+ });
203
+ }
204
+
205
+ return fileUri.withScheme(MEMORY_TEXT).withQuery(lines.join('\n'));
206
+ }
207
+
208
+ private getEditorOptions(node: BulkEditNode): EditorOpenerOptions {
209
+ let options = {};
210
+ if (('textEdit' in node.bulkEdit) && node?.bulkEdit?.textEdit?.range) {
211
+ options = {
212
+ selection: {
213
+ start: {
214
+ line: node.bulkEdit.textEdit.range.startLineNumber - 1,
215
+ character: node.bulkEdit.textEdit.range.startColumn - 1
216
+ },
217
+ end: {
218
+ line: node.bulkEdit.textEdit.range.endLineNumber - 1,
219
+ character: node.bulkEdit.textEdit.range.endColumn - 1
220
+ }
221
+ }
222
+ };
223
+ }
224
+ return options;
225
+ }
226
+
227
+ private disposeEditors(): void {
228
+ this.editorWidgets.forEach(w => w.dispose());
229
+ this.quickView?.hideItem(BULK_EDIT_WIDGET_NAME);
230
+ }
231
+ }
@@ -1,73 +1,73 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2021 SAP SE or an SAP affiliate company and others.
3
- //
4
- // This program and the accompanying materials are made available under the
5
- // terms of the Eclipse Public License v. 2.0 which is available at
6
- // http://www.eclipse.org/legal/epl-2.0.
7
- //
8
- // This Source Code may also be made available under the following Secondary
9
- // Licenses when the conditions for such availability set forth in the Eclipse
10
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
- // with the GNU Classpath Exception which is available at
12
- // https://www.gnu.org/software/classpath/license.html.
13
- //
14
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import { enableJSDOM } from '@theia/core/lib/browser/test/jsdom';
18
- import * as chai from 'chai';
19
- import { ResourceTextEdit } from '@theia/monaco-editor-core/esm/vs/editor/browser/services/bulkEditService';
20
- import { URI as Uri } from 'vscode-uri';
21
-
22
- let disableJSDOM = enableJSDOM();
23
-
24
- import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
25
- FrontendApplicationConfigProvider.set({});
26
-
27
- import { Container } from '@theia/core/shared/inversify';
28
- import { BulkEditInfoNode, BulkEditTree } from './bulk-edit-tree';
29
-
30
- const expect = chai.expect;
31
- let bulkEditTree: BulkEditTree;
32
- let testContainer: Container;
33
- const fileContextsMap = new Map<string, string>();
34
- let resourceTextEdits: ResourceTextEdit[];
35
-
36
- disableJSDOM();
37
-
38
- before(() => {
39
- disableJSDOM = enableJSDOM();
40
-
41
- testContainer = new Container();
42
- testContainer.bind(BulkEditTree).toSelf();
43
- bulkEditTree = testContainer.get(BulkEditTree);
44
-
45
- fileContextsMap.set('/c:/test1.ts', 'aaaaaaaaaaaaaaaaaaa');
46
- fileContextsMap.set('/c:/test2.ts', 'bbbbbbbbbbbbbbbbbbb');
47
-
48
- resourceTextEdits = <ResourceTextEdit[]><unknown>[
49
- {
50
- 'resource': Uri.file('c:/test1.ts'),
51
- 'textEdit': {
52
- 'text': 'AAAAA', 'range': { 'startLineNumber': 1, 'startColumn': 5, 'endLineNumber': 1, 'endColumn': 10 }
53
- }
54
- },
55
- {
56
- 'resource': Uri.file('c:/test2.ts'),
57
- 'textEdit': {
58
- 'text': 'BBBBBB', 'range': { 'startLineNumber': 1, 'startColumn': 3, 'endLineNumber': 1, 'endColumn': 8 }
59
- }
60
- }
61
- ];
62
- });
63
-
64
- after(() => {
65
- disableJSDOM();
66
- });
67
-
68
- describe('bulk-edit-tree', () => {
69
- it('initialize tree', () => {
70
- bulkEditTree.initTree(resourceTextEdits, fileContextsMap);
71
- expect((bulkEditTree.root as BulkEditInfoNode).children.length).is.equal(2);
72
- });
73
- });
1
+ // *****************************************************************************
2
+ // Copyright (C) 2021 SAP SE or an SAP affiliate company and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { enableJSDOM } from '@theia/core/lib/browser/test/jsdom';
18
+ import * as chai from 'chai';
19
+ import { ResourceTextEdit } from '@theia/monaco-editor-core/esm/vs/editor/browser/services/bulkEditService';
20
+ import { URI as Uri } from '@theia/core/shared/vscode-uri';
21
+
22
+ let disableJSDOM = enableJSDOM();
23
+
24
+ import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
25
+ FrontendApplicationConfigProvider.set({});
26
+
27
+ import { Container } from '@theia/core/shared/inversify';
28
+ import { BulkEditInfoNode, BulkEditTree } from './bulk-edit-tree';
29
+
30
+ const expect = chai.expect;
31
+ let bulkEditTree: BulkEditTree;
32
+ let testContainer: Container;
33
+ const fileContextsMap = new Map<string, string>();
34
+ let resourceTextEdits: ResourceTextEdit[];
35
+
36
+ disableJSDOM();
37
+
38
+ before(() => {
39
+ disableJSDOM = enableJSDOM();
40
+
41
+ testContainer = new Container();
42
+ testContainer.bind(BulkEditTree).toSelf();
43
+ bulkEditTree = testContainer.get(BulkEditTree);
44
+
45
+ fileContextsMap.set('/c:/test1.ts', 'aaaaaaaaaaaaaaaaaaa');
46
+ fileContextsMap.set('/c:/test2.ts', 'bbbbbbbbbbbbbbbbbbb');
47
+
48
+ resourceTextEdits = <ResourceTextEdit[]><unknown>[
49
+ {
50
+ 'resource': Uri.file('c:/test1.ts'),
51
+ 'textEdit': {
52
+ 'text': 'AAAAA', 'range': { 'startLineNumber': 1, 'startColumn': 5, 'endLineNumber': 1, 'endColumn': 10 }
53
+ }
54
+ },
55
+ {
56
+ 'resource': Uri.file('c:/test2.ts'),
57
+ 'textEdit': {
58
+ 'text': 'BBBBBB', 'range': { 'startLineNumber': 1, 'startColumn': 3, 'endLineNumber': 1, 'endColumn': 8 }
59
+ }
60
+ }
61
+ ];
62
+ });
63
+
64
+ after(() => {
65
+ disableJSDOM();
66
+ });
67
+
68
+ describe('bulk-edit-tree', () => {
69
+ it('initialize tree', () => {
70
+ bulkEditTree.initTree(resourceTextEdits, fileContextsMap);
71
+ expect((bulkEditTree.root as BulkEditInfoNode).children.length).is.equal(2);
72
+ });
73
+ });