@opensumi/ide-core-browser 2.21.8-rc-1670567192.0 → 2.21.8
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/lib/components/actions/index.d.ts.map +1 -1
- package/lib/components/actions/index.js +22 -2
- package/lib/components/actions/index.js.map +1 -1
- package/lib/components/tree/tree.module.less +0 -1
- package/lib/contextkey/testing.d.ts +0 -1
- package/lib/contextkey/testing.d.ts.map +1 -1
- package/lib/contextkey/testing.js +1 -2
- package/lib/contextkey/testing.js.map +1 -1
- package/lib/menu/next/menu.contrib.interface.d.ts +2 -3
- package/lib/menu/next/menu.contrib.interface.d.ts.map +1 -1
- package/lib/menu/next/menu.contrib.interface.js.map +1 -1
- package/lib/preferences/preference-configurations.js +1 -1
- package/lib/preferences/preference-configurations.js.map +1 -1
- package/lib/react-providers/config-provider.d.ts +0 -4
- package/lib/react-providers/config-provider.d.ts.map +1 -1
- package/lib/react-providers/config-provider.js.map +1 -1
- package/lib/services/storage-service.d.ts.map +1 -1
- package/lib/services/storage-service.js +1 -7
- package/lib/services/storage-service.js.map +1 -1
- package/lib/utils/label.d.ts.map +1 -1
- package/lib/utils/label.js +9 -16
- package/lib/utils/label.js.map +1 -1
- package/package.json +6 -7
- package/src/application/application-state-service.ts +0 -54
- package/src/application/application.service.ts +0 -51
- package/src/application/index.ts +0 -2
- package/src/authentication/authentication.contribution.ts +0 -35
- package/src/authentication/authentication.service.ts +0 -517
- package/src/bootstrap/app.ts +0 -745
- package/src/bootstrap/app.view.tsx +0 -88
- package/src/bootstrap/connection.ts +0 -116
- package/src/bootstrap/index.ts +0 -3
- package/src/bootstrap/inner-providers.ts +0 -297
- package/src/bootstrap/lifecycle.service.ts +0 -19
- package/src/browser-module.ts +0 -24
- package/src/common/common.command.ts +0 -977
- package/src/common/common.contribution.ts +0 -343
- package/src/common/common.define.ts +0 -55
- package/src/common/common.module.ts +0 -33
- package/src/common/common.storage.ts +0 -22
- package/src/common/container-id.ts +0 -12
- package/src/common/index.ts +0 -4
- package/src/components/actions/index.tsx +0 -486
- package/src/components/actions/placements.ts +0 -47
- package/src/components/actions/styles.module.less +0 -144
- package/src/components/badge/index.tsx +0 -1
- package/src/components/index.ts +0 -26
- package/src/components/layout/box-panel.tsx +0 -88
- package/src/components/layout/default-layout.tsx +0 -61
- package/src/components/layout/index.ts +0 -4
- package/src/components/layout/layout.ts +0 -80
- package/src/components/layout/split-panel.service.ts +0 -56
- package/src/components/layout/split-panel.tsx +0 -296
- package/src/components/layout/styles.module.less +0 -21
- package/src/components/loading/index.ts +0 -1
- package/src/components/loading/loading.less +0 -14
- package/src/components/loading/loading.view.tsx +0 -7
- package/src/components/loading/media/loading-dark.svg +0 -52
- package/src/components/loading/media/loading-hc.svg +0 -52
- package/src/components/loading/media/loading.svg +0 -52
- package/src/components/popover/styles.module.less +0 -81
- package/src/components/portal/index.tsx +0 -13
- package/src/components/progressbar/index.tsx +0 -16
- package/src/components/progressbar/styles.module.less +0 -31
- package/src/components/recycle-tree/index.ts +0 -1
- package/src/components/recycle-tree/recycle-tree.view.tsx +0 -368
- package/src/components/resize/resize.module.less +0 -78
- package/src/components/resize/resize.tsx +0 -663
- package/src/components/scroll/index.tsx +0 -386
- package/src/components/scroll/scroll.module.less +0 -108
- package/src/components/scrollbar/index.ts +0 -1
- package/src/components/scrollbar/scrollbar.less +0 -36
- package/src/components/scrollbar/scrollbar.view.ts +0 -8
- package/src/components/select/index.tsx +0 -12
- package/src/components/select/styles.less +0 -6
- package/src/components/tree/index.ts +0 -3
- package/src/components/tree/tree-node.view.tsx +0 -546
- package/src/components/tree/tree.module.less +0 -297
- package/src/components/tree/tree.view.tsx +0 -486
- package/src/context-key.ts +0 -48
- package/src/contextkey/dialog.ts +0 -3
- package/src/contextkey/explorer.ts +0 -26
- package/src/contextkey/index.ts +0 -6
- package/src/contextkey/outline.ts +0 -4
- package/src/contextkey/resource.ts +0 -61
- package/src/contextkey/terminal.ts +0 -7
- package/src/contextkey/testing.ts +0 -9
- package/src/contextkey/workspace.ts +0 -7
- package/src/core-preferences.ts +0 -318
- package/src/dom/index.ts +0 -176
- package/src/encoding-registry.ts +0 -83
- package/src/extensions/extensions-point.service.ts +0 -78
- package/src/extensions/index.ts +0 -3
- package/src/extensions/schema/browserViews.ts +0 -96
- package/src/extensions/schema/menu.ts +0 -245
- package/src/extensions/schema/opensumiExtensionPackageSchema.ts +0 -12
- package/src/extensions/schema/toolbar.ts +0 -338
- package/src/extensions/schema/vscodeExtensionPackageSchema.ts +0 -330
- package/src/fs/index.ts +0 -12
- package/src/hash-calculate/hash-calculate.contribution.ts +0 -19
- package/src/index.ts +0 -42
- package/src/keybinding/index.ts +0 -1
- package/src/keybinding/keybinding.ts +0 -908
- package/src/keyboard/index.ts +0 -3
- package/src/keyboard/keyboard-layout-provider.ts +0 -412
- package/src/keyboard/keyboard-layout-service.ts +0 -449
- package/src/keyboard/keys.ts +0 -748
- package/src/keyboard/layouts/_.contribution.ts +0 -24
- package/src/keyboard/layouts/cz.win.ts +0 -168
- package/src/keyboard/layouts/de-swiss.win.ts +0 -168
- package/src/keyboard/layouts/de.darwin.ts +0 -131
- package/src/keyboard/layouts/de.linux.ts +0 -186
- package/src/keyboard/layouts/de.win.ts +0 -168
- package/src/keyboard/layouts/dk.win.ts +0 -168
- package/src/keyboard/layouts/dvorak.darwin.ts +0 -131
- package/src/keyboard/layouts/en-belgian.win.ts +0 -168
- package/src/keyboard/layouts/en-ext.darwin.ts +0 -131
- package/src/keyboard/layouts/en-in.win.ts +0 -168
- package/src/keyboard/layouts/en-intl.darwin.ts +0 -131
- package/src/keyboard/layouts/en-intl.win.ts +0 -168
- package/src/keyboard/layouts/en-uk.darwin.ts +0 -131
- package/src/keyboard/layouts/en-uk.win.ts +0 -168
- package/src/keyboard/layouts/en.darwin.ts +0 -139
- package/src/keyboard/layouts/en.linux.ts +0 -186
- package/src/keyboard/layouts/en.win.ts +0 -173
- package/src/keyboard/layouts/es-latin.win.ts +0 -168
- package/src/keyboard/layouts/es.darwin.ts +0 -131
- package/src/keyboard/layouts/es.linux.ts +0 -186
- package/src/keyboard/layouts/es.win.ts +0 -168
- package/src/keyboard/layouts/fr.darwin.ts +0 -131
- package/src/keyboard/layouts/fr.linux.ts +0 -186
- package/src/keyboard/layouts/fr.win.ts +0 -168
- package/src/keyboard/layouts/hu.win.ts +0 -168
- package/src/keyboard/layouts/it.darwin.ts +0 -131
- package/src/keyboard/layouts/it.win.ts +0 -168
- package/src/keyboard/layouts/jp-roman.darwin.ts +0 -131
- package/src/keyboard/layouts/jp.darwin.ts +0 -131
- package/src/keyboard/layouts/ko.darwin.ts +0 -131
- package/src/keyboard/layouts/layout.contribution.darwin.ts +0 -23
- package/src/keyboard/layouts/layout.contribution.linux.ts +0 -12
- package/src/keyboard/layouts/layout.contribution.ts +0 -9
- package/src/keyboard/layouts/layout.contribution.win.ts +0 -29
- package/src/keyboard/layouts/no.win.ts +0 -168
- package/src/keyboard/layouts/pl.darwin.ts +0 -131
- package/src/keyboard/layouts/pl.win.ts +0 -168
- package/src/keyboard/layouts/pt-br.win.ts +0 -169
- package/src/keyboard/layouts/pt.darwin.ts +0 -131
- package/src/keyboard/layouts/pt.win.ts +0 -168
- package/src/keyboard/layouts/ru.darwin.ts +0 -131
- package/src/keyboard/layouts/ru.linux.ts +0 -186
- package/src/keyboard/layouts/ru.win.ts +0 -168
- package/src/keyboard/layouts/sv.darwin.ts +0 -131
- package/src/keyboard/layouts/sv.win.ts +0 -168
- package/src/keyboard/layouts/thai.win.ts +0 -168
- package/src/keyboard/layouts/tr.win.ts +0 -168
- package/src/keyboard/layouts/zh-hans.darwin.ts +0 -131
- package/src/layout/accordion/tab-bar-toolbar.tsx +0 -59
- package/src/layout/accordion/view-context-key.registry.ts +0 -34
- package/src/layout/constants.ts +0 -7
- package/src/layout/index.ts +0 -5
- package/src/layout/layout-hooks.ts +0 -68
- package/src/layout/layout-state.ts +0 -107
- package/src/layout/layout.interface.ts +0 -101
- package/src/layout/layout.ts +0 -80
- package/src/layout/view-id.ts +0 -18
- package/src/logger/browser-logger.ts +0 -51
- package/src/logger/index.ts +0 -1
- package/src/markdown/index.tsx +0 -62
- package/src/menu/next/base.ts +0 -513
- package/src/menu/next/ctxmenu-service.ts +0 -188
- package/src/menu/next/index.ts +0 -10
- package/src/menu/next/menu-id.ts +0 -86
- package/src/menu/next/menu-service.ts +0 -252
- package/src/menu/next/menu-util.ts +0 -77
- package/src/menu/next/menu.contrib.interface.ts +0 -79
- package/src/menu/next/menu.interface.ts +0 -253
- package/src/menu/next/menubar-service.ts +0 -211
- package/src/menu/next/renderer/ctxmenu/base.ts +0 -18
- package/src/menu/next/renderer/ctxmenu/browser.ts +0 -45
- package/src/menu/next/renderer/ctxmenu/electron.ts +0 -207
- package/src/menu/next/toolbar-action.service.ts +0 -132
- package/src/monaco/index.ts +0 -128
- package/src/opener/command-opener.ts +0 -42
- package/src/opener/default-opener.ts +0 -31
- package/src/opener/http-opener.ts +0 -25
- package/src/opener/index.ts +0 -19
- package/src/opener/opener.contribution.ts +0 -57
- package/src/opener/opener.service.ts +0 -66
- package/src/preferences/early-preferences.ts +0 -117
- package/src/preferences/index.ts +0 -9
- package/src/preferences/preference-configurations.ts +0 -77
- package/src/preferences/preference-contribution.ts +0 -401
- package/src/preferences/preference-provider.ts +0 -414
- package/src/preferences/preference-proxy.ts +0 -292
- package/src/preferences/preference-scope.ts +0 -3
- package/src/preferences/preference-service.ts +0 -571
- package/src/preferences/settings.ts +0 -53
- package/src/preferences/types.ts +0 -111
- package/src/progress/index.ts +0 -58
- package/src/progress/progress-bar.tsx +0 -22
- package/src/progress/progress-indicator.ts +0 -90
- package/src/progress/progress.module.less +0 -46
- package/src/progress/progress.service.tsx +0 -429
- package/src/quick-open/index.ts +0 -655
- package/src/quick-open/recent-files.ts +0 -68
- package/src/raw-context-key.ts +0 -116
- package/src/react-hooks/event.tsx +0 -80
- package/src/react-hooks/hot-key.tsx +0 -58
- package/src/react-hooks/index.ts +0 -3
- package/src/react-hooks/injectable-hooks.tsx +0 -35
- package/src/react-hooks/portal-hooks.tsx +0 -38
- package/src/react-providers/config-provider.tsx +0 -263
- package/src/react-providers/index.tsx +0 -2
- package/src/react-providers/slot.module.less +0 -19
- package/src/react-providers/slot.tsx +0 -242
- package/src/services/clipboard.service.ts +0 -97
- package/src/services/credentials-service.ts +0 -91
- package/src/services/crypto-service.ts +0 -23
- package/src/services/external-uri.service.ts +0 -68
- package/src/services/index.ts +0 -7
- package/src/services/label-service.ts +0 -386
- package/src/services/status-bar-service.ts +0 -108
- package/src/services/storage-service.ts +0 -197
- package/src/style/codicons/README.md +0 -22
- package/src/style/codicons/codicon-animations.css +0 -15
- package/src/style/codicons/generator.js +0 -15
- package/src/style/entry.less +0 -25
- package/src/style/icon/fileicons/file-default.svg +0 -1
- package/src/style/icon/fileicons/folder-default.svg +0 -1
- package/src/style/icon/fileicons.less +0 -20
- package/src/style/icon/icon.ts +0 -543
- package/src/style/icon/ide-iconfont.ts +0 -13
- package/src/style/icon/index.less +0 -54
- package/src/style/icon/seti.woff +0 -0
- package/src/style/icon/symbol-icons/boolean-dark.svg +0 -3
- package/src/style/icon/symbol-icons/boolean-light.svg +0 -3
- package/src/style/icon/symbol-icons/class-dark.svg +0 -3
- package/src/style/icon/symbol-icons/class-light.svg +0 -3
- package/src/style/icon/symbol-icons/constant-dark.svg +0 -4
- package/src/style/icon/symbol-icons/constant-light.svg +0 -4
- package/src/style/icon/symbol-icons/enumerator-dark.svg +0 -3
- package/src/style/icon/symbol-icons/enumerator-item-dark.svg +0 -3
- package/src/style/icon/symbol-icons/enumerator-item-light.svg +0 -3
- package/src/style/icon/symbol-icons/enumerator-light.svg +0 -3
- package/src/style/icon/symbol-icons/event-dark.svg +0 -3
- package/src/style/icon/symbol-icons/event-light.svg +0 -3
- package/src/style/icon/symbol-icons/field-dark.svg +0 -3
- package/src/style/icon/symbol-icons/field-light.svg +0 -3
- package/src/style/icon/symbol-icons/file-dark.svg +0 -3
- package/src/style/icon/symbol-icons/file-light.svg +0 -3
- package/src/style/icon/symbol-icons/indexer-dark.svg +0 -3
- package/src/style/icon/symbol-icons/indexer-light.svg +0 -3
- package/src/style/icon/symbol-icons/interface-dark.svg +0 -3
- package/src/style/icon/symbol-icons/interface-light.svg +0 -3
- package/src/style/icon/symbol-icons/keyword-dark.svg +0 -3
- package/src/style/icon/symbol-icons/keyword-light.svg +0 -3
- package/src/style/icon/symbol-icons/method-dark.svg +0 -3
- package/src/style/icon/symbol-icons/method-light.svg +0 -3
- package/src/style/icon/symbol-icons/namespace-dark.svg +0 -3
- package/src/style/icon/symbol-icons/namespace-light.svg +0 -3
- package/src/style/icon/symbol-icons/numeric-dark.svg +0 -3
- package/src/style/icon/symbol-icons/numeric-light.svg +0 -3
- package/src/style/icon/symbol-icons/operator-dark.svg +0 -3
- package/src/style/icon/symbol-icons/operator-light.svg +0 -3
- package/src/style/icon/symbol-icons/property-dark.svg +0 -3
- package/src/style/icon/symbol-icons/property-light.svg +0 -3
- package/src/style/icon/symbol-icons/snippet-dark.svg +0 -3
- package/src/style/icon/symbol-icons/snippet-light.svg +0 -3
- package/src/style/icon/symbol-icons/string-dark.svg +0 -3
- package/src/style/icon/symbol-icons/string-light.svg +0 -3
- package/src/style/icon/symbol-icons/structure-dark.svg +0 -3
- package/src/style/icon/symbol-icons/structure-light.svg +0 -3
- package/src/style/icon/symbol-icons/symbol-icons.css +0 -284
- package/src/style/icon/symbol-icons/template-dark.svg +0 -3
- package/src/style/icon/symbol-icons/template-light.svg +0 -3
- package/src/style/icon/symbol-icons/variable-dark.svg +0 -3
- package/src/style/icon/symbol-icons/variable-light.svg +0 -3
- package/src/style/icon.less +0 -8
- package/src/style/index.less +0 -14
- package/src/style/monaco-override.less +0 -116
- package/src/style/normalize.less +0 -92
- package/src/style/octicons/octicons-cdn.css +0 -720
- package/src/style/octicons/octicons.css +0 -714
- package/src/style/octicons/octicons.html +0 -1882
- package/src/style/octicons/octicons.svg +0 -582
- package/src/style/octicons/octicons.ttf +0 -0
- package/src/style/override.less +0 -97
- package/src/style/toolbar.less +0 -199
- package/src/style/utilities.less +0 -8
- package/src/style/variable.less +0 -8
- package/src/terminal/index.ts +0 -7
- package/src/toolbar/components/auto-complete.tsx +0 -0
- package/src/toolbar/components/button.tsx +0 -440
- package/src/toolbar/components/index.ts +0 -2
- package/src/toolbar/components/select.tsx +0 -189
- package/src/toolbar/index.ts +0 -3
- package/src/toolbar/toolbar.popover.registry.ts +0 -32
- package/src/toolbar/toolbar.registry.ts +0 -352
- package/src/toolbar/toolbar.tsx +0 -710
- package/src/toolbar/types.ts +0 -383
- package/src/tree/index.ts +0 -3
- package/src/tree/tree-expansion.ts +0 -25
- package/src/tree/tree-selection.ts +0 -89
- package/src/tree/tree.ts +0 -294
- package/src/utils/create-overlay.tsx +0 -53
- package/src/utils/electron.ts +0 -92
- package/src/utils/env.ts +0 -26
- package/src/utils/icon.ts +0 -13
- package/src/utils/index.ts +0 -7
- package/src/utils/json.ts +0 -251
- package/src/utils/label.tsx +0 -36
- package/src/utils/parse.ts +0 -72
- package/src/utils/react-hooks.ts +0 -118
- package/src/variable/index.ts +0 -1
- package/src/variable/variable.ts +0 -84
- package/src/window/index.ts +0 -34
- package/src/window/window.service.ts +0 -100
|
@@ -1,571 +0,0 @@
|
|
|
1
|
-
import { Injectable, Autowired } from '@opensumi/di';
|
|
2
|
-
import {
|
|
3
|
-
Deferred,
|
|
4
|
-
Emitter,
|
|
5
|
-
DisposableCollection,
|
|
6
|
-
Disposable,
|
|
7
|
-
URI,
|
|
8
|
-
isUndefined,
|
|
9
|
-
isEmptyObject,
|
|
10
|
-
objects,
|
|
11
|
-
LRUMap,
|
|
12
|
-
} from '@opensumi/ide-core-common';
|
|
13
|
-
|
|
14
|
-
import { PreferenceConfigurations } from './preference-configurations';
|
|
15
|
-
import { PreferenceSchemaProvider } from './preference-contribution';
|
|
16
|
-
import { PreferenceProvider, PreferenceProviderDataChange, PreferenceProviderDataChanges } from './preference-provider';
|
|
17
|
-
import { PreferenceScope } from './preference-scope';
|
|
18
|
-
import {
|
|
19
|
-
PreferenceChange,
|
|
20
|
-
PreferenceChanges,
|
|
21
|
-
PreferenceProviderProvider,
|
|
22
|
-
PreferenceResolveResult,
|
|
23
|
-
PreferenceService,
|
|
24
|
-
} from './types';
|
|
25
|
-
|
|
26
|
-
const { deepClone } = objects;
|
|
27
|
-
|
|
28
|
-
export class PreferenceChangeImpl implements PreferenceChange {
|
|
29
|
-
constructor(private change: PreferenceProviderDataChange) {}
|
|
30
|
-
|
|
31
|
-
get preferenceName() {
|
|
32
|
-
return this.change.preferenceName;
|
|
33
|
-
}
|
|
34
|
-
get newValue() {
|
|
35
|
-
return this.change.newValue;
|
|
36
|
-
}
|
|
37
|
-
get oldValue() {
|
|
38
|
-
return this.change.oldValue;
|
|
39
|
-
}
|
|
40
|
-
get scope(): PreferenceScope {
|
|
41
|
-
return this.change.scope;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
public affects(resourceUri?: string): boolean {
|
|
45
|
-
const resourcePath = resourceUri && new URI(resourceUri).path;
|
|
46
|
-
const domain = this.change.domain;
|
|
47
|
-
return !resourcePath || !domain || domain.some((uri) => new URI(uri).path.relativity(resourcePath) >= 0);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
@Injectable()
|
|
52
|
-
export class PreferenceServiceImpl implements PreferenceService {
|
|
53
|
-
protected readonly onPreferenceChangedEmitter = new Emitter<PreferenceChange>();
|
|
54
|
-
public readonly onPreferenceChanged = this.onPreferenceChangedEmitter.event;
|
|
55
|
-
|
|
56
|
-
protected readonly onPreferencesChangedEmitter = new Emitter<PreferenceChanges>();
|
|
57
|
-
public readonly onPreferencesChanged = this.onPreferencesChangedEmitter.event;
|
|
58
|
-
|
|
59
|
-
private readonly onLanguagePreferencesChangedEmitter = new Emitter<{
|
|
60
|
-
overrideIdentifier: string;
|
|
61
|
-
changes: PreferenceChanges;
|
|
62
|
-
}>();
|
|
63
|
-
public readonly onLanguagePreferencesChanged = this.onLanguagePreferencesChangedEmitter.event;
|
|
64
|
-
|
|
65
|
-
protected readonly toDispose = new DisposableCollection(
|
|
66
|
-
this.onPreferenceChangedEmitter,
|
|
67
|
-
this.onPreferencesChangedEmitter,
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
@Autowired(PreferenceSchemaProvider)
|
|
71
|
-
protected readonly schema: PreferenceSchemaProvider;
|
|
72
|
-
|
|
73
|
-
@Autowired(PreferenceProvider, { tag: PreferenceScope.Default })
|
|
74
|
-
protected readonly defaultPreferenceProvider: PreferenceProvider;
|
|
75
|
-
|
|
76
|
-
@Autowired(PreferenceProviderProvider)
|
|
77
|
-
protected readonly providerProvider: PreferenceProviderProvider;
|
|
78
|
-
|
|
79
|
-
@Autowired(PreferenceConfigurations)
|
|
80
|
-
protected readonly configurations: PreferenceConfigurations;
|
|
81
|
-
|
|
82
|
-
protected readonly preferenceProviders = new Map<PreferenceScope, PreferenceProvider>();
|
|
83
|
-
|
|
84
|
-
private specificEmitters = new Map<string, Emitter<PreferenceChange>>();
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* 使用 getPreferences()方法获取
|
|
88
|
-
*/
|
|
89
|
-
protected preferences: { [key: string]: any } = {};
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* 缓存,减少每次都 doResolve 的开销
|
|
93
|
-
*/
|
|
94
|
-
private cachedPreference = new LRUMap<string, LRUMap<string, PreferenceResolveResult<any>>>(1000, 500);
|
|
95
|
-
|
|
96
|
-
constructor() {
|
|
97
|
-
this.init();
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
protected async init(): Promise<void> {
|
|
101
|
-
// this.toDispose.push(Disposable.create(() => this._ready.reject(new Error('preference service is disposed'))));
|
|
102
|
-
this.initializeProviders();
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
public dispose(): void {
|
|
106
|
-
this.toDispose.dispose();
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
public onSpecificPreferenceChange(preferenceName, listener) {
|
|
110
|
-
if (!this.specificEmitters.has(preferenceName)) {
|
|
111
|
-
this.specificEmitters.set(preferenceName, new Emitter());
|
|
112
|
-
}
|
|
113
|
-
return this.specificEmitters.get(preferenceName)!.event(listener);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
protected readonly _ready = new Deferred<void>();
|
|
117
|
-
get ready(): Promise<void> {
|
|
118
|
-
return this._ready.promise;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* 初始化并创建默认的PreferenceProvider
|
|
123
|
-
*/
|
|
124
|
-
protected async initializeProviders(): Promise<void> {
|
|
125
|
-
const scopes = PreferenceScope.getScopes();
|
|
126
|
-
const promises: Array<Promise<void>> = [];
|
|
127
|
-
for (const scope of scopes) {
|
|
128
|
-
const provider = this.providerProvider(scope);
|
|
129
|
-
this.preferenceProviders.set(scope, provider);
|
|
130
|
-
// 获得每个Scope下的PreferenceProvider后,监听配置变化进行变更合并
|
|
131
|
-
this.toDispose.push(
|
|
132
|
-
provider.onDidPreferencesChanged((changes) => {
|
|
133
|
-
// 对应作用域的配置修改至通知对应Provider
|
|
134
|
-
// 当 PreferenceService 中依然能收到一次更新通知
|
|
135
|
-
const preferenceNames = Object.keys(changes.default);
|
|
136
|
-
const defaultChange = {};
|
|
137
|
-
for (const name of preferenceNames) {
|
|
138
|
-
if (changes.default[name].scope === scope) {
|
|
139
|
-
defaultChange[name] = changes.default[name];
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
if (isEmptyObject(defaultChange)) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
this.reconcilePreferences({
|
|
146
|
-
default: defaultChange,
|
|
147
|
-
languageSpecific: changes.languageSpecific,
|
|
148
|
-
});
|
|
149
|
-
}),
|
|
150
|
-
);
|
|
151
|
-
promises.push(provider.ready);
|
|
152
|
-
}
|
|
153
|
-
return Promise.all(promises)
|
|
154
|
-
.then(() => {
|
|
155
|
-
this._ready.resolve();
|
|
156
|
-
})
|
|
157
|
-
.catch((e) => {
|
|
158
|
-
this._ready.reject(e);
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* 合并preference 变化
|
|
164
|
-
* @param changes
|
|
165
|
-
*/
|
|
166
|
-
protected reconcilePreferences(changes: PreferenceProviderDataChanges): void {
|
|
167
|
-
const changesToEmit: PreferenceChanges = {};
|
|
168
|
-
const languageSpecificChangesToEmit: {
|
|
169
|
-
[languageId: string]: PreferenceChanges;
|
|
170
|
-
} = {};
|
|
171
|
-
const acceptChange = (change: PreferenceProviderDataChange, language) => {
|
|
172
|
-
this.cachedPreference.delete(change.preferenceName);
|
|
173
|
-
if (language) {
|
|
174
|
-
if (!languageSpecificChangesToEmit[language]) {
|
|
175
|
-
languageSpecificChangesToEmit[language] = {};
|
|
176
|
-
}
|
|
177
|
-
languageSpecificChangesToEmit[language][change.preferenceName] = new PreferenceChangeImpl(change);
|
|
178
|
-
} else {
|
|
179
|
-
changesToEmit[change.preferenceName] = new PreferenceChangeImpl(change);
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
// 尝试获取Preference变更带来的配置修改
|
|
184
|
-
this.tryAcceptChanges(changes.default, acceptChange);
|
|
185
|
-
Object.keys(changes.languageSpecific).forEach((language) => {
|
|
186
|
-
// 尝试获取Preference变更带来的语言配置修改
|
|
187
|
-
this.tryAcceptChanges(changes.languageSpecific[language], acceptChange, language);
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
// 触发配置变更事件
|
|
191
|
-
const changedPreferenceNames = Object.keys(changesToEmit);
|
|
192
|
-
if (changedPreferenceNames.length > 0) {
|
|
193
|
-
this.onPreferencesChangedEmitter.fire(changesToEmit);
|
|
194
|
-
}
|
|
195
|
-
changedPreferenceNames.forEach((preferenceName) => {
|
|
196
|
-
this.onPreferenceChangedEmitter.fire(changesToEmit[preferenceName]);
|
|
197
|
-
if (this.specificEmitters.has(preferenceName)) {
|
|
198
|
-
this.specificEmitters.get(preferenceName)!.fire(changesToEmit[preferenceName]);
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
Object.keys(languageSpecificChangesToEmit).forEach((language) => {
|
|
202
|
-
this.onLanguagePreferencesChangedEmitter.fire({
|
|
203
|
-
overrideIdentifier: language,
|
|
204
|
-
changes: languageSpecificChangesToEmit[language],
|
|
205
|
-
});
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* 尝试处理配置修改带来的配置变化
|
|
211
|
-
*
|
|
212
|
-
* @private
|
|
213
|
-
* @param {{[preferenceName: string]: PreferenceProviderDataChange}} changes
|
|
214
|
-
* @param {(change: PreferenceProviderDataChange, language?: string) => void} acceptChange
|
|
215
|
-
* @param {string} [language]
|
|
216
|
-
* @memberof PreferenceServiceImpl
|
|
217
|
-
*/
|
|
218
|
-
private tryAcceptChanges(
|
|
219
|
-
changes: { [preferenceName: string]: PreferenceProviderDataChange },
|
|
220
|
-
acceptChange: (change: PreferenceProviderDataChange, language?: string) => void,
|
|
221
|
-
language?: string,
|
|
222
|
-
) {
|
|
223
|
-
for (const preferenceName of Object.keys(changes)) {
|
|
224
|
-
let change = changes[preferenceName];
|
|
225
|
-
|
|
226
|
-
if (this.schema.isValidInScope(preferenceName, PreferenceScope.Folder)) {
|
|
227
|
-
acceptChange(change, language);
|
|
228
|
-
continue;
|
|
229
|
-
}
|
|
230
|
-
for (const scope of PreferenceScope.getReversedScopes()) {
|
|
231
|
-
if (this.schema.isValidInScope(preferenceName, scope)) {
|
|
232
|
-
const provider = this.getProvider(scope);
|
|
233
|
-
if (provider) {
|
|
234
|
-
const value = provider.get(preferenceName, change.domain ? change.domain[0] : undefined, language);
|
|
235
|
-
if (scope > change.scope && value !== undefined) {
|
|
236
|
-
// 配置项已在更高的作用域下被定义,无法处理当前作用域的变化
|
|
237
|
-
break;
|
|
238
|
-
} else if (scope === change.scope && change.newValue !== undefined) {
|
|
239
|
-
// 配置项修改为了非 `undefined` 的值
|
|
240
|
-
acceptChange(change, language);
|
|
241
|
-
break;
|
|
242
|
-
} else if (scope < change.scope && change.newValue === undefined && value !== undefined) {
|
|
243
|
-
// 对应配置项已经改为 `undefined`, 使用低一级作用域下的配置值
|
|
244
|
-
change = {
|
|
245
|
-
...change,
|
|
246
|
-
newValue: value,
|
|
247
|
-
scope,
|
|
248
|
-
};
|
|
249
|
-
acceptChange(change, language);
|
|
250
|
-
break;
|
|
251
|
-
} else if (scope === PreferenceScope.Default && change.newValue === undefined && value === undefined) {
|
|
252
|
-
// 到达这里, 说明已经没有针对语言的配置,因此需要将其变为非语言指定的值
|
|
253
|
-
change = {
|
|
254
|
-
...change,
|
|
255
|
-
newValue: this.get(preferenceName, undefined, change.domain ? change.domain[0] : undefined),
|
|
256
|
-
scope,
|
|
257
|
-
};
|
|
258
|
-
acceptChange(change, language);
|
|
259
|
-
break;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* 获取对应scope下的preferenceProvider
|
|
269
|
-
* @protected
|
|
270
|
-
* @param {PreferenceScope} scope
|
|
271
|
-
* @returns {(PreferenceProvider | undefined)}
|
|
272
|
-
* @memberof PreferenceServiceImpl
|
|
273
|
-
*/
|
|
274
|
-
public getProvider(scope: PreferenceScope): PreferenceProvider | undefined {
|
|
275
|
-
return this.preferenceProviders.get(scope);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* 获取指定资源的Preferences
|
|
280
|
-
* @param {string} [resourceUri]
|
|
281
|
-
* @returns {{ [key: string]: any }}
|
|
282
|
-
* @memberof PreferenceServiceImpl
|
|
283
|
-
*/
|
|
284
|
-
public getPreferences(resourceUri?: string): { [key: string]: any } {
|
|
285
|
-
const preferences: { [key: string]: any } = {};
|
|
286
|
-
for (const preferenceName of this.schema.getPreferenceNames()) {
|
|
287
|
-
preferences[preferenceName] = this.get(preferenceName, undefined, resourceUri);
|
|
288
|
-
}
|
|
289
|
-
return preferences;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* 插叙是否有对应配置
|
|
294
|
-
* @param {string} preferenceName
|
|
295
|
-
* @param {string} [resourceUri]
|
|
296
|
-
* @returns {boolean}
|
|
297
|
-
* @memberof PreferenceServiceImpl
|
|
298
|
-
*/
|
|
299
|
-
public has(preferenceName: string, resourceUri?: string, language?: string): boolean {
|
|
300
|
-
return this.get(preferenceName, undefined, resourceUri, language) !== undefined;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
public get<T>(preferenceName: string, defaultValue?: T, resourceUri?: string, language?: string): T | undefined {
|
|
304
|
-
return this.resolve<T>(preferenceName, defaultValue, resourceUri, language).value;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
public lookUp<T>(key: string): PreferenceResolveResult<T> {
|
|
308
|
-
let value;
|
|
309
|
-
let reset;
|
|
310
|
-
if (!key) {
|
|
311
|
-
return {
|
|
312
|
-
value,
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
const parts = key.split('.');
|
|
316
|
-
if (!parts || parts.length === 0) {
|
|
317
|
-
return {
|
|
318
|
-
value,
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
for (let i = parts.length - 1; i > 0; i--) {
|
|
322
|
-
value = this.doResolve(parts.slice(0, i).join('.')).value;
|
|
323
|
-
if (value) {
|
|
324
|
-
reset = parts.slice(i);
|
|
325
|
-
break;
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
while (reset && reset.length > 0) {
|
|
329
|
-
value = value[reset.shift()];
|
|
330
|
-
}
|
|
331
|
-
return { value };
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
public resolve<T>(
|
|
335
|
-
preferenceName: string,
|
|
336
|
-
defaultValue?: T,
|
|
337
|
-
resourceUri?: string,
|
|
338
|
-
language?: string,
|
|
339
|
-
untilScope?: PreferenceScope,
|
|
340
|
-
): PreferenceResolveResult<T> {
|
|
341
|
-
const result = this.doResolve(preferenceName, defaultValue, resourceUri, untilScope, language);
|
|
342
|
-
if (typeof result.value === 'undefined') {
|
|
343
|
-
return this.lookUp(preferenceName);
|
|
344
|
-
}
|
|
345
|
-
return result;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
public async set(
|
|
349
|
-
preferenceName: string,
|
|
350
|
-
value: any,
|
|
351
|
-
scope: PreferenceScope | undefined,
|
|
352
|
-
resourceUri?: string,
|
|
353
|
-
): Promise<void> {
|
|
354
|
-
await this.ready;
|
|
355
|
-
const resolvedScope = !isUndefined(scope)
|
|
356
|
-
? scope
|
|
357
|
-
: !resourceUri
|
|
358
|
-
? PreferenceScope.Workspace
|
|
359
|
-
: PreferenceScope.Folder;
|
|
360
|
-
// TODO: 错误日志错误码机制
|
|
361
|
-
if (resolvedScope === PreferenceScope.User && this.configurations.isSectionName(preferenceName.split('.', 1)[0])) {
|
|
362
|
-
throw new Error(`Unable to write to User Settings because ${preferenceName} does not support for global scope.`);
|
|
363
|
-
}
|
|
364
|
-
if (resolvedScope === PreferenceScope.Folder && !resourceUri) {
|
|
365
|
-
throw new Error('Unable to write to Folder Settings because no resource is provided.');
|
|
366
|
-
}
|
|
367
|
-
const provider = this.getProvider(resolvedScope);
|
|
368
|
-
if (provider && (await provider.setPreference(preferenceName, value, resourceUri))) {
|
|
369
|
-
return;
|
|
370
|
-
}
|
|
371
|
-
throw new Error(`Unable to write to ${PreferenceScope.getScopeNames(resolvedScope)[0]} Settings.`);
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
public async update(preferenceName: string, value: any, defaultScope = PreferenceScope.User) {
|
|
375
|
-
const resolved = this.resolve(preferenceName);
|
|
376
|
-
// 默认会跳过 PreferenceScope.Default 作用域值的设置
|
|
377
|
-
if (resolved?.scope) {
|
|
378
|
-
this.set(preferenceName, value, resolved.scope);
|
|
379
|
-
} else {
|
|
380
|
-
this.set(preferenceName, value, defaultScope);
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
public hasLanguageSpecific(preferenceName: string, language: string, resourceUri?: string): boolean {
|
|
385
|
-
return !!this.doResolve(preferenceName, undefined, resourceUri, undefined, language).languageSpecific;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
public getBoolean(preferenceName: string): boolean | undefined;
|
|
389
|
-
public getBoolean(preferenceName: string, defaultValue: boolean): boolean;
|
|
390
|
-
// eslint-disable-next-line @typescript-eslint/unified-signatures
|
|
391
|
-
public getBoolean(preferenceName: string, defaultValue: boolean, resourceUri: string): boolean;
|
|
392
|
-
public getBoolean(preferenceName: string, defaultValue?: boolean, resourceUri?: string): boolean | undefined {
|
|
393
|
-
const value = resourceUri
|
|
394
|
-
? this.get(preferenceName, defaultValue, resourceUri)
|
|
395
|
-
: this.get(preferenceName, defaultValue);
|
|
396
|
-
return value !== null && value !== undefined ? !!value : defaultValue;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
public getString(preferenceName: string): string | undefined;
|
|
400
|
-
public getString(preferenceName: string, defaultValue: string): string;
|
|
401
|
-
// eslint-disable-next-line @typescript-eslint/unified-signatures
|
|
402
|
-
public getString(preferenceName: string, defaultValue: string, resourceUri: string): string;
|
|
403
|
-
public getString(preferenceName: string, defaultValue?: string, resourceUri?: string): string | undefined {
|
|
404
|
-
const value = resourceUri
|
|
405
|
-
? this.get(preferenceName, defaultValue, resourceUri)
|
|
406
|
-
: this.get(preferenceName, defaultValue);
|
|
407
|
-
if (value === null || value === undefined) {
|
|
408
|
-
return defaultValue;
|
|
409
|
-
}
|
|
410
|
-
return value.toString();
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
public getNumber(preferenceName: string): number | undefined;
|
|
414
|
-
public getNumber(preferenceName: string, defaultValue: number): number;
|
|
415
|
-
// eslint-disable-next-line @typescript-eslint/unified-signatures
|
|
416
|
-
public getNumber(preferenceName: string, defaultValue: number, resourceUri: string): number;
|
|
417
|
-
public getNumber(preferenceName: string, defaultValue?: number, resourceUri?: string): number | undefined {
|
|
418
|
-
const value = resourceUri
|
|
419
|
-
? this.get(preferenceName, defaultValue, resourceUri)
|
|
420
|
-
: this.get(preferenceName, defaultValue);
|
|
421
|
-
if (value === null || value === undefined) {
|
|
422
|
-
return defaultValue;
|
|
423
|
-
}
|
|
424
|
-
if (typeof value === 'number') {
|
|
425
|
-
return value;
|
|
426
|
-
}
|
|
427
|
-
return Number(value);
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
public inspect<T>(
|
|
431
|
-
preferenceName: string,
|
|
432
|
-
resourceUri?: string,
|
|
433
|
-
language?: string,
|
|
434
|
-
):
|
|
435
|
-
| {
|
|
436
|
-
preferenceName: string;
|
|
437
|
-
defaultValue: T | undefined;
|
|
438
|
-
globalValue: T | undefined; // User Preference
|
|
439
|
-
workspaceValue: T | undefined; // Workspace Preference
|
|
440
|
-
workspaceFolderValue: T | undefined; // Folder Preference
|
|
441
|
-
}
|
|
442
|
-
| undefined {
|
|
443
|
-
const defaultValue = this.inspectInScope<T>(preferenceName, PreferenceScope.Default, resourceUri, language);
|
|
444
|
-
const globalValue = this.inspectInScope<T>(preferenceName, PreferenceScope.User, resourceUri, language);
|
|
445
|
-
const workspaceValue = this.inspectInScope<T>(preferenceName, PreferenceScope.Workspace, resourceUri, language);
|
|
446
|
-
const workspaceFolderValue = this.inspectInScope<T>(preferenceName, PreferenceScope.Folder, resourceUri, language);
|
|
447
|
-
|
|
448
|
-
return { preferenceName, defaultValue, globalValue, workspaceValue, workspaceFolderValue };
|
|
449
|
-
}
|
|
450
|
-
protected inspectInScope<T>(
|
|
451
|
-
preferenceName: string,
|
|
452
|
-
scope: PreferenceScope,
|
|
453
|
-
resourceUri?: string,
|
|
454
|
-
language?: string,
|
|
455
|
-
): T | undefined {
|
|
456
|
-
const value = this.doInspectInScope<T>(preferenceName, scope, resourceUri, language);
|
|
457
|
-
return value;
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
protected doHas(preferenceName: string, resourceUri?: string): boolean {
|
|
461
|
-
return this.doGet(preferenceName, undefined, resourceUri) !== undefined;
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
protected doInspectInScope<T>(
|
|
465
|
-
preferenceName: string,
|
|
466
|
-
scope: PreferenceScope,
|
|
467
|
-
resourceUri?: string,
|
|
468
|
-
language?: string,
|
|
469
|
-
): T | undefined {
|
|
470
|
-
const provider = this.getProvider(scope);
|
|
471
|
-
return provider && provider.get<T>(preferenceName, resourceUri, language);
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
protected doGet<T>(preferenceName: string, defaultValue?: T, resourceUri?: string): T | undefined {
|
|
475
|
-
return this.doResolve(preferenceName, defaultValue, resourceUri).value;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
/**
|
|
479
|
-
* 获取配置值
|
|
480
|
-
*
|
|
481
|
-
* @protected
|
|
482
|
-
* @template T
|
|
483
|
-
* @param {string} preferenceName 配置项名称
|
|
484
|
-
* @param {T} [defaultValue] 默认值
|
|
485
|
-
* @param {string} [resourceUri] 资源路径
|
|
486
|
-
* @param {PreferenceScope} [untilScope] 最高作用域
|
|
487
|
-
* @param {string} [language] 语言标识符
|
|
488
|
-
* @returns {PreferenceResolveResult<T>}
|
|
489
|
-
* @memberof PreferenceServiceImpl
|
|
490
|
-
*/
|
|
491
|
-
protected doResolve<T>(
|
|
492
|
-
preferenceName: string,
|
|
493
|
-
defaultValue?: T,
|
|
494
|
-
resourceUri?: string,
|
|
495
|
-
untilScope?: PreferenceScope,
|
|
496
|
-
language?: string,
|
|
497
|
-
): PreferenceResolveResult<T> {
|
|
498
|
-
if (!this.cachedPreference.has(preferenceName)) {
|
|
499
|
-
this.cachedPreference.set(preferenceName, new LRUMap(500, 200));
|
|
500
|
-
}
|
|
501
|
-
const cache = this.cachedPreference.get(preferenceName)!;
|
|
502
|
-
const cacheKey = cacheHash(language, untilScope, resourceUri);
|
|
503
|
-
if (!cache.has(cacheKey)) {
|
|
504
|
-
cache.set(cacheKey, this.doResolveWithOutCache<T>(preferenceName, resourceUri, untilScope, language));
|
|
505
|
-
}
|
|
506
|
-
const result = cache.get(cacheKey)!;
|
|
507
|
-
if (result.value === undefined) {
|
|
508
|
-
result.value = defaultValue;
|
|
509
|
-
}
|
|
510
|
-
return result;
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
protected doResolveWithOutCache<T>(
|
|
514
|
-
preferenceName: string,
|
|
515
|
-
resourceUri?: string,
|
|
516
|
-
untilScope?: PreferenceScope,
|
|
517
|
-
language?: string,
|
|
518
|
-
): PreferenceResolveResult<T> {
|
|
519
|
-
const result: PreferenceResolveResult<T> = { scope: PreferenceScope.Default };
|
|
520
|
-
const scopes = !isUndefined(untilScope)
|
|
521
|
-
? PreferenceScope.getScopes().filter((s) => s <= untilScope)
|
|
522
|
-
: PreferenceScope.getScopes();
|
|
523
|
-
for (const scope of scopes) {
|
|
524
|
-
if (this.schema.isValidInScope(preferenceName, scope)) {
|
|
525
|
-
const provider = this.getProvider(scope);
|
|
526
|
-
if (provider) {
|
|
527
|
-
const { configUri, value } = provider.resolve<T>(preferenceName, resourceUri);
|
|
528
|
-
// 这里配置值为空对象时,我们也视为非有效值
|
|
529
|
-
if (!isUndefined(value) && !isEmptyObject(value)) {
|
|
530
|
-
result.configUri = configUri;
|
|
531
|
-
// 按作用域逐级合并配置值
|
|
532
|
-
result.value = PreferenceProvider.merge(result.value as any, value as any) as any;
|
|
533
|
-
result.scope = scope;
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
// 添加语言的设置
|
|
540
|
-
if (language) {
|
|
541
|
-
for (const scope of scopes) {
|
|
542
|
-
if (this.schema.isValidInScope(preferenceName, scope)) {
|
|
543
|
-
const provider = this.getProvider(scope);
|
|
544
|
-
if (provider) {
|
|
545
|
-
const { configUri, value, languageSpecific } = provider.resolve<T>(preferenceName, resourceUri, language);
|
|
546
|
-
if (value !== undefined) {
|
|
547
|
-
result.configUri = configUri;
|
|
548
|
-
result.value = PreferenceProvider.merge(result.value as any, value as any) as any;
|
|
549
|
-
result.scope = scope;
|
|
550
|
-
result.languageSpecific = result.languageSpecific || languageSpecific;
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
return {
|
|
558
|
-
configUri: result.configUri,
|
|
559
|
-
value: !isUndefined(result.value) ? deepClone(result.value) : undefined,
|
|
560
|
-
scope: result.scope || PreferenceScope.Default,
|
|
561
|
-
languageSpecific: result.languageSpecific,
|
|
562
|
-
};
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
function cacheHash(language?: string, untilScope?: PreferenceScope, resourceUri?: string) {
|
|
567
|
-
return (
|
|
568
|
-
`${language ? `${language}:::` : ''}${!isUndefined(untilScope) ? `${untilScope}:::` : ''}${resourceUri || ''}` ||
|
|
569
|
-
'default'
|
|
570
|
-
);
|
|
571
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { IDisposable } from '@opensumi/ide-core-common';
|
|
2
|
-
|
|
3
|
-
import { PreferenceScope } from './preference-scope';
|
|
4
|
-
|
|
5
|
-
export interface IPreferenceSettingsService {
|
|
6
|
-
setPreference(key: string, value: any, scope: PreferenceScope);
|
|
7
|
-
|
|
8
|
-
getSettingGroups(scope: PreferenceScope, search?: string): ISettingGroup[];
|
|
9
|
-
|
|
10
|
-
registerSettingGroup(group: ISettingGroup): IDisposable;
|
|
11
|
-
|
|
12
|
-
registerSettingSection(groupId: string, section: ISettingSection): IDisposable;
|
|
13
|
-
|
|
14
|
-
getSections(groupId: string, scope: PreferenceScope, search?: string): ISettingSection[];
|
|
15
|
-
|
|
16
|
-
getPreference(preferenceName: string, scope: PreferenceScope): { value: any; effectingScope: PreferenceScope };
|
|
17
|
-
|
|
18
|
-
setEnumLabels(preferenceName: string, labels: { [key: string]: string }): void;
|
|
19
|
-
|
|
20
|
-
setCurrentGroup(groupId: string): void;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export const IPreferenceSettingsService = Symbol('IPreferenceSettingsService');
|
|
24
|
-
|
|
25
|
-
export interface ISettingGroup {
|
|
26
|
-
// 唯一
|
|
27
|
-
id: string;
|
|
28
|
-
title: string;
|
|
29
|
-
iconClass: string;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface IPreferenceViewDesc {
|
|
33
|
-
id: string;
|
|
34
|
-
/**
|
|
35
|
-
* 为空会根据 id 来生成展示的名字
|
|
36
|
-
* 如:`enablePreview` -> `Enable Preview`
|
|
37
|
-
*/
|
|
38
|
-
localized?: string;
|
|
39
|
-
/**
|
|
40
|
-
* 在指定 scope 下不展示
|
|
41
|
-
*/
|
|
42
|
-
hiddenInScope?: PreferenceScope[];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface ISettingSection {
|
|
46
|
-
title?: string;
|
|
47
|
-
|
|
48
|
-
preferences: Array<string | IPreferenceViewDesc>;
|
|
49
|
-
|
|
50
|
-
component?: React.ComponentType<{ scope: PreferenceScope }>;
|
|
51
|
-
|
|
52
|
-
hiddenInScope?: PreferenceScope[];
|
|
53
|
-
}
|