@adecore/editor-react 0.22.1 → 0.23.1

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 (209) hide show
  1. package/dist/CallHierarchyPanel.d.ts +6 -0
  2. package/dist/CallHierarchyPanel.js +92 -0
  3. package/dist/CompletionPopup.js +11 -3
  4. package/dist/DiffView.d.ts +22 -0
  5. package/dist/DiffView.js +203 -0
  6. package/dist/EditorContextMenu.js +1 -0
  7. package/dist/EditorView.js +18 -1
  8. package/dist/FindReplace.d.ts +1 -1
  9. package/dist/FindReplace.js +41 -11
  10. package/dist/HoverCard.js +2 -2
  11. package/dist/LanguagePopups.js +4 -1
  12. package/dist/Markdown.d.ts +2 -1
  13. package/dist/Markdown.js +8 -4
  14. package/dist/PanelResizeHandle.d.ts +8 -0
  15. package/dist/PanelResizeHandle.js +71 -0
  16. package/dist/PeekPanel.d.ts +3 -0
  17. package/dist/PeekPanel.js +7 -4
  18. package/dist/PickPopup.js +15 -2
  19. package/dist/RenameCard.js +10 -5
  20. package/dist/RenderedDocs.d.ts +9 -0
  21. package/dist/RenderedDocs.js +84 -0
  22. package/dist/SplitDiffView.d.ts +9 -0
  23. package/dist/SplitDiffView.js +276 -0
  24. package/dist/SymbolPicker.d.ts +3 -0
  25. package/dist/SymbolPicker.js +4 -3
  26. package/dist/call-hierarchy-model.d.ts +52 -0
  27. package/dist/call-hierarchy-model.js +93 -0
  28. package/dist/call-hierarchy.d.ts +42 -0
  29. package/dist/call-hierarchy.js +398 -0
  30. package/dist/code-actions-model.d.ts +2 -0
  31. package/dist/code-actions-model.js +12 -10
  32. package/dist/code-actions.js +3 -1
  33. package/dist/completion-model.d.ts +14 -4
  34. package/dist/completion-model.js +40 -33
  35. package/dist/completion.d.ts +4 -0
  36. package/dist/completion.js +257 -42
  37. package/dist/diagnostics.js +8 -6
  38. package/dist/diff-expansion.d.ts +9 -0
  39. package/dist/diff-expansion.js +41 -0
  40. package/dist/diff-overlays.d.ts +15 -0
  41. package/dist/diff-overlays.js +28 -0
  42. package/dist/diff-syntax.d.ts +16 -0
  43. package/dist/diff-syntax.js +49 -0
  44. package/dist/diff-wordmarks.d.ts +5 -0
  45. package/dist/diff-wordmarks.js +26 -0
  46. package/dist/doc-comment-model.d.ts +23 -0
  47. package/dist/doc-comment-model.js +291 -0
  48. package/dist/editor-language.d.ts +13 -1
  49. package/dist/editor-language.js +15 -5
  50. package/dist/editor-react.css +79 -0
  51. package/dist/format-on-type.d.ts +14 -0
  52. package/dist/format-on-type.js +96 -0
  53. package/dist/host-types.d.ts +19 -0
  54. package/dist/hover.d.ts +4 -0
  55. package/dist/hover.js +15 -2
  56. package/dist/index.d.ts +19 -5
  57. package/dist/index.js +9 -1
  58. package/dist/inlay-hints.d.ts +47 -2
  59. package/dist/inlay-hints.js +353 -16
  60. package/dist/language-ids.js +4 -2
  61. package/dist/locales/en.json +117 -3
  62. package/dist/locales/nl.json +117 -3
  63. package/dist/models.d.ts +6 -2
  64. package/dist/models.js +5 -1
  65. package/dist/panel-size.d.ts +6 -0
  66. package/dist/panel-size.js +25 -0
  67. package/dist/patch-decorations.d.ts +27 -0
  68. package/dist/patch-decorations.js +182 -0
  69. package/dist/patch-layout.d.ts +40 -0
  70. package/dist/patch-layout.js +304 -0
  71. package/dist/peek.d.ts +3 -1
  72. package/dist/peek.js +6 -1
  73. package/dist/pick.d.ts +1 -0
  74. package/dist/pick.js +11 -1
  75. package/dist/popups.d.ts +17 -0
  76. package/dist/popups.js +1 -0
  77. package/dist/project-language.d.ts +12 -0
  78. package/dist/project-language.js +52 -2
  79. package/dist/refresher.d.ts +1 -0
  80. package/dist/refresher.js +5 -0
  81. package/dist/rename-model.d.ts +1 -1
  82. package/dist/rename-model.js +3 -7
  83. package/dist/rename.js +5 -8
  84. package/dist/rendered-docs.d.ts +64 -0
  85. package/dist/rendered-docs.js +374 -0
  86. package/dist/row-host.d.ts +2 -0
  87. package/dist/row-host.js +11 -3
  88. package/dist/semantic-delta.d.ts +2 -0
  89. package/dist/semantic-delta.js +27 -0
  90. package/dist/semantic-model.js +16 -0
  91. package/dist/semantic-tokens.d.ts +26 -1
  92. package/dist/semantic-tokens.js +174 -14
  93. package/dist/shortcut-keys.d.ts +2 -0
  94. package/dist/shortcut-keys.js +6 -2
  95. package/dist/signature.js +1 -1
  96. package/dist/snippet-field-transforms.d.ts +30 -0
  97. package/dist/snippet-field-transforms.js +116 -0
  98. package/dist/snippet-indent.d.ts +2 -0
  99. package/dist/snippet-indent.js +49 -0
  100. package/dist/snippet-range-order.d.ts +3 -0
  101. package/dist/snippet-range-order.js +19 -0
  102. package/dist/snippet-session.d.ts +42 -6
  103. package/dist/snippet-session.js +650 -53
  104. package/dist/snippet-transform-client.d.ts +19 -0
  105. package/dist/snippet-transform-client.js +66 -0
  106. package/dist/snippet-transform-format.d.ts +15 -0
  107. package/dist/snippet-transform-format.js +302 -0
  108. package/dist/snippet-transform-protocol.d.ts +45 -0
  109. package/dist/snippet-transform-protocol.js +8 -0
  110. package/dist/snippet-transform-queue.d.ts +32 -0
  111. package/dist/snippet-transform-queue.js +173 -0
  112. package/dist/snippet-transform-worker.d.ts +10 -0
  113. package/dist/snippet-transform-worker.js +41 -0
  114. package/dist/snippet-variable-names.d.ts +1 -0
  115. package/dist/snippet-variable-names.js +36 -0
  116. package/dist/snippet-variables.d.ts +7 -0
  117. package/dist/snippet-variables.js +66 -0
  118. package/dist/snippet.d.ts +30 -3
  119. package/dist/snippet.js +402 -87
  120. package/dist/split-alignment.d.ts +6 -0
  121. package/dist/split-alignment.js +38 -0
  122. package/dist/split-scroll.d.ts +14 -0
  123. package/dist/split-scroll.js +45 -0
  124. package/dist/symbols.d.ts +2 -1
  125. package/dist/symbols.js +39 -7
  126. package/dist/testing.d.ts +5 -1
  127. package/dist/testing.js +12 -0
  128. package/dist/timers.d.ts +1 -0
  129. package/dist/timers.js +4 -0
  130. package/dist/use-panel-body.d.ts +6 -0
  131. package/dist/use-panel-body.js +13 -0
  132. package/dist/workspace-edit.d.ts +25 -3
  133. package/dist/workspace-edit.js +282 -143
  134. package/package.json +10 -5
  135. package/src/CallHierarchyPanel.tsx +244 -0
  136. package/src/CompletionPopup.tsx +12 -1
  137. package/src/DiffView.tsx +262 -0
  138. package/src/EditorContextMenu.tsx +1 -0
  139. package/src/EditorView.tsx +21 -2
  140. package/src/FindReplace.tsx +51 -13
  141. package/src/HoverCard.tsx +23 -21
  142. package/src/LanguagePopups.tsx +5 -0
  143. package/src/Markdown.tsx +10 -3
  144. package/src/PanelResizeHandle.tsx +104 -0
  145. package/src/PeekPanel.tsx +11 -6
  146. package/src/PickPopup.tsx +18 -2
  147. package/src/RenameCard.tsx +18 -0
  148. package/src/RenderedDocs.tsx +155 -0
  149. package/src/SplitDiffView.tsx +337 -0
  150. package/src/SymbolPicker.tsx +4 -3
  151. package/src/call-hierarchy-model.ts +151 -0
  152. package/src/call-hierarchy.ts +440 -0
  153. package/src/code-actions-model.ts +17 -11
  154. package/src/code-actions.ts +3 -1
  155. package/src/completion-model.ts +61 -35
  156. package/src/completion.ts +302 -42
  157. package/src/diagnostics.ts +8 -6
  158. package/src/diff-expansion.ts +49 -0
  159. package/src/diff-overlays.tsx +69 -0
  160. package/src/diff-syntax.ts +67 -0
  161. package/src/diff-wordmarks.ts +31 -0
  162. package/src/doc-comment-model.ts +336 -0
  163. package/src/editor-language.ts +22 -6
  164. package/src/editor-react.css +79 -0
  165. package/src/format-on-type.ts +111 -0
  166. package/src/host-types.ts +23 -0
  167. package/src/hover.ts +18 -3
  168. package/src/index.ts +27 -4
  169. package/src/inlay-hints.ts +394 -18
  170. package/src/language-ids.ts +4 -2
  171. package/src/locales/en.json +117 -3
  172. package/src/locales/nl.json +117 -3
  173. package/src/models.ts +40 -1
  174. package/src/panel-size.ts +28 -0
  175. package/src/patch-decorations.ts +224 -0
  176. package/src/patch-layout.ts +388 -0
  177. package/src/peek.ts +6 -1
  178. package/src/pick.ts +12 -1
  179. package/src/popups.ts +24 -0
  180. package/src/project-language.ts +63 -2
  181. package/src/refresher.ts +6 -0
  182. package/src/rename-model.ts +4 -8
  183. package/src/rename.ts +5 -8
  184. package/src/rendered-docs.ts +430 -0
  185. package/src/row-host.ts +12 -3
  186. package/src/semantic-delta.ts +29 -0
  187. package/src/semantic-model.ts +17 -0
  188. package/src/semantic-tokens.ts +202 -19
  189. package/src/shortcut-keys.ts +6 -2
  190. package/src/signature.ts +1 -1
  191. package/src/snippet-field-transforms.ts +144 -0
  192. package/src/snippet-indent.ts +53 -0
  193. package/src/snippet-range-order.ts +19 -0
  194. package/src/snippet-session.ts +797 -56
  195. package/src/snippet-transform-client.ts +84 -0
  196. package/src/snippet-transform-format.ts +325 -0
  197. package/src/snippet-transform-protocol.ts +24 -0
  198. package/src/snippet-transform-queue.ts +199 -0
  199. package/src/snippet-transform-worker.ts +58 -0
  200. package/src/snippet-variable-names.ts +36 -0
  201. package/src/snippet-variables.ts +74 -0
  202. package/src/snippet.ts +452 -89
  203. package/src/split-alignment.ts +45 -0
  204. package/src/split-scroll.ts +54 -0
  205. package/src/symbols.ts +43 -7
  206. package/src/testing.ts +25 -0
  207. package/src/timers.ts +5 -0
  208. package/src/use-panel-body.ts +17 -0
  209. package/src/workspace-edit.ts +347 -169
package/dist/symbols.js CHANGED
@@ -19,7 +19,7 @@ const KINDS = {
19
19
  };
20
20
  function walk(symbols, spans) {
21
21
  for (const symbol of symbols) {
22
- spans.push({ name: symbol.name, kind: symbol.kind, range: symbol.range });
22
+ spans.push({ name: symbol.name, kind: symbol.kind, range: symbol.range, nameLine: symbol.selectionRange?.start.line });
23
23
  walk(symbol.children ?? [], spans);
24
24
  }
25
25
  }
@@ -35,16 +35,48 @@ export function symbolSpansOf(result) {
35
35
  }
36
36
  return result.map((symbol) => ({ name: symbol.name, kind: symbol.kind, range: symbol.location.range }));
37
37
  }
38
- function blockOf({ name, kind, range }) {
38
+ /* A line a declaration can have above it: blank, a comment, or an attribute. A bare `#` is no comment, since it heads a Markdown section. */
39
+ const PRELUDE = /^\s*(?:$|\/\/|\/\*|\*|#\[)/;
40
+ /*
41
+ * The line a block is pinned by. A range may begin at the doc comment or the attributes of a declaration, so the
42
+ * line of the name wins, and without it the first line below the comment that holds the name.
43
+ */
44
+ function headerLineOf({ name, range, nameLine }, lines) {
45
+ const { start, end } = range;
46
+ if (nameLine !== undefined && nameLine >= start.line && nameLine <= end.line) {
47
+ return nameLine;
48
+ }
49
+ if (lines === undefined) {
50
+ return start.line;
51
+ }
52
+ const last = Math.min(end.line, lines.length - 1);
53
+ let first = start.line;
54
+ while (first < last && PRELUDE.test(lines[first] ?? '')) {
55
+ first++;
56
+ }
57
+ const short = name.slice(name.lastIndexOf('\\') + 1);
58
+ for (let line = first; line <= last; line++) {
59
+ if (!PRELUDE.test(lines[line] ?? '') && (lines[line] ?? '').includes(short)) {
60
+ return line;
61
+ }
62
+ }
63
+ return first;
64
+ }
65
+ function blockOf(span, lines) {
66
+ const { name, kind, range } = span;
39
67
  const label = KINDS[kind];
40
68
  // A one-line symbol has no body to pin, and a property or an enum member is part of the block around it.
41
69
  return label === undefined || range.end.line <= range.start.line
42
70
  ? null
43
- : { startLine: range.start.line + 1, endLine: range.end.line + 1, name, kind: label };
71
+ : { startLine: headerLineOf(span, lines) + 1, endLine: range.end.line + 1, name, kind: label };
44
72
  }
45
- /* The multi-line symbols of a file as blocks, outermost first, in one-based lines. */
46
- export function blocksOf(result) {
47
- const blocks = symbolSpansOf(result).flatMap((span) => blockOf(span) ?? []);
73
+ /*
74
+ * The multi-line symbols of a file as blocks, outermost first, in one-based lines. The text of the document
75
+ * lets a block start at its declaration rather than at the comment a server counts into the symbol.
76
+ */
77
+ export function blocksOf(result, text) {
78
+ const lines = text?.split('\n');
79
+ const blocks = symbolSpansOf(result).flatMap((span) => blockOf(span, lines) ?? []);
48
80
  return blocks.sort((left, right) => left.startLine - right.startLine || right.endLine - left.endLine);
49
81
  }
50
82
  /*
@@ -62,7 +94,7 @@ export class SymbolsFeature {
62
94
  }
63
95
  const result = await project.service.documentSymbols(uri, { signal });
64
96
  if (!signal.aborted) {
65
- editor.setBlocks(result === null ? null : blocksOf(result));
97
+ editor.setBlocks(result === null ? null : blocksOf(result, editor.getText()));
66
98
  for (const listener of [...this.listeners]) {
67
99
  listener(result);
68
100
  }
package/dist/testing.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type LanguageService, type LanguageDocument, type LanguageRequestOptions, type DiagnosticsReport, type ContentChange, type Disposable, type ProviderOptions, type CodeAction, type CodeActionContext, type CodeLens, type Command, type CompletionContext, type CompletionItem, type CompletionResult, type DocumentHighlight, type DocumentSymbolResult, type FoldingRange, type FormattingOptions, type Hover, type InlayHint, type Location, type NavigationResult, type Position, type PrepareRenameResult, type Range, type SelectionRange, type SemanticTokens, type SemanticTokensDelta, type SignatureHelp, type SignatureHelpContext, type TextEdit, type WorkspaceEdit, type WorkspaceSymbolResult } from '@adecore/lsp';
1
+ import { type LanguageService, type LanguageDocument, type LanguageRequestOptions, type DiagnosticsReport, type ContentChange, type Disposable, type ProviderOptions, type CallHierarchyIncomingCall, type CallHierarchyItem, type CallHierarchyOutgoingCall, type CodeAction, type CodeActionContext, type CodeLens, type Command, type CompletionContext, type CompletionItem, type CompletionResult, type DocumentHighlight, type DocumentSymbolResult, type FoldingRange, type FormattingOptions, type Hover, type InlayHint, type Location, type NavigationResult, type Position, type PrepareRenameResult, type Range, type SelectionRange, type SemanticTokens, type SemanticTokensDelta, type SignatureHelp, type SignatureHelpContext, type TextEdit, type WorkspaceEdit, type WorkspaceSymbolResult } from '@adecore/lsp';
2
2
  export { ManualTimers } from './timers.ts';
3
3
  export interface LanguageCall {
4
4
  method: string;
@@ -44,6 +44,7 @@ export declare class FakeLanguageService implements LanguageService {
44
44
  executeCommand(uri: string, command: Command, options?: LanguageRequestOptions): Promise<unknown>;
45
45
  formatting(uri: string, formatting: FormattingOptions, options?: LanguageRequestOptions): Promise<TextEdit[] | null>;
46
46
  rangeFormatting(uri: string, range: Range, formatting: FormattingOptions, options?: LanguageRequestOptions): Promise<TextEdit[] | null>;
47
+ onTypeFormatting(uri: string, position: Position, ch: string, formatting: FormattingOptions, options?: LanguageRequestOptions): Promise<TextEdit[] | null>;
47
48
  semanticTokens(uri: string, options?: LanguageRequestOptions): Promise<SemanticTokens | null>;
48
49
  semanticTokensDelta(uri: string, previousResultId: string, options?: LanguageRequestOptions): Promise<SemanticTokens | SemanticTokensDelta | null>;
49
50
  semanticTokensRange(uri: string, range: Range, options?: LanguageRequestOptions): Promise<SemanticTokens | null>;
@@ -52,6 +53,9 @@ export declare class FakeLanguageService implements LanguageService {
52
53
  workspaceSymbols(uri: string, query: string, options?: LanguageRequestOptions): Promise<WorkspaceSymbolResult>;
53
54
  foldingRanges(uri: string, options?: LanguageRequestOptions): Promise<FoldingRange[] | null>;
54
55
  selectionRanges(uri: string, positions: readonly Position[], options?: LanguageRequestOptions): Promise<SelectionRange[] | null>;
56
+ prepareCallHierarchy(uri: string, position: Position, options?: LanguageRequestOptions): Promise<CallHierarchyItem[] | null>;
57
+ incomingCalls(uri: string, item: CallHierarchyItem, options?: LanguageRequestOptions): Promise<CallHierarchyIncomingCall[] | null>;
58
+ outgoingCalls(uri: string, item: CallHierarchyItem, options?: LanguageRequestOptions): Promise<CallHierarchyOutgoingCall[] | null>;
55
59
  codeLenses(uri: string, options?: LanguageRequestOptions): Promise<CodeLens[] | null>;
56
60
  resolveCodeLens(uri: string, lens: CodeLens, options?: LanguageRequestOptions): Promise<CodeLens>;
57
61
  }
package/dist/testing.js CHANGED
@@ -123,6 +123,9 @@ export class FakeLanguageService {
123
123
  rangeFormatting(uri, range, formatting, options = {}) {
124
124
  return this.request('textDocument/rangeFormatting', uri, { range, options: formatting }, options);
125
125
  }
126
+ onTypeFormatting(uri, position, ch, formatting, options = {}) {
127
+ return this.request('textDocument/onTypeFormatting', uri, { position, ch, options: formatting }, options);
128
+ }
126
129
  semanticTokens(uri, options = {}) {
127
130
  return this.request('textDocument/semanticTokens/full', uri, {}, options);
128
131
  }
@@ -147,6 +150,15 @@ export class FakeLanguageService {
147
150
  selectionRanges(uri, positions, options = {}) {
148
151
  return this.request('textDocument/selectionRange', uri, { positions }, options);
149
152
  }
153
+ prepareCallHierarchy(uri, position, options = {}) {
154
+ return this.request('textDocument/prepareCallHierarchy', uri, { position }, options);
155
+ }
156
+ incomingCalls(uri, item, options = {}) {
157
+ return this.request('callHierarchy/incomingCalls', uri, { item }, options);
158
+ }
159
+ outgoingCalls(uri, item, options = {}) {
160
+ return this.request('callHierarchy/outgoingCalls', uri, { item }, options);
161
+ }
150
162
  codeLenses(uri, options = {}) {
151
163
  return this.request('textDocument/codeLens', uri, {}, options);
152
164
  }
package/dist/timers.d.ts CHANGED
@@ -12,3 +12,4 @@ export declare class ManualTimers implements Timers {
12
12
  advance(milliseconds: number): void;
13
13
  get size(): number;
14
14
  }
15
+ export declare function revealRow(timers: Timers, container: HTMLElement): void;
package/dist/timers.js CHANGED
@@ -32,3 +32,7 @@ export class ManualTimers {
32
32
  return this.pending.size;
33
33
  }
34
34
  }
35
+ /* Scrolls a row the editor opened under the caret line into view, which may sit at the bottom of the view with the row below the fold. The element is in the page a turn later. */
36
+ export function revealRow(timers, container) {
37
+ timers.set(() => container.scrollIntoView?.({ block: 'nearest' }), 0);
38
+ }
@@ -0,0 +1,6 @@
1
+ import type { EditorLanguage } from './editor-language.ts';
2
+ export declare function usePanelBody(language: EditorLanguage): {
3
+ height: number;
4
+ set(height: number): void;
5
+ commit(height: number): void;
6
+ };
@@ -0,0 +1,13 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { clampPanelBody } from './panel-size.js';
3
+ /* The body height of a panel, from the project that remembers it for the next one; `commit` hands it to the host. */
4
+ export function usePanelBody(language) {
5
+ const { project } = language;
6
+ const [height, set] = useState(() => clampPanelBody(project.panelBodyHeight));
7
+ useEffect(() => project.onPanelBodyChange((value) => set(clampPanelBody(value))), [project]);
8
+ return {
9
+ height,
10
+ set,
11
+ commit: (value) => project.resizePanelBody(value)
12
+ };
13
+ }
@@ -1,5 +1,5 @@
1
1
  import type { Editor } from '@adecore/editor';
2
- import { type ApplyWorkspaceEditResult, type RenameFile, type TextEdit, type WorkspaceEdit } from '@adecore/lsp';
2
+ import { type ApplyWorkspaceEditResult, type ResourceOperationKind, type RenameFile, type TextEdit, type WorkspaceEdit } from '@adecore/lsp';
3
3
  import type { DiskText } from './host-types.ts';
4
4
  export interface StagedFile {
5
5
  readonly path: string;
@@ -10,13 +10,35 @@ export interface ProjectFiles {
10
10
  read(path: string): Promise<DiskText | null>;
11
11
  stage(files: readonly StagedFile[]): void;
12
12
  save(files: readonly StagedFile[]): Promise<string | null>;
13
- rename(from: string, to: string): Promise<string | null>;
14
- create?(path: string, text: string): Promise<string | null>;
13
+ rename(from: string, to: string, options?: {
14
+ readonly overwrite: boolean;
15
+ }): Promise<string | null>;
16
+ create?(path: string, text: string, options?: {
17
+ readonly overwrite: boolean;
18
+ }): Promise<string | null>;
19
+ delete?(path: string, options: {
20
+ readonly recursive: boolean;
21
+ }): Promise<string | null>;
22
+ readonly supportsOverwrite?: boolean;
23
+ isUnsaved?(path: string): boolean;
24
+ exists?(path: string): Promise<boolean>;
25
+ isFolder?(path: string): Promise<boolean>;
15
26
  }
16
27
  export interface WorkspaceEditHost {
17
28
  editorOf(uri: string): Editor | undefined;
18
29
  readonly files: ProjectFiles | null;
30
+ versionOf?(uri: string): number | null;
31
+ isReadOnly?(uri: string): boolean;
32
+ openUris?(): readonly string[];
19
33
  }
34
+ export interface ResourceOperationView {
35
+ readonly kind: ResourceOperationKind;
36
+ readonly uri: string;
37
+ readonly newUri?: string;
38
+ }
39
+ export declare function textEntriesOf(edit: WorkspaceEdit): Map<string, TextEdit[][]>;
20
40
  export declare function entriesOf(edit: WorkspaceEdit): Map<string, TextEdit[][]> | null;
21
41
  export declare function renamesOf(edit: WorkspaceEdit): RenameFile[];
42
+ export declare function resourceOperationsOf(edit: WorkspaceEdit): ResourceOperationView[];
43
+ export declare function supportedResourceOperations(files: ProjectFiles | null | undefined): ResourceOperationKind[];
22
44
  export declare function applyWorkspaceEdit(edit: WorkspaceEdit, host: WorkspaceEditHost): Promise<ApplyWorkspaceEditResult>;