@opensumi/ide-editor 2.21.13 → 2.22.0

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 (238) hide show
  1. package/lib/browser/breadcrumb/default.js.map +1 -1
  2. package/lib/browser/breadcrumb/document-symbol.js.map +1 -1
  3. package/lib/browser/breadcrumb/index.js.map +1 -1
  4. package/lib/browser/component.js.map +1 -1
  5. package/lib/browser/decoration-applier.js.map +1 -1
  6. package/lib/browser/diff/compare.js.map +1 -1
  7. package/lib/browser/diff/index.d.ts.map +1 -1
  8. package/lib/browser/diff/index.js +1 -1
  9. package/lib/browser/diff/index.js.map +1 -1
  10. package/lib/browser/doc-cache/empty-doc-cache.js.map +1 -1
  11. package/lib/browser/doc-cache/local-storage-cache.js.map +1 -1
  12. package/lib/browser/doc-model/editor-document-model-service.js +3 -3
  13. package/lib/browser/doc-model/editor-document-model-service.js.map +1 -1
  14. package/lib/browser/doc-model/editor-document-model.d.ts +8 -0
  15. package/lib/browser/doc-model/editor-document-model.d.ts.map +1 -1
  16. package/lib/browser/doc-model/editor-document-model.js +61 -11
  17. package/lib/browser/doc-model/editor-document-model.js.map +1 -1
  18. package/lib/browser/doc-model/editor-document-registry.js.map +1 -1
  19. package/lib/browser/doc-model/override.js.map +1 -1
  20. package/lib/browser/doc-model/save-task.js +1 -1
  21. package/lib/browser/doc-model/save-task.js.map +1 -1
  22. package/lib/browser/doc-model/saveParticipants.d.ts +7 -7
  23. package/lib/browser/doc-model/saveParticipants.d.ts.map +1 -1
  24. package/lib/browser/doc-model/saveParticipants.js +69 -38
  25. package/lib/browser/doc-model/saveParticipants.js.map +1 -1
  26. package/lib/browser/doc-model/types.d.ts +1 -1
  27. package/lib/browser/doc-model/types.d.ts.map +1 -1
  28. package/lib/browser/editor-collection.service.d.ts +8 -3
  29. package/lib/browser/editor-collection.service.d.ts.map +1 -1
  30. package/lib/browser/editor-collection.service.js +75 -66
  31. package/lib/browser/editor-collection.service.js.map +1 -1
  32. package/lib/browser/editor-opener.js.map +1 -1
  33. package/lib/browser/editor.contribution.d.ts.map +1 -1
  34. package/lib/browser/editor.contribution.js +31 -3
  35. package/lib/browser/editor.contribution.js.map +1 -1
  36. package/lib/browser/editor.decoration.service.d.ts +5 -6
  37. package/lib/browser/editor.decoration.service.d.ts.map +1 -1
  38. package/lib/browser/editor.decoration.service.js +9 -1
  39. package/lib/browser/editor.decoration.service.js.map +1 -1
  40. package/lib/browser/editor.override.js +2 -2
  41. package/lib/browser/editor.override.js.map +1 -1
  42. package/lib/browser/editor.status-bar.service.js.map +1 -1
  43. package/lib/browser/editor.view.d.ts.map +1 -1
  44. package/lib/browser/editor.view.js +20 -23
  45. package/lib/browser/editor.view.js.map +1 -1
  46. package/lib/browser/error.d.ts +1 -1
  47. package/lib/browser/error.d.ts.map +1 -1
  48. package/lib/browser/feature.js.map +1 -1
  49. package/lib/browser/format/format.service.js.map +1 -1
  50. package/lib/browser/format/formatterSelect.js.map +1 -1
  51. package/lib/browser/fs-resource/file-tree-set.js +6 -6
  52. package/lib/browser/fs-resource/file-tree-set.js.map +1 -1
  53. package/lib/browser/fs-resource/fs-editor-doc.js +1 -1
  54. package/lib/browser/fs-resource/fs-editor-doc.js.map +1 -1
  55. package/lib/browser/fs-resource/fs-resource.js.map +1 -1
  56. package/lib/browser/fs-resource/index.js.map +1 -1
  57. package/lib/browser/history/index.d.ts.map +1 -1
  58. package/lib/browser/history/index.js +2 -1
  59. package/lib/browser/history/index.js.map +1 -1
  60. package/lib/browser/index.d.ts.map +1 -1
  61. package/lib/browser/index.js +2 -0
  62. package/lib/browser/index.js.map +1 -1
  63. package/lib/browser/language/diagnostic-collection.d.ts +5 -5
  64. package/lib/browser/language/diagnostic-collection.d.ts.map +1 -1
  65. package/lib/browser/language/diagnostic-collection.js +1 -1
  66. package/lib/browser/language/diagnostic-collection.js.map +1 -1
  67. package/lib/browser/language/language-status.contribution.js.map +1 -1
  68. package/lib/browser/language/language-status.service.js.map +1 -1
  69. package/lib/browser/language/language.service.d.ts +4 -3
  70. package/lib/browser/language/language.service.d.ts.map +1 -1
  71. package/lib/browser/language/language.service.js +8 -2
  72. package/lib/browser/language/language.service.js.map +1 -1
  73. package/lib/browser/menu/editor.context.js +3 -3
  74. package/lib/browser/menu/editor.context.js.map +1 -1
  75. package/lib/browser/menu/editor.menu.d.ts +2 -2
  76. package/lib/browser/menu/editor.menu.d.ts.map +1 -1
  77. package/lib/browser/menu/editor.menu.js +6 -8
  78. package/lib/browser/menu/editor.menu.js.map +1 -1
  79. package/lib/browser/menu/open-type-menu.contribution.js +9 -9
  80. package/lib/browser/menu/open-type-menu.contribution.js.map +1 -1
  81. package/lib/browser/menu/title-context.menu.js.map +1 -1
  82. package/lib/browser/merge-editor/merge-editor.contribution.d.ts +8 -0
  83. package/lib/browser/merge-editor/merge-editor.contribution.d.ts.map +1 -0
  84. package/lib/browser/merge-editor/merge-editor.contribution.js +29 -0
  85. package/lib/browser/merge-editor/merge-editor.contribution.js.map +1 -0
  86. package/lib/browser/merge-editor/merge-editor.provider.d.ts +8 -0
  87. package/lib/browser/merge-editor/merge-editor.provider.d.ts.map +1 -0
  88. package/lib/browser/merge-editor/merge-editor.provider.js +44 -0
  89. package/lib/browser/merge-editor/merge-editor.provider.js.map +1 -0
  90. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.contribution.js.map +1 -1
  91. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.service.js +7 -7
  92. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.service.js.map +1 -1
  93. package/lib/browser/monaco-contrib/command/command.service.d.ts +1 -1
  94. package/lib/browser/monaco-contrib/command/command.service.d.ts.map +1 -1
  95. package/lib/browser/monaco-contrib/command/command.service.js.map +1 -1
  96. package/lib/browser/monaco-contrib/tokenizer/textmate-registry.js.map +1 -1
  97. package/lib/browser/monaco-contrib/tokenizer/textmate.service.d.ts +2 -1
  98. package/lib/browser/monaco-contrib/tokenizer/textmate.service.d.ts.map +1 -1
  99. package/lib/browser/monaco-contrib/tokenizer/textmate.service.js +5 -2
  100. package/lib/browser/monaco-contrib/tokenizer/textmate.service.js.map +1 -1
  101. package/lib/browser/monaco-contrib/typeHierarchy/typeHierarchy.contribution.js.map +1 -1
  102. package/lib/browser/monaco-contrib/typeHierarchy/typeHierarchy.service.js +7 -7
  103. package/lib/browser/monaco-contrib/typeHierarchy/typeHierarchy.service.js.map +1 -1
  104. package/lib/browser/navigation.module.less +1 -1
  105. package/lib/browser/navigation.view.d.ts.map +1 -1
  106. package/lib/browser/navigation.view.js +26 -15
  107. package/lib/browser/navigation.view.js.map +1 -1
  108. package/lib/browser/preference/contribution.js.map +1 -1
  109. package/lib/browser/preference/converter.d.ts +3 -3
  110. package/lib/browser/preference/converter.d.ts.map +1 -1
  111. package/lib/browser/preference/schema.d.ts +1 -1
  112. package/lib/browser/preference/schema.d.ts.map +1 -1
  113. package/lib/browser/preference/schema.js +8 -8
  114. package/lib/browser/preference/schema.js.map +1 -1
  115. package/lib/browser/quick-open/go-to-line.js.map +1 -1
  116. package/lib/browser/quick-open/workspace-symbol-quickopen.d.ts.map +1 -1
  117. package/lib/browser/quick-open/workspace-symbol-quickopen.js +2 -2
  118. package/lib/browser/quick-open/workspace-symbol-quickopen.js.map +1 -1
  119. package/lib/browser/resource.service.js.map +1 -1
  120. package/lib/browser/tab.view.d.ts +1 -1
  121. package/lib/browser/tab.view.d.ts.map +1 -1
  122. package/lib/browser/tab.view.js +2 -2
  123. package/lib/browser/tab.view.js.map +1 -1
  124. package/lib/browser/types.d.ts +5 -5
  125. package/lib/browser/types.d.ts.map +1 -1
  126. package/lib/browser/untitled-resource.js +1 -1
  127. package/lib/browser/untitled-resource.js.map +1 -1
  128. package/lib/browser/view/suggest-widget.js.map +1 -1
  129. package/lib/browser/workbench-editor.service.d.ts +17 -0
  130. package/lib/browser/workbench-editor.service.d.ts.map +1 -1
  131. package/lib/browser/workbench-editor.service.js +259 -176
  132. package/lib/browser/workbench-editor.service.js.map +1 -1
  133. package/lib/common/doc-cache.d.ts +2 -2
  134. package/lib/common/doc-cache.d.ts.map +1 -1
  135. package/lib/common/editor.d.ts +20 -6
  136. package/lib/common/editor.d.ts.map +1 -1
  137. package/lib/common/editor.js +12 -1
  138. package/lib/common/editor.js.map +1 -1
  139. package/lib/common/language.d.ts +18 -7
  140. package/lib/common/language.d.ts.map +1 -1
  141. package/lib/common/language.js +15 -7
  142. package/lib/common/language.js.map +1 -1
  143. package/lib/common/mocks/workbench-editor.service.js.map +1 -1
  144. package/lib/common/resource.d.ts +8 -2
  145. package/lib/common/resource.d.ts.map +1 -1
  146. package/lib/common/resource.js +1 -0
  147. package/lib/common/resource.js.map +1 -1
  148. package/package.json +17 -16
  149. package/src/browser/breadcrumb/default.ts +299 -0
  150. package/src/browser/breadcrumb/document-symbol.ts +187 -0
  151. package/src/browser/breadcrumb/index.ts +96 -0
  152. package/src/browser/component.ts +204 -0
  153. package/src/browser/decoration-applier.ts +256 -0
  154. package/src/browser/diff/compare.ts +99 -0
  155. package/src/browser/diff/index.ts +81 -0
  156. package/src/browser/doc-cache/empty-doc-cache.ts +26 -0
  157. package/src/browser/doc-cache/index.ts +2 -0
  158. package/src/browser/doc-cache/local-storage-cache.ts +67 -0
  159. package/src/browser/doc-model/editor-document-error.ts +10 -0
  160. package/src/browser/doc-model/editor-document-model-service.ts +346 -0
  161. package/src/browser/doc-model/editor-document-model.ts +690 -0
  162. package/src/browser/doc-model/editor-document-registry.ts +119 -0
  163. package/src/browser/doc-model/editor-is-fn.ts +9 -0
  164. package/src/browser/doc-model/main.ts +4 -0
  165. package/src/browser/doc-model/override.ts +49 -0
  166. package/src/browser/doc-model/save-task.ts +88 -0
  167. package/src/browser/doc-model/saveParticipants.ts +227 -0
  168. package/src/browser/doc-model/types.ts +350 -0
  169. package/src/browser/editor-collection.service.ts +790 -0
  170. package/src/browser/editor-opener.ts +44 -0
  171. package/src/browser/editor.contribution.ts +1438 -0
  172. package/src/browser/editor.decoration.service.ts +247 -0
  173. package/src/browser/editor.less +4 -0
  174. package/src/browser/editor.module.less +548 -0
  175. package/src/browser/editor.override.ts +133 -0
  176. package/src/browser/editor.status-bar.service.ts +116 -0
  177. package/src/browser/editor.view.tsx +623 -0
  178. package/src/browser/error.ts +21 -0
  179. package/src/browser/feature.ts +63 -0
  180. package/src/browser/format/format.service.ts +95 -0
  181. package/src/browser/format/formatterSelect.ts +82 -0
  182. package/src/browser/fs-resource/file-tree-set.ts +126 -0
  183. package/src/browser/fs-resource/fs-editor-doc.ts +213 -0
  184. package/src/browser/fs-resource/fs-resource.ts +247 -0
  185. package/src/browser/fs-resource/index.ts +27 -0
  186. package/src/browser/grid/grid.service.ts +288 -0
  187. package/src/browser/history/index.ts +228 -0
  188. package/src/browser/index.ts +236 -0
  189. package/src/browser/language/diagnostic-collection.ts +83 -0
  190. package/src/browser/language/language-status.contribution.ts +81 -0
  191. package/src/browser/language/language-status.service.ts +32 -0
  192. package/src/browser/language/language.service.ts +185 -0
  193. package/src/browser/menu/editor.context.ts +186 -0
  194. package/src/browser/menu/editor.menu.ts +45 -0
  195. package/src/browser/menu/open-type-menu.contribution.ts +90 -0
  196. package/src/browser/menu/title-context.menu.ts +54 -0
  197. package/src/browser/merge-editor/merge-editor.contribution.ts +25 -0
  198. package/src/browser/merge-editor/merge-editor.provider.ts +36 -0
  199. package/src/browser/monaco-contrib/callHierarchy/callHierarchy.contribution.ts +78 -0
  200. package/src/browser/monaco-contrib/callHierarchy/callHierarchy.service.ts +160 -0
  201. package/src/browser/monaco-contrib/command/command.service.ts +438 -0
  202. package/src/browser/monaco-contrib/index.ts +4 -0
  203. package/src/browser/monaco-contrib/tokenizer/textmate-registry.ts +107 -0
  204. package/src/browser/monaco-contrib/tokenizer/textmate-tokenizer.ts +104 -0
  205. package/src/browser/monaco-contrib/tokenizer/textmate.service.ts +925 -0
  206. package/src/browser/monaco-contrib/typeHierarchy/typeHierarchy.contribution.ts +78 -0
  207. package/src/browser/monaco-contrib/typeHierarchy/typeHierarchy.service.ts +154 -0
  208. package/src/browser/navigation.module.less +96 -0
  209. package/src/browser/navigation.view.tsx +254 -0
  210. package/src/browser/preference/contribution.ts +8 -0
  211. package/src/browser/preference/converter.ts +793 -0
  212. package/src/browser/preference/schema.ts +1896 -0
  213. package/src/browser/preference/util.ts +14 -0
  214. package/src/browser/quick-open/go-to-line.ts +164 -0
  215. package/src/browser/quick-open/workspace-symbol-quickopen.ts +276 -0
  216. package/src/browser/resource.service.ts +263 -0
  217. package/src/browser/tab.view.tsx +514 -0
  218. package/src/browser/types.ts +467 -0
  219. package/src/browser/untitled-resource.ts +223 -0
  220. package/src/browser/view/editor.react.tsx +82 -0
  221. package/src/browser/view/react-hook.tsx +7 -0
  222. package/src/browser/view/suggest-widget.ts +77 -0
  223. package/src/browser/view/topPadding.ts +18 -0
  224. package/src/browser/workbench-editor.service.ts +2291 -0
  225. package/src/common/doc-cache.ts +117 -0
  226. package/src/common/editor.ts +799 -0
  227. package/src/common/index.ts +6 -0
  228. package/src/common/language-status.ts +33 -0
  229. package/src/common/language.ts +206 -0
  230. package/src/common/mocks/workbench-editor.service.ts +52 -0
  231. package/src/common/resource.ts +147 -0
  232. package/src/common/utils.ts +10 -0
  233. package/src/index.ts +1 -0
  234. package/lib/browser/component/scroll/scroll.d.ts +0 -2
  235. package/lib/browser/component/scroll/scroll.d.ts.map +0 -1
  236. package/lib/browser/component/scroll/scroll.js +0 -5
  237. package/lib/browser/component/scroll/scroll.js.map +0 -1
  238. package/lib/browser/component/scroll/scroll.module.less +0 -86
@@ -0,0 +1,263 @@
1
+ import { observable } from 'mobx';
2
+
3
+ import { Injectable, Autowired } from '@opensumi/di';
4
+ import { URI, IDisposable, WithEventBus, OnEvent } from '@opensumi/ide-core-browser';
5
+ import { Disposable, arrays, LRUMap, ILogger, Emitter } from '@opensumi/ide-core-common';
6
+
7
+ import {
8
+ ResourceService,
9
+ IResource,
10
+ IResourceProvider,
11
+ ResourceNeedUpdateEvent,
12
+ ResourceDidUpdateEvent,
13
+ IResourceDecoration,
14
+ ResourceDecorationNeedChangeEvent,
15
+ ResourceDecorationChangeEvent,
16
+ AskSaveResult,
17
+ } from '../common';
18
+
19
+ const { addElement } = arrays;
20
+
21
+ @Injectable()
22
+ export class ResourceServiceImpl extends WithEventBus implements ResourceService {
23
+ private providers: IResourceProvider[] = [];
24
+
25
+ private resources: Map<
26
+ string,
27
+ {
28
+ resource: IResource;
29
+ provider: IResourceProvider;
30
+ }
31
+ > = new Map();
32
+
33
+ private gettingResources: Map<
34
+ string,
35
+ Promise<{
36
+ resource: IResource;
37
+ provider: IResourceProvider;
38
+ } | null>
39
+ > = new Map();
40
+
41
+ private resourceDecoration: Map<string, IResourceDecoration> = new Map();
42
+
43
+ private cachedProvider = new LRUMap<string, IResourceProvider | undefined>(500, 200);
44
+
45
+ private onRegisterResourceProviderEmitter = new Emitter<IResourceProvider>();
46
+ public readonly onRegisterResourceProvider = this.onRegisterResourceProviderEmitter.event;
47
+
48
+ private onUnregisterResourceProviderEmitter = new Emitter<IResourceProvider>();
49
+ public readonly onUnregisterResourceProvider = this.onUnregisterResourceProviderEmitter.event;
50
+
51
+ @Autowired(ILogger)
52
+ logger: ILogger;
53
+
54
+ constructor() {
55
+ super();
56
+ }
57
+
58
+ @OnEvent(ResourceNeedUpdateEvent)
59
+ onResourceNeedUpdateEvent(e: ResourceNeedUpdateEvent) {
60
+ const uri = e.payload;
61
+ if (this.resources.has(uri.toString())) {
62
+ const resource = this.resources.get(uri.toString());
63
+ this.doGetResource(uri).then((newResource) => {
64
+ if (resource) {
65
+ Object.assign(resource?.resource, newResource?.resource);
66
+ resource.provider = newResource?.provider!;
67
+ }
68
+ this.eventBus.fire(new ResourceDidUpdateEvent(uri));
69
+ });
70
+ }
71
+ }
72
+
73
+ @OnEvent(ResourceDecorationNeedChangeEvent)
74
+ onResourceDecorationChangeEvent(e: ResourceDecorationNeedChangeEvent) {
75
+ this.getResourceDecoration(e.payload.uri); // ensure object
76
+ let changed = false;
77
+ const previous = this.resourceDecoration.get(e.payload.uri.toString()) || {};
78
+ new Set([...Object.keys(previous), ...Object.keys(e.payload.decoration)]).forEach((key) => {
79
+ if (previous[key] !== e.payload.decoration[key]) {
80
+ changed = true;
81
+ }
82
+ });
83
+ if (changed) {
84
+ Object.assign(this.resourceDecoration.get(e.payload.uri.toString())!, e.payload.decoration);
85
+ this.eventBus.fire(new ResourceDecorationChangeEvent(e.payload));
86
+ }
87
+ }
88
+
89
+ async getResource(uri: URI): Promise<IResource<any> | null> {
90
+ if (!this.resources.has(uri.toString())) {
91
+ const r = await this.doGetResource(uri);
92
+ if (!r) {
93
+ return null;
94
+ }
95
+ const resource = {
96
+ resource: observable(Object.assign({}, r.resource)),
97
+ provider: r.provider,
98
+ };
99
+ this.resources.set(uri.toString(), resource);
100
+ }
101
+ return this.resources.get(uri.toString())!.resource as IResource;
102
+ }
103
+
104
+ handlesUri(uri: URI): boolean {
105
+ const provider = this.calculateProvider(uri);
106
+ return !!provider;
107
+ }
108
+
109
+ async doGetResource(uri: URI): Promise<{
110
+ resource: IResource<any>;
111
+ provider: IResourceProvider;
112
+ } | null> {
113
+ if (!this.gettingResources.has(uri.toString())) {
114
+ const promise = (async () => {
115
+ const provider = this.calculateProvider(uri);
116
+ if (!provider) {
117
+ this.logger.error('URI has no resource provider: ' + uri);
118
+ return null;
119
+ } else {
120
+ const r = await provider.provideResource(uri);
121
+ r.uri = uri;
122
+ return {
123
+ resource: r,
124
+ provider,
125
+ };
126
+ }
127
+ })();
128
+ this.gettingResources.set(uri.toString(), promise);
129
+ promise.finally(() => {
130
+ this.gettingResources.delete(uri.toString());
131
+ });
132
+ }
133
+ return this.gettingResources.get(uri.toString())!;
134
+ }
135
+
136
+ registerResourceProvider(provider: IResourceProvider): IDisposable {
137
+ this.onRegisterResourceProviderEmitter.fire(provider);
138
+ const disposer = new Disposable();
139
+ disposer.addDispose(addElement(this.providers, provider));
140
+ disposer.addDispose({
141
+ dispose: () => {
142
+ for (const r of this.resources.values()) {
143
+ if (r.provider === provider) {
144
+ r.provider = GhostResourceProvider;
145
+ this.onUnregisterResourceProviderEmitter.fire(provider);
146
+ }
147
+ }
148
+ this.cachedProvider.clear();
149
+ },
150
+ });
151
+ this.cachedProvider.clear();
152
+ return disposer;
153
+ }
154
+
155
+ async shouldCloseResource(resource: IResource, openedResources: IResource[][]): Promise<boolean> {
156
+ const provider = this.getProvider(resource.uri);
157
+ if (!provider || !provider.shouldCloseResource) {
158
+ return true;
159
+ } else {
160
+ return await provider.shouldCloseResource(resource, openedResources);
161
+ }
162
+ }
163
+ async shouldCloseResourceWithoutConfirm(resource: IResource<any>): Promise<boolean> {
164
+ const provider = this.getProvider(resource.uri);
165
+ if (provider && provider.shouldCloseResourceWithoutConfirm) {
166
+ return await provider.shouldCloseResourceWithoutConfirm(resource);
167
+ }
168
+ return false;
169
+ }
170
+ async close(resource: IResource<any>, saveAction: AskSaveResult): Promise<boolean> {
171
+ const provider = this.getProvider(resource.uri);
172
+ if (!provider || !provider.close) {
173
+ return true;
174
+ } else {
175
+ return await provider.close(resource, saveAction);
176
+ }
177
+ }
178
+ private calculateProvider(uri: URI): IResourceProvider | undefined {
179
+ if (this.cachedProvider.has(uri.toString())) {
180
+ return this.cachedProvider.get(uri.toString());
181
+ }
182
+ let currentProvider: IResourceProvider | undefined;
183
+ let currentComparator: {
184
+ weight: number;
185
+ index: number;
186
+ } = {
187
+ weight: -1,
188
+ index: -1,
189
+ };
190
+
191
+ function acceptProvider(provider: IResourceProvider, weight: number, index: number) {
192
+ currentComparator = { weight, index };
193
+ currentProvider = provider;
194
+ }
195
+
196
+ this.providers.forEach((provider, index) => {
197
+ let weight = -1;
198
+ if (provider.handlesUri) {
199
+ weight = provider.handlesUri(uri);
200
+ } else if (provider.scheme) {
201
+ weight = provider.scheme === uri.scheme ? 10 : -1;
202
+ }
203
+
204
+ if (weight >= 0) {
205
+ if (weight > currentComparator.weight) {
206
+ acceptProvider(provider, weight, index);
207
+ } else if (weight === currentComparator.weight && index > currentComparator.index) {
208
+ acceptProvider(provider, weight, index);
209
+ }
210
+ }
211
+ });
212
+
213
+ this.cachedProvider.set(uri.toString(), currentProvider);
214
+
215
+ return currentProvider;
216
+ }
217
+
218
+ private getProvider(uri: URI): IResourceProvider | undefined {
219
+ const r = this.resources.get(uri.toString());
220
+ if (r) {
221
+ return r.provider;
222
+ } else {
223
+ return undefined;
224
+ }
225
+ }
226
+
227
+ public getResourceDecoration(uri: URI): IResourceDecoration {
228
+ if (!this.resourceDecoration.has(uri.toString())) {
229
+ this.resourceDecoration.set(uri.toString(), observable(DefaultResourceDecoration));
230
+ }
231
+ return this.resourceDecoration.get(uri.toString()) as IResourceDecoration;
232
+ }
233
+
234
+ getResourceSubname(resource: IResource<any>, groupResources: IResource<any>[]): string | null {
235
+ const provider = this.getProvider(resource.uri);
236
+ if (!provider) {
237
+ return null; // no provider
238
+ } else if (!provider.provideResourceSubname) {
239
+ return null;
240
+ } else {
241
+ return provider.provideResourceSubname(resource, groupResources);
242
+ }
243
+ }
244
+
245
+ disposeResource(resource: IResource<any>) {
246
+ const provider = this.getProvider(resource.uri);
247
+ this.resources.delete(resource.uri.toString());
248
+ if (!provider || !provider.onDisposeResource) {
249
+ return;
250
+ } else {
251
+ return provider.onDisposeResource(resource);
252
+ }
253
+ }
254
+ }
255
+
256
+ const DefaultResourceDecoration: IResourceDecoration = {
257
+ dirty: false,
258
+ };
259
+
260
+ const GhostResourceProvider: IResourceProvider = {
261
+ handlesUri: () => -1,
262
+ provideResource: (uri: URI) => ({ uri, name: '', icon: '' }),
263
+ };