@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.
- package/lib/browser/breadcrumb/default.js.map +1 -1
- package/lib/browser/breadcrumb/document-symbol.js.map +1 -1
- package/lib/browser/breadcrumb/index.js.map +1 -1
- package/lib/browser/component.js.map +1 -1
- package/lib/browser/decoration-applier.js.map +1 -1
- package/lib/browser/diff/compare.js.map +1 -1
- package/lib/browser/diff/index.d.ts.map +1 -1
- package/lib/browser/diff/index.js +1 -1
- package/lib/browser/diff/index.js.map +1 -1
- package/lib/browser/doc-cache/empty-doc-cache.js.map +1 -1
- package/lib/browser/doc-cache/local-storage-cache.js.map +1 -1
- package/lib/browser/doc-model/editor-document-model-service.js +3 -3
- package/lib/browser/doc-model/editor-document-model-service.js.map +1 -1
- package/lib/browser/doc-model/editor-document-model.d.ts +8 -0
- package/lib/browser/doc-model/editor-document-model.d.ts.map +1 -1
- package/lib/browser/doc-model/editor-document-model.js +61 -11
- package/lib/browser/doc-model/editor-document-model.js.map +1 -1
- package/lib/browser/doc-model/editor-document-registry.js.map +1 -1
- package/lib/browser/doc-model/override.js.map +1 -1
- package/lib/browser/doc-model/save-task.js +1 -1
- package/lib/browser/doc-model/save-task.js.map +1 -1
- package/lib/browser/doc-model/saveParticipants.d.ts +7 -7
- package/lib/browser/doc-model/saveParticipants.d.ts.map +1 -1
- package/lib/browser/doc-model/saveParticipants.js +69 -38
- package/lib/browser/doc-model/saveParticipants.js.map +1 -1
- package/lib/browser/doc-model/types.d.ts +1 -1
- package/lib/browser/doc-model/types.d.ts.map +1 -1
- package/lib/browser/editor-collection.service.d.ts +8 -3
- package/lib/browser/editor-collection.service.d.ts.map +1 -1
- package/lib/browser/editor-collection.service.js +75 -66
- package/lib/browser/editor-collection.service.js.map +1 -1
- package/lib/browser/editor-opener.js.map +1 -1
- package/lib/browser/editor.contribution.d.ts.map +1 -1
- package/lib/browser/editor.contribution.js +31 -3
- package/lib/browser/editor.contribution.js.map +1 -1
- package/lib/browser/editor.decoration.service.d.ts +5 -6
- package/lib/browser/editor.decoration.service.d.ts.map +1 -1
- package/lib/browser/editor.decoration.service.js +9 -1
- package/lib/browser/editor.decoration.service.js.map +1 -1
- package/lib/browser/editor.override.js +2 -2
- package/lib/browser/editor.override.js.map +1 -1
- package/lib/browser/editor.status-bar.service.js.map +1 -1
- package/lib/browser/editor.view.d.ts.map +1 -1
- package/lib/browser/editor.view.js +20 -23
- package/lib/browser/editor.view.js.map +1 -1
- package/lib/browser/error.d.ts +1 -1
- package/lib/browser/error.d.ts.map +1 -1
- package/lib/browser/feature.js.map +1 -1
- package/lib/browser/format/format.service.js.map +1 -1
- package/lib/browser/format/formatterSelect.js.map +1 -1
- package/lib/browser/fs-resource/file-tree-set.js +6 -6
- package/lib/browser/fs-resource/file-tree-set.js.map +1 -1
- package/lib/browser/fs-resource/fs-editor-doc.js +1 -1
- package/lib/browser/fs-resource/fs-editor-doc.js.map +1 -1
- package/lib/browser/fs-resource/fs-resource.js.map +1 -1
- package/lib/browser/fs-resource/index.js.map +1 -1
- package/lib/browser/history/index.d.ts.map +1 -1
- package/lib/browser/history/index.js +2 -1
- package/lib/browser/history/index.js.map +1 -1
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +2 -0
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/language/diagnostic-collection.d.ts +5 -5
- package/lib/browser/language/diagnostic-collection.d.ts.map +1 -1
- package/lib/browser/language/diagnostic-collection.js +1 -1
- package/lib/browser/language/diagnostic-collection.js.map +1 -1
- package/lib/browser/language/language-status.contribution.js.map +1 -1
- package/lib/browser/language/language-status.service.js.map +1 -1
- package/lib/browser/language/language.service.d.ts +4 -3
- package/lib/browser/language/language.service.d.ts.map +1 -1
- package/lib/browser/language/language.service.js +8 -2
- package/lib/browser/language/language.service.js.map +1 -1
- package/lib/browser/menu/editor.context.js +3 -3
- package/lib/browser/menu/editor.context.js.map +1 -1
- package/lib/browser/menu/editor.menu.d.ts +2 -2
- package/lib/browser/menu/editor.menu.d.ts.map +1 -1
- package/lib/browser/menu/editor.menu.js +6 -8
- package/lib/browser/menu/editor.menu.js.map +1 -1
- package/lib/browser/menu/open-type-menu.contribution.js +9 -9
- package/lib/browser/menu/open-type-menu.contribution.js.map +1 -1
- package/lib/browser/menu/title-context.menu.js.map +1 -1
- package/lib/browser/merge-editor/merge-editor.contribution.d.ts +8 -0
- package/lib/browser/merge-editor/merge-editor.contribution.d.ts.map +1 -0
- package/lib/browser/merge-editor/merge-editor.contribution.js +29 -0
- package/lib/browser/merge-editor/merge-editor.contribution.js.map +1 -0
- package/lib/browser/merge-editor/merge-editor.provider.d.ts +8 -0
- package/lib/browser/merge-editor/merge-editor.provider.d.ts.map +1 -0
- package/lib/browser/merge-editor/merge-editor.provider.js +44 -0
- package/lib/browser/merge-editor/merge-editor.provider.js.map +1 -0
- package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.contribution.js.map +1 -1
- package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.service.js +7 -7
- package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.service.js.map +1 -1
- package/lib/browser/monaco-contrib/command/command.service.d.ts +1 -1
- package/lib/browser/monaco-contrib/command/command.service.d.ts.map +1 -1
- package/lib/browser/monaco-contrib/command/command.service.js.map +1 -1
- package/lib/browser/monaco-contrib/tokenizer/textmate-registry.js.map +1 -1
- package/lib/browser/monaco-contrib/tokenizer/textmate.service.d.ts +2 -1
- package/lib/browser/monaco-contrib/tokenizer/textmate.service.d.ts.map +1 -1
- package/lib/browser/monaco-contrib/tokenizer/textmate.service.js +5 -2
- package/lib/browser/monaco-contrib/tokenizer/textmate.service.js.map +1 -1
- package/lib/browser/monaco-contrib/typeHierarchy/typeHierarchy.contribution.js.map +1 -1
- package/lib/browser/monaco-contrib/typeHierarchy/typeHierarchy.service.js +7 -7
- package/lib/browser/monaco-contrib/typeHierarchy/typeHierarchy.service.js.map +1 -1
- package/lib/browser/navigation.module.less +1 -1
- package/lib/browser/navigation.view.d.ts.map +1 -1
- package/lib/browser/navigation.view.js +26 -15
- package/lib/browser/navigation.view.js.map +1 -1
- package/lib/browser/preference/contribution.js.map +1 -1
- package/lib/browser/preference/converter.d.ts +3 -3
- package/lib/browser/preference/converter.d.ts.map +1 -1
- package/lib/browser/preference/schema.d.ts +1 -1
- package/lib/browser/preference/schema.d.ts.map +1 -1
- package/lib/browser/preference/schema.js +8 -8
- package/lib/browser/preference/schema.js.map +1 -1
- package/lib/browser/quick-open/go-to-line.js.map +1 -1
- package/lib/browser/quick-open/workspace-symbol-quickopen.d.ts.map +1 -1
- package/lib/browser/quick-open/workspace-symbol-quickopen.js +2 -2
- package/lib/browser/quick-open/workspace-symbol-quickopen.js.map +1 -1
- package/lib/browser/resource.service.js.map +1 -1
- package/lib/browser/tab.view.d.ts +1 -1
- package/lib/browser/tab.view.d.ts.map +1 -1
- package/lib/browser/tab.view.js +2 -2
- package/lib/browser/tab.view.js.map +1 -1
- package/lib/browser/types.d.ts +5 -5
- package/lib/browser/types.d.ts.map +1 -1
- package/lib/browser/untitled-resource.js +1 -1
- package/lib/browser/untitled-resource.js.map +1 -1
- package/lib/browser/view/suggest-widget.js.map +1 -1
- package/lib/browser/workbench-editor.service.d.ts +17 -0
- package/lib/browser/workbench-editor.service.d.ts.map +1 -1
- package/lib/browser/workbench-editor.service.js +259 -176
- package/lib/browser/workbench-editor.service.js.map +1 -1
- package/lib/common/doc-cache.d.ts +2 -2
- package/lib/common/doc-cache.d.ts.map +1 -1
- package/lib/common/editor.d.ts +20 -6
- package/lib/common/editor.d.ts.map +1 -1
- package/lib/common/editor.js +12 -1
- package/lib/common/editor.js.map +1 -1
- package/lib/common/language.d.ts +18 -7
- package/lib/common/language.d.ts.map +1 -1
- package/lib/common/language.js +15 -7
- package/lib/common/language.js.map +1 -1
- package/lib/common/mocks/workbench-editor.service.js.map +1 -1
- package/lib/common/resource.d.ts +8 -2
- package/lib/common/resource.d.ts.map +1 -1
- package/lib/common/resource.js +1 -0
- package/lib/common/resource.js.map +1 -1
- package/package.json +17 -16
- package/src/browser/breadcrumb/default.ts +299 -0
- package/src/browser/breadcrumb/document-symbol.ts +187 -0
- package/src/browser/breadcrumb/index.ts +96 -0
- package/src/browser/component.ts +204 -0
- package/src/browser/decoration-applier.ts +256 -0
- package/src/browser/diff/compare.ts +99 -0
- package/src/browser/diff/index.ts +81 -0
- package/src/browser/doc-cache/empty-doc-cache.ts +26 -0
- package/src/browser/doc-cache/index.ts +2 -0
- package/src/browser/doc-cache/local-storage-cache.ts +67 -0
- package/src/browser/doc-model/editor-document-error.ts +10 -0
- package/src/browser/doc-model/editor-document-model-service.ts +346 -0
- package/src/browser/doc-model/editor-document-model.ts +690 -0
- package/src/browser/doc-model/editor-document-registry.ts +119 -0
- package/src/browser/doc-model/editor-is-fn.ts +9 -0
- package/src/browser/doc-model/main.ts +4 -0
- package/src/browser/doc-model/override.ts +49 -0
- package/src/browser/doc-model/save-task.ts +88 -0
- package/src/browser/doc-model/saveParticipants.ts +227 -0
- package/src/browser/doc-model/types.ts +350 -0
- package/src/browser/editor-collection.service.ts +790 -0
- package/src/browser/editor-opener.ts +44 -0
- package/src/browser/editor.contribution.ts +1438 -0
- package/src/browser/editor.decoration.service.ts +247 -0
- package/src/browser/editor.less +4 -0
- package/src/browser/editor.module.less +548 -0
- package/src/browser/editor.override.ts +133 -0
- package/src/browser/editor.status-bar.service.ts +116 -0
- package/src/browser/editor.view.tsx +623 -0
- package/src/browser/error.ts +21 -0
- package/src/browser/feature.ts +63 -0
- package/src/browser/format/format.service.ts +95 -0
- package/src/browser/format/formatterSelect.ts +82 -0
- package/src/browser/fs-resource/file-tree-set.ts +126 -0
- package/src/browser/fs-resource/fs-editor-doc.ts +213 -0
- package/src/browser/fs-resource/fs-resource.ts +247 -0
- package/src/browser/fs-resource/index.ts +27 -0
- package/src/browser/grid/grid.service.ts +288 -0
- package/src/browser/history/index.ts +228 -0
- package/src/browser/index.ts +236 -0
- package/src/browser/language/diagnostic-collection.ts +83 -0
- package/src/browser/language/language-status.contribution.ts +81 -0
- package/src/browser/language/language-status.service.ts +32 -0
- package/src/browser/language/language.service.ts +185 -0
- package/src/browser/menu/editor.context.ts +186 -0
- package/src/browser/menu/editor.menu.ts +45 -0
- package/src/browser/menu/open-type-menu.contribution.ts +90 -0
- package/src/browser/menu/title-context.menu.ts +54 -0
- package/src/browser/merge-editor/merge-editor.contribution.ts +25 -0
- package/src/browser/merge-editor/merge-editor.provider.ts +36 -0
- package/src/browser/monaco-contrib/callHierarchy/callHierarchy.contribution.ts +78 -0
- package/src/browser/monaco-contrib/callHierarchy/callHierarchy.service.ts +160 -0
- package/src/browser/monaco-contrib/command/command.service.ts +438 -0
- package/src/browser/monaco-contrib/index.ts +4 -0
- package/src/browser/monaco-contrib/tokenizer/textmate-registry.ts +107 -0
- package/src/browser/monaco-contrib/tokenizer/textmate-tokenizer.ts +104 -0
- package/src/browser/monaco-contrib/tokenizer/textmate.service.ts +925 -0
- package/src/browser/monaco-contrib/typeHierarchy/typeHierarchy.contribution.ts +78 -0
- package/src/browser/monaco-contrib/typeHierarchy/typeHierarchy.service.ts +154 -0
- package/src/browser/navigation.module.less +96 -0
- package/src/browser/navigation.view.tsx +254 -0
- package/src/browser/preference/contribution.ts +8 -0
- package/src/browser/preference/converter.ts +793 -0
- package/src/browser/preference/schema.ts +1896 -0
- package/src/browser/preference/util.ts +14 -0
- package/src/browser/quick-open/go-to-line.ts +164 -0
- package/src/browser/quick-open/workspace-symbol-quickopen.ts +276 -0
- package/src/browser/resource.service.ts +263 -0
- package/src/browser/tab.view.tsx +514 -0
- package/src/browser/types.ts +467 -0
- package/src/browser/untitled-resource.ts +223 -0
- package/src/browser/view/editor.react.tsx +82 -0
- package/src/browser/view/react-hook.tsx +7 -0
- package/src/browser/view/suggest-widget.ts +77 -0
- package/src/browser/view/topPadding.ts +18 -0
- package/src/browser/workbench-editor.service.ts +2291 -0
- package/src/common/doc-cache.ts +117 -0
- package/src/common/editor.ts +799 -0
- package/src/common/index.ts +6 -0
- package/src/common/language-status.ts +33 -0
- package/src/common/language.ts +206 -0
- package/src/common/mocks/workbench-editor.service.ts +52 -0
- package/src/common/resource.ts +147 -0
- package/src/common/utils.ts +10 -0
- package/src/index.ts +1 -0
- package/lib/browser/component/scroll/scroll.d.ts +0 -2
- package/lib/browser/component/scroll/scroll.d.ts.map +0 -1
- package/lib/browser/component/scroll/scroll.js +0 -5
- package/lib/browser/component/scroll/scroll.js.map +0 -1
- package/lib/browser/component/scroll/scroll.module.less +0 -86
package/lib/common/language.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.asMonacoDiagnostic = exports.asMonacoDiagnostics = exports.asRelatedInformation = exports.asRelatedInformations = exports.asSeverity = exports.DiagnosticTag = exports.DiagnosticSeverity = exports.ILanguageService = void 0;
|
|
4
4
|
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
5
5
|
const uri_1 = require("@opensumi/monaco-editor-core/esm/vs/base/common/uri");
|
|
6
6
|
exports.ILanguageService = Symbol('ILanguageService');
|
|
@@ -47,19 +47,27 @@ function asRelatedInformation(relatedInformation) {
|
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
49
|
exports.asRelatedInformation = asRelatedInformation;
|
|
50
|
-
function
|
|
50
|
+
function asMonacoDiagnostics(diagnostics) {
|
|
51
51
|
if (!diagnostics) {
|
|
52
52
|
return undefined;
|
|
53
53
|
}
|
|
54
|
-
return diagnostics.map((diagnostic) =>
|
|
54
|
+
return diagnostics.map((diagnostic) => asMonacoDiagnostic(diagnostic));
|
|
55
55
|
}
|
|
56
|
-
exports.
|
|
57
|
-
function
|
|
56
|
+
exports.asMonacoDiagnostics = asMonacoDiagnostics;
|
|
57
|
+
function asMonacoDiagnostic(diagnostic) {
|
|
58
58
|
return {
|
|
59
|
-
code: typeof diagnostic.code === 'number'
|
|
59
|
+
code: typeof diagnostic.code === 'number'
|
|
60
|
+
? diagnostic.code.toString()
|
|
61
|
+
: typeof diagnostic.code === 'object'
|
|
62
|
+
? {
|
|
63
|
+
value: diagnostic.code.value.toString(),
|
|
64
|
+
target: diagnostic.code.target,
|
|
65
|
+
}
|
|
66
|
+
: diagnostic.code,
|
|
60
67
|
severity: asSeverity(diagnostic.severity),
|
|
61
68
|
message: diagnostic.message,
|
|
62
69
|
source: diagnostic.source,
|
|
70
|
+
// language server range is 0-based, marker is 1-based
|
|
63
71
|
startLineNumber: diagnostic.range.start.line + 1,
|
|
64
72
|
startColumn: diagnostic.range.start.character + 1,
|
|
65
73
|
endLineNumber: diagnostic.range.end.line + 1,
|
|
@@ -68,5 +76,5 @@ function asDiagnostic(diagnostic) {
|
|
|
68
76
|
tags: diagnostic.tags,
|
|
69
77
|
};
|
|
70
78
|
}
|
|
71
|
-
exports.
|
|
79
|
+
exports.asMonacoDiagnostic = asMonacoDiagnostic;
|
|
72
80
|
//# sourceMappingURL=language.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/common/language.ts"],"names":[],"mappings":";;;AAEA,+DAA2D;AAE3D,6EAAiF;AAIpE,QAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AA0C3D,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,6DAAS,CAAA;IACT,iEAAW,CAAA;IACX,yEAAe,CAAA;IACf,2DAAQ,CAAA;AACV,CAAC,EALW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAK7B;
|
|
1
|
+
{"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/common/language.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbench-editor.service.js","sourceRoot":"","sources":["../../../src/common/mocks/workbench-editor.service.ts"],"names":[],"mappings":";;;;AAAA,qCAA0C;AAC1C,+DAA2E;AAI3E,sCAAgH;
|
|
1
|
+
{"version":3,"file":"workbench-editor.service.js","sourceRoot":"","sources":["../../../src/common/mocks/workbench-editor.service.ts"],"names":[],"mappings":";;;;AAAA,qCAA0C;AAC1C,+DAA2E;AAI3E,sCAAgH;AAIzG,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,+BAAsB;IAA/D;;QACY,4BAAuB,GAAG,IAAI,yBAAO,EAAwB,CAAC;QAC/D,2BAAsB,GAAgC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;QAExF,8BAAyB,GAAG,IAAI,yBAAO,EAAQ,CAAC;QACjD,6BAAwB,GAAgB,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;QAE5E,oCAA+B,GAAG,IAAI,yBAAO,EAAgB,CAAC;QAC/D,mCAA8B,GAAwB,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC;IAkCnH,CAAC;IAhCC,KAAK,CAAC,QAAQ,CAAC,GAAS,EAAE,KAAe;QACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAQ,EAAE,OAA8B;QACjD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAU;QACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,eAAyB;QAC/B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAQ,EAAE,KAAe;QACnC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB;QACd,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,aAAa;IACb,sBAAsB,CAAC,OAA0B;QAC/C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,0BAA0B;QACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF,CAAA;AA1CY,0BAA0B;IADtC,IAAA,eAAU,GAAE;GACA,0BAA0B,CA0CtC;AA1CY,gEAA0B"}
|
package/lib/common/resource.d.ts
CHANGED
|
@@ -74,7 +74,7 @@ export declare class ResourceDecorationChangeEvent extends BasicEvent<IResourceD
|
|
|
74
74
|
}
|
|
75
75
|
export declare class ResourceDecorationNeedChangeEvent extends BasicEvent<IResourceDecorationChangeEventPayload> {
|
|
76
76
|
}
|
|
77
|
-
export
|
|
77
|
+
export type IResourceUpdateType = 'change' | 'remove';
|
|
78
78
|
export interface IResourceDecoration {
|
|
79
79
|
dirty: boolean;
|
|
80
80
|
}
|
|
@@ -97,7 +97,7 @@ export interface IResource<MetaData = any> {
|
|
|
97
97
|
metadata?: MetaData;
|
|
98
98
|
deleted?: any;
|
|
99
99
|
}
|
|
100
|
-
export
|
|
100
|
+
export type IDiffResource = IResource<{
|
|
101
101
|
original: URI;
|
|
102
102
|
modified: URI;
|
|
103
103
|
}>;
|
|
@@ -108,4 +108,10 @@ export declare enum AskSaveResult {
|
|
|
108
108
|
SAVE = 2,
|
|
109
109
|
CANCEL = 3
|
|
110
110
|
}
|
|
111
|
+
export type IMergeEditorResource = IResource<{
|
|
112
|
+
ancestor: string;
|
|
113
|
+
input1: string;
|
|
114
|
+
input2: string;
|
|
115
|
+
output: string;
|
|
116
|
+
}>;
|
|
111
117
|
//# sourceMappingURL=resource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../src/common/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAE9F,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,UAAU,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC;IAE9B,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAEnD,sBAAsB,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;IAEzF,mBAAmB,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACjG;;;OAGG;IACH,iCAAiC,CAAC,CAAC,QAAQ,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAE/E,KAAK,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAE9E,iBAAiB,CAAC,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;CAC/C;AAED,8BAAsB,eAAe;IACnC;;OAEG;IACH,QAAQ,CAAC,0BAA0B,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC9D;;OAEG;IACH,QAAQ,CAAC,4BAA4B,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAChE;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAEzD;;;OAGG;IACH,QAAQ,CAAC,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,WAAW;IAE3E;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAEnG;;;OAGG;IACH,QAAQ,CAAC,iCAAiC,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IACjF,KAAK,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC;IAE7E,QAAQ,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,mBAAmB;IAE7D,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,IAAI;IAE5F;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI;IAExD;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;CACvC;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,UAAU,CAAC,GAAG,CAAC;CAAG;AAE/D,qBAAa,sBAAuB,SAAQ,UAAU,CAAC,GAAG,CAAC;CAAG;AAE9D,qBAAa,mBAAoB,SAAQ,UAAU,CAAC,GAAG,CAAC;CAAG;AAE3D,qBAAa,6BAA8B,SAAQ,UAAU,CAAC,qCAAqC,CAAC;CAAG;AAEvG,qBAAa,iCAAkC,SAAQ,UAAU,CAAC,qCAAqC,CAAC;CAAG;AAE3G,
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../src/common/resource.ts"],"names":[],"mappings":"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"}
|
package/lib/common/resource.js
CHANGED
|
@@ -34,4 +34,5 @@ var AskSaveResult;
|
|
|
34
34
|
AskSaveResult[AskSaveResult["SAVE"] = 2] = "SAVE";
|
|
35
35
|
AskSaveResult[AskSaveResult["CANCEL"] = 3] = "CANCEL";
|
|
36
36
|
})(AskSaveResult = exports.AskSaveResult || (exports.AskSaveResult = {}));
|
|
37
|
+
// #endregion merge editor
|
|
37
38
|
//# sourceMappingURL=resource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../src/common/resource.ts"],"names":[],"mappings":";;;AAAA,+DAA8F;AA6B9F,MAAsB,eAAe;CAgDpC;AAhDD,0CAgDC;AAED;;GAEG;AACH,MAAa,uBAAwB,SAAQ,4BAAe;CAAG;AAA/D,0DAA+D;AAE/D,MAAa,sBAAuB,SAAQ,4BAAe;CAAG;AAA9D,wDAA8D;AAE9D,MAAa,mBAAoB,SAAQ,4BAAe;CAAG;AAA3D,kDAA2D;AAE3D,MAAa,6BAA8B,SAAQ,4BAAiD;CAAG;AAAvG,sEAAuG;AAEvG,MAAa,iCAAkC,SAAQ,4BAAiD;CAAG;AAA3G,8EAA2G;AAqC9F,QAAA,WAAW,GAAG,MAAM,CAAC;AAElC,SAAgB,cAAc,CAAC,QAAmB;IAChD,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,mBAAW,CAAC;AAC7C,CAAC;AAFD,wCAEC;AAED,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,qDAAU,CAAA;IACV,iDAAQ,CAAA;IACR,qDAAU,CAAA;AACZ,CAAC,EAJW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAIxB"}
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../src/common/resource.ts"],"names":[],"mappings":";;;AAAA,+DAA8F;AA6B9F,MAAsB,eAAe;CAgDpC;AAhDD,0CAgDC;AAED;;GAEG;AACH,MAAa,uBAAwB,SAAQ,4BAAe;CAAG;AAA/D,0DAA+D;AAE/D,MAAa,sBAAuB,SAAQ,4BAAe;CAAG;AAA9D,wDAA8D;AAE9D,MAAa,mBAAoB,SAAQ,4BAAe;CAAG;AAA3D,kDAA2D;AAE3D,MAAa,6BAA8B,SAAQ,4BAAiD;CAAG;AAAvG,sEAAuG;AAEvG,MAAa,iCAAkC,SAAQ,4BAAiD;CAAG;AAA3G,8EAA2G;AAqC9F,QAAA,WAAW,GAAG,MAAM,CAAC;AAElC,SAAgB,cAAc,CAAC,QAAmB;IAChD,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,mBAAW,CAAC;AAC7C,CAAC;AAFD,wCAEC;AAED,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,qDAAU,CAAA;IACV,iDAAQ,CAAA;IACR,qDAAU,CAAA;AACZ,CAAC,EAJW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAIxB;AASD,0BAA0B"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensumi/ide-editor",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.22.0",
|
|
4
4
|
"files": [
|
|
5
|
-
"lib"
|
|
5
|
+
"lib",
|
|
6
|
+
"src"
|
|
6
7
|
],
|
|
7
8
|
"license": "MIT",
|
|
8
9
|
"main": "lib/index.js",
|
|
9
10
|
"typings": "lib/index.d.ts",
|
|
10
11
|
"scripts": {
|
|
11
|
-
"prepublishOnly": "
|
|
12
|
+
"prepublishOnly": "yarn run build",
|
|
12
13
|
"build": "tsc --build ../../configs/ts/references/tsconfig.editor.json"
|
|
13
14
|
},
|
|
14
15
|
"repository": {
|
|
@@ -16,21 +17,21 @@
|
|
|
16
17
|
"url": "git@github.com:opensumi/core.git"
|
|
17
18
|
},
|
|
18
19
|
"dependencies": {
|
|
19
|
-
"@opensumi/ide-core-common": "2.
|
|
20
|
-
"@opensumi/ide-core-node": "2.
|
|
21
|
-
"@opensumi/ide-file-service": "2.
|
|
22
|
-
"@opensumi/ide-monaco": "2.
|
|
23
|
-
"@opensumi/ide-utils": "2.
|
|
20
|
+
"@opensumi/ide-core-common": "2.22.0",
|
|
21
|
+
"@opensumi/ide-core-node": "2.22.0",
|
|
22
|
+
"@opensumi/ide-file-service": "2.22.0",
|
|
23
|
+
"@opensumi/ide-monaco": "2.22.0",
|
|
24
|
+
"@opensumi/ide-utils": "2.22.0",
|
|
24
25
|
"vscode-oniguruma": "1.5.1"
|
|
25
26
|
},
|
|
26
27
|
"devDependencies": {
|
|
27
|
-
"@opensumi/ide-components": "2.
|
|
28
|
-
"@opensumi/ide-core-browser": "2.
|
|
29
|
-
"@opensumi/ide-dev-tool": "
|
|
30
|
-
"@opensumi/ide-overlay": "2.
|
|
31
|
-
"@opensumi/ide-quick-open": "2.
|
|
32
|
-
"@opensumi/ide-theme": "2.
|
|
33
|
-
"@opensumi/ide-workspace": "2.
|
|
28
|
+
"@opensumi/ide-components": "2.22.0",
|
|
29
|
+
"@opensumi/ide-core-browser": "2.22.0",
|
|
30
|
+
"@opensumi/ide-dev-tool": "1.3.1",
|
|
31
|
+
"@opensumi/ide-overlay": "2.22.0",
|
|
32
|
+
"@opensumi/ide-quick-open": "2.22.0",
|
|
33
|
+
"@opensumi/ide-theme": "2.22.0",
|
|
34
|
+
"@opensumi/ide-workspace": "2.22.0"
|
|
34
35
|
},
|
|
35
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "927717e1c60f9cf5f01622fd51085b318a175eeb"
|
|
36
37
|
}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import debounce from 'lodash/debounce';
|
|
2
|
+
|
|
3
|
+
import { Autowired, Injectable } from '@opensumi/di';
|
|
4
|
+
import {
|
|
5
|
+
CommandService,
|
|
6
|
+
EDITOR_COMMANDS,
|
|
7
|
+
Event,
|
|
8
|
+
Emitter,
|
|
9
|
+
getSymbolIcon,
|
|
10
|
+
IPosition,
|
|
11
|
+
IRange,
|
|
12
|
+
MaybeNull,
|
|
13
|
+
OnEvent,
|
|
14
|
+
URI,
|
|
15
|
+
WithEventBus,
|
|
16
|
+
LRUMap,
|
|
17
|
+
path,
|
|
18
|
+
Schemes,
|
|
19
|
+
} from '@opensumi/ide-core-browser';
|
|
20
|
+
import { LabelService } from '@opensumi/ide-core-browser/lib/services';
|
|
21
|
+
import { FileStat } from '@opensumi/ide-file-service/lib/common';
|
|
22
|
+
import { IFileServiceClient } from '@opensumi/ide-file-service/lib/common/file-service-client';
|
|
23
|
+
import { IWorkspaceService } from '@opensumi/ide-workspace/lib/common/workspace.interface';
|
|
24
|
+
|
|
25
|
+
import { IEditor } from '../../common';
|
|
26
|
+
import { EditorSelectionChangeEvent, IBreadCrumbPart, IBreadCrumbProvider } from '../types';
|
|
27
|
+
|
|
28
|
+
import { DocumentSymbolChangedEvent, DocumentSymbolStore, INormalizedDocumentSymbol } from './document-symbol';
|
|
29
|
+
|
|
30
|
+
const { Path } = path;
|
|
31
|
+
@Injectable()
|
|
32
|
+
export class DefaultBreadCrumbProvider extends WithEventBus implements IBreadCrumbProvider {
|
|
33
|
+
private _onDidUpdateBreadCrumb = new Emitter<URI>();
|
|
34
|
+
public onDidUpdateBreadCrumb: Event<URI> = this._onDidUpdateBreadCrumb.event;
|
|
35
|
+
|
|
36
|
+
@Autowired(IFileServiceClient)
|
|
37
|
+
fileServiceClient: IFileServiceClient;
|
|
38
|
+
|
|
39
|
+
@Autowired(IWorkspaceService)
|
|
40
|
+
workspaceService: IWorkspaceService;
|
|
41
|
+
|
|
42
|
+
@Autowired(LabelService)
|
|
43
|
+
labelService: LabelService;
|
|
44
|
+
|
|
45
|
+
@Autowired(CommandService)
|
|
46
|
+
commandService: CommandService;
|
|
47
|
+
|
|
48
|
+
@Autowired()
|
|
49
|
+
documentSymbolStore: DocumentSymbolStore;
|
|
50
|
+
|
|
51
|
+
private debouncedFireUriEvent = new Map<string, () => any>();
|
|
52
|
+
|
|
53
|
+
private cachedBreadCrumb = new LRUMap<string, IBreadCrumbPart>(200, 100);
|
|
54
|
+
|
|
55
|
+
handlesUri(uri: URI): boolean {
|
|
56
|
+
return this.fileServiceClient.handlesScheme(uri.scheme);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
provideBreadCrumbForUri(uri: URI, editor: MaybeNull<IEditor>): IBreadCrumbPart[] {
|
|
60
|
+
return this.getFileParts(uri).concat(this.getDocumentSymbolParts(uri, editor));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
private getFileParts(uri: URI): IBreadCrumbPart[] {
|
|
64
|
+
const workspaceRoot: URI | undefined = this.workspaceService.workspace
|
|
65
|
+
? new URI(this.workspaceService.workspace.uri)
|
|
66
|
+
: undefined;
|
|
67
|
+
let root: URI;
|
|
68
|
+
let relativePaths: path.Path;
|
|
69
|
+
if (workspaceRoot && workspaceRoot.isEqualOrParent(uri)) {
|
|
70
|
+
root = workspaceRoot;
|
|
71
|
+
relativePaths = workspaceRoot.relative(uri)!;
|
|
72
|
+
} else {
|
|
73
|
+
root = URI.from({
|
|
74
|
+
scheme: uri.scheme,
|
|
75
|
+
authority: uri.authority,
|
|
76
|
+
});
|
|
77
|
+
relativePaths = uri.path;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
let p = root.path;
|
|
81
|
+
const result: IBreadCrumbPart[] = [];
|
|
82
|
+
for (const r of relativePaths
|
|
83
|
+
.toString()
|
|
84
|
+
.split(Path.separator)
|
|
85
|
+
.filter((p) => !!p)) {
|
|
86
|
+
p = p.join(r);
|
|
87
|
+
const u = root.withPath(p);
|
|
88
|
+
result.push(this.createFilePartBreadCrumbUri(u, !u.isEqual(uri)));
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
private createFilePartBreadCrumbUri(uri: URI, isDirectory: boolean): IBreadCrumbPart {
|
|
94
|
+
const uriString = uri.toString();
|
|
95
|
+
if (this.cachedBreadCrumb.has(uriString)) {
|
|
96
|
+
return this.cachedBreadCrumb.get(uriString)!;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const res: IBreadCrumbPart = {
|
|
100
|
+
name: uri.path.base,
|
|
101
|
+
icon: this.labelService.getIcon(uri, { isDirectory }),
|
|
102
|
+
getSiblings: async () => {
|
|
103
|
+
const parentDir = URI.from({
|
|
104
|
+
scheme: uri.scheme,
|
|
105
|
+
}).withPath(uri.path.dir);
|
|
106
|
+
const stat = await this.fileServiceClient.getFileStat(parentDir.toString());
|
|
107
|
+
const parts: IBreadCrumbPart[] = [];
|
|
108
|
+
let currentIndex = -1;
|
|
109
|
+
if (stat && stat.children && stat.children.length > 0) {
|
|
110
|
+
sortByNumeric(stat.children).forEach((file, i) => {
|
|
111
|
+
parts.push(this.createFilePartBreadCrumbUri(new URI(file.uri), file.isDirectory));
|
|
112
|
+
if (currentIndex === -1 && uri.toString() === file.uri) {
|
|
113
|
+
currentIndex = i;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
parts,
|
|
119
|
+
currentIndex,
|
|
120
|
+
};
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
if (isDirectory) {
|
|
125
|
+
res.getChildren = async () => {
|
|
126
|
+
const stat = await this.fileServiceClient.getFileStat(uri.toString());
|
|
127
|
+
const parts: IBreadCrumbPart[] = [];
|
|
128
|
+
if (stat && stat.children && stat.children.length > 0) {
|
|
129
|
+
sortByNumeric(stat.children).forEach((file, i) => {
|
|
130
|
+
parts.push(this.createFilePartBreadCrumbUri(new URI(file.uri), file.isDirectory));
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return parts;
|
|
134
|
+
};
|
|
135
|
+
} else {
|
|
136
|
+
res.onClick = () => {
|
|
137
|
+
this.commandService.executeCommand(EDITOR_COMMANDS.OPEN_RESOURCE.id, uri);
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
this.cachedBreadCrumb.set(uriString, res);
|
|
142
|
+
return res;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
private getDocumentSymbolParts(uri: URI, editor: MaybeNull<IEditor>): IBreadCrumbPart[] {
|
|
146
|
+
if (!editor) {
|
|
147
|
+
return [];
|
|
148
|
+
}
|
|
149
|
+
const symbols = this.documentSymbolStore.getDocumentSymbol(uri);
|
|
150
|
+
if (symbols && symbols.length > 0) {
|
|
151
|
+
const currentSymbols = findCurrentDocumentSymbol(symbols, editor.monacoEditor.getPosition());
|
|
152
|
+
if (currentSymbols.length > 0) {
|
|
153
|
+
return currentSymbols.map((symbol) => this.createFromDocumentSymbol(symbol, editor));
|
|
154
|
+
} else {
|
|
155
|
+
return [
|
|
156
|
+
{
|
|
157
|
+
name: '...',
|
|
158
|
+
getSiblings: () => ({
|
|
159
|
+
parts: symbols
|
|
160
|
+
.sort((a, b) => sortByRangeStart(a.range, b.range))
|
|
161
|
+
.map((symbol) => this.createFromDocumentSymbol(symbol, editor)),
|
|
162
|
+
currentIndex: -1,
|
|
163
|
+
}),
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
}
|
|
167
|
+
} else {
|
|
168
|
+
return [];
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
private createFromDocumentSymbol(symbol: INormalizedDocumentSymbol, editor: IEditor): IBreadCrumbPart {
|
|
173
|
+
const res: IBreadCrumbPart = {
|
|
174
|
+
name: symbol.name,
|
|
175
|
+
icon: getSymbolIcon(symbol.kind),
|
|
176
|
+
onClick: () => {
|
|
177
|
+
editor.setSelection({
|
|
178
|
+
startColumn: symbol.range.startColumn,
|
|
179
|
+
endColumn: symbol.range.startColumn,
|
|
180
|
+
startLineNumber: symbol.range.startLineNumber,
|
|
181
|
+
endLineNumber: symbol.range.startLineNumber,
|
|
182
|
+
});
|
|
183
|
+
editor.monacoEditor.revealRangeInCenter(symbol.range);
|
|
184
|
+
editor.monacoEditor.focus();
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
if (symbol.parent) {
|
|
188
|
+
res.getSiblings = () => ({
|
|
189
|
+
parts: symbol
|
|
190
|
+
.parent!.children!.sort((a, b) => sortByRangeStart(a.range, b.range))
|
|
191
|
+
.map((symbol) => this.createFromDocumentSymbol(symbol, editor)),
|
|
192
|
+
currentIndex: symbol.parent!.children!.indexOf(symbol),
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
if (symbol.children && symbol.children.length > 0) {
|
|
196
|
+
res.getChildren = () =>
|
|
197
|
+
symbol
|
|
198
|
+
.children!.sort((a, b) => sortByRangeStart(a.range, b.range))
|
|
199
|
+
.map((symbol) => this.createFromDocumentSymbol(symbol, editor));
|
|
200
|
+
}
|
|
201
|
+
return res;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
@OnEvent(DocumentSymbolChangedEvent)
|
|
205
|
+
onDocumentSymbolChangedEvent(e: DocumentSymbolChangedEvent) {
|
|
206
|
+
this.notifyUpdate(e.payload);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
@OnEvent(EditorSelectionChangeEvent)
|
|
210
|
+
onEditorSelectionChangeEvent(e: EditorSelectionChangeEvent) {
|
|
211
|
+
this.notifyUpdate(e.payload.editorUri);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
private notifyUpdate(uri: URI) {
|
|
215
|
+
if (!this.debouncedFireUriEvent.has(uri.toString())) {
|
|
216
|
+
this.debouncedFireUriEvent.set(
|
|
217
|
+
uri.toString(),
|
|
218
|
+
debounce(
|
|
219
|
+
() => {
|
|
220
|
+
this._onDidUpdateBreadCrumb.fire(uri);
|
|
221
|
+
},
|
|
222
|
+
100,
|
|
223
|
+
{ maxWait: 1000 },
|
|
224
|
+
),
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
this.debouncedFireUriEvent.get(uri.toString())!();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export function findCurrentDocumentSymbol(
|
|
232
|
+
documentSymbols: INormalizedDocumentSymbol[],
|
|
233
|
+
position: MaybeNull<IPosition>,
|
|
234
|
+
): INormalizedDocumentSymbol[] {
|
|
235
|
+
const result: INormalizedDocumentSymbol[] = [];
|
|
236
|
+
if (!position) {
|
|
237
|
+
return result;
|
|
238
|
+
}
|
|
239
|
+
let toFindIn: INormalizedDocumentSymbol[] | undefined = documentSymbols;
|
|
240
|
+
while (toFindIn && toFindIn.length > 0) {
|
|
241
|
+
let found = false;
|
|
242
|
+
for (const documentSymbol of toFindIn) {
|
|
243
|
+
if (positionInRange(position, documentSymbol.range)) {
|
|
244
|
+
result.push(documentSymbol);
|
|
245
|
+
toFindIn = documentSymbol.children;
|
|
246
|
+
found = true;
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (!found) {
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function sortByNumeric(files: FileStat[]): FileStat[] {
|
|
258
|
+
return files.sort((a: FileStat, b: FileStat) => {
|
|
259
|
+
if ((a.isDirectory && b.isDirectory) || (!a.isDirectory && !b.isDirectory)) {
|
|
260
|
+
// numeric 参数确保数字为第一排序优先级
|
|
261
|
+
const nameA = new URI(a.uri).path.name;
|
|
262
|
+
const nameB = new URI(b.uri).path.name;
|
|
263
|
+
return nameA.localeCompare(nameB, 'kn', { numeric: true });
|
|
264
|
+
} else if (a.isDirectory && !b.isDirectory) {
|
|
265
|
+
return -1;
|
|
266
|
+
} else if (!a.isDirectory && b.isDirectory) {
|
|
267
|
+
return 1;
|
|
268
|
+
} else {
|
|
269
|
+
return 0;
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function positionInRange(pos: IPosition, range: IRange): boolean {
|
|
275
|
+
if (pos.lineNumber < range.startLineNumber) {
|
|
276
|
+
return false;
|
|
277
|
+
} else if (pos.lineNumber === range.startLineNumber) {
|
|
278
|
+
return pos.column >= range.startColumn;
|
|
279
|
+
} else if (pos.lineNumber < range.endLineNumber) {
|
|
280
|
+
return true;
|
|
281
|
+
} else if (pos.lineNumber === range.endLineNumber) {
|
|
282
|
+
return pos.column <= range.endColumn;
|
|
283
|
+
} else {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
function sortByRangeStart(rangeA: IRange, rangeB: IRange) {
|
|
289
|
+
if (rangeA.startLineNumber > rangeB.startLineNumber) {
|
|
290
|
+
return 1;
|
|
291
|
+
} else if (rangeA.startLineNumber < rangeB.startLineNumber) {
|
|
292
|
+
return -1;
|
|
293
|
+
} else {
|
|
294
|
+
if (rangeA.startColumn === rangeB.startColumn) {
|
|
295
|
+
return 0;
|
|
296
|
+
}
|
|
297
|
+
return rangeA.startColumn > rangeB.startColumn ? 1 : -1;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import debounce from 'lodash/debounce';
|
|
2
|
+
|
|
3
|
+
import { Injectable, Autowired } from '@opensumi/di';
|
|
4
|
+
import {
|
|
5
|
+
WithEventBus,
|
|
6
|
+
MaybeNull,
|
|
7
|
+
OnEvent,
|
|
8
|
+
BasicEvent,
|
|
9
|
+
URI,
|
|
10
|
+
CancellationTokenSource,
|
|
11
|
+
Deferred,
|
|
12
|
+
CancellationToken,
|
|
13
|
+
} from '@opensumi/ide-core-browser';
|
|
14
|
+
import { languageFeaturesService } from '@opensumi/ide-monaco/lib/browser/monaco-api/languages';
|
|
15
|
+
import { DocumentSymbol, SymbolTag } from '@opensumi/monaco-editor-core/esm/vs/editor/common/languages';
|
|
16
|
+
|
|
17
|
+
import { WorkbenchEditorService } from '../../common';
|
|
18
|
+
import { IEditorDocumentModelService, EditorDocumentModelContentChangedEvent } from '../doc-model/types';
|
|
19
|
+
|
|
20
|
+
@Injectable()
|
|
21
|
+
export class DocumentSymbolStore extends WithEventBus {
|
|
22
|
+
@Autowired(IEditorDocumentModelService)
|
|
23
|
+
editorDocumentModelRegistry: IEditorDocumentModelService;
|
|
24
|
+
|
|
25
|
+
@Autowired(WorkbenchEditorService)
|
|
26
|
+
editorService: WorkbenchEditorService;
|
|
27
|
+
|
|
28
|
+
private documentSymbols = new Map<string, INormalizedDocumentSymbol[] | undefined>();
|
|
29
|
+
|
|
30
|
+
private pendingUpdate = new Set<string>();
|
|
31
|
+
|
|
32
|
+
private debounced = new Map<string, () => any>();
|
|
33
|
+
|
|
34
|
+
private symbolDeferred = new Map<string, Deferred<void>>();
|
|
35
|
+
|
|
36
|
+
constructor() {
|
|
37
|
+
super();
|
|
38
|
+
this.addDispose(
|
|
39
|
+
languageFeaturesService.documentSymbolProvider.onDidChange(() => {
|
|
40
|
+
Array.from(this.documentSymbols.keys()).forEach((uriString) => {
|
|
41
|
+
this.markNeedUpdate(new URI(uriString));
|
|
42
|
+
});
|
|
43
|
+
}),
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
getDocumentSymbol(uri: URI): INormalizedDocumentSymbol[] | undefined {
|
|
48
|
+
if (!this.documentSymbols.has(uri.toString())) {
|
|
49
|
+
this.documentSymbols.set(uri.toString(), undefined);
|
|
50
|
+
this.createDocumentSymbolCache(uri);
|
|
51
|
+
}
|
|
52
|
+
if (this.pendingUpdate.has(uri.toString())) {
|
|
53
|
+
this.updateDocumentSymbolCache(uri);
|
|
54
|
+
}
|
|
55
|
+
return this.documentSymbols.get(uri.toString());
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* 等待获取文件 symbol,否则文件搜索一个未打开过的文件 symbols 为空
|
|
60
|
+
*/
|
|
61
|
+
async getDocumentSymbolAsync(uri: URI, token?: CancellationToken): Promise<INormalizedDocumentSymbol[] | undefined> {
|
|
62
|
+
const uriStr = uri.toString();
|
|
63
|
+
if (token) {
|
|
64
|
+
token.onCancellationRequested(() => {
|
|
65
|
+
this.symbolDeferred.get(uriStr)?.resolve();
|
|
66
|
+
this.symbolDeferred.delete(uriStr);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if ((!this.documentSymbols.has(uriStr) || this.pendingUpdate.has(uriStr)) && !this.symbolDeferred.has(uriStr)) {
|
|
70
|
+
this.symbolDeferred.set(uriStr, new Deferred());
|
|
71
|
+
this.updateDocumentSymbolCache(uri);
|
|
72
|
+
}
|
|
73
|
+
await this.symbolDeferred.get(uriStr)?.promise;
|
|
74
|
+
return this.documentSymbols.get(uriStr);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async createDocumentSymbolCache(uri: URI) {
|
|
78
|
+
this.updateDocumentSymbolCache(uri);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async doUpdateDocumentSymbolCache(uri: URI) {
|
|
82
|
+
this.pendingUpdate.delete(uri.toString());
|
|
83
|
+
const modelRef = await this.editorDocumentModelRegistry.createModelReference(uri);
|
|
84
|
+
if (!modelRef) {
|
|
85
|
+
this.symbolDeferred.get(uri.toString())?.resolve();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const supports = languageFeaturesService.documentSymbolProvider.all(modelRef.instance.getMonacoModel());
|
|
90
|
+
let result: MaybeNull<DocumentSymbol[]>;
|
|
91
|
+
for (const support of supports) {
|
|
92
|
+
result = await support.provideDocumentSymbols(
|
|
93
|
+
modelRef.instance.getMonacoModel(),
|
|
94
|
+
new CancellationTokenSource().token,
|
|
95
|
+
);
|
|
96
|
+
if (result) {
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (result) {
|
|
101
|
+
normalizeDocumentSymbols(result, { children: result } as INormalizedDocumentSymbol, uri);
|
|
102
|
+
}
|
|
103
|
+
this.documentSymbols.set(uri.toString(), result as INormalizedDocumentSymbol[]);
|
|
104
|
+
this.eventBus.fire(new DocumentSymbolChangedEvent(uri));
|
|
105
|
+
} finally {
|
|
106
|
+
modelRef.dispose();
|
|
107
|
+
}
|
|
108
|
+
this.symbolDeferred.get(uri.toString())?.resolve();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
updateDocumentSymbolCache(uri: URI) {
|
|
112
|
+
if (!this.debounced.has(uri.toString())) {
|
|
113
|
+
this.debounced.set(
|
|
114
|
+
uri.toString(),
|
|
115
|
+
debounce(() => this.doUpdateDocumentSymbolCache(uri), 100, { maxWait: 1000 }),
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
this.debounced.get(uri.toString())!();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@OnEvent(EditorDocumentModelContentChangedEvent)
|
|
122
|
+
onEditorDocumentModelContentChangedEvent(e: EditorDocumentModelContentChangedEvent) {
|
|
123
|
+
if (e.payload.changes && e.payload.changes.length > 0) {
|
|
124
|
+
this.markNeedUpdate(e.payload.uri);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private markNeedUpdate(uri: URI) {
|
|
129
|
+
this.pendingUpdate.add(uri.toString());
|
|
130
|
+
if (this.isWatching(uri)) {
|
|
131
|
+
this.updateDocumentSymbolCache(uri);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
private isWatching(uri: URI): boolean {
|
|
136
|
+
for (const g of this.editorService.editorGroups) {
|
|
137
|
+
if (g.currentResource && g.currentResource.uri.isEqual(uri)) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export class DocumentSymbolChangedEvent extends BasicEvent<URI> {}
|
|
146
|
+
|
|
147
|
+
export { DocumentSymbol, SymbolTag };
|
|
148
|
+
|
|
149
|
+
export interface INormalizedDocumentSymbol extends DocumentSymbol {
|
|
150
|
+
parent?: INormalizedDocumentSymbol | IDummyRoot;
|
|
151
|
+
children?: INormalizedDocumentSymbol[];
|
|
152
|
+
id: string;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export interface IDummyRoot {
|
|
156
|
+
children?: INormalizedDocumentSymbol[];
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function normalizeDocumentSymbols(
|
|
160
|
+
documentSymbols: DocumentSymbol[],
|
|
161
|
+
parent: INormalizedDocumentSymbol | IDummyRoot,
|
|
162
|
+
uri: URI,
|
|
163
|
+
): INormalizedDocumentSymbol[] {
|
|
164
|
+
documentSymbols.forEach((documentSymbol, index) => {
|
|
165
|
+
const symbol = documentSymbol as INormalizedDocumentSymbol;
|
|
166
|
+
symbol.parent = parent;
|
|
167
|
+
symbol.id = getSymbolId(uri, symbol, index);
|
|
168
|
+
if (documentSymbol.children && documentSymbol.children.length > 0) {
|
|
169
|
+
normalizeDocumentSymbols(documentSymbol.children, documentSymbol as INormalizedDocumentSymbol, uri);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
return documentSymbols as INormalizedDocumentSymbol[];
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function getSymbolId(uri: URI, symbol: INormalizedDocumentSymbol, index: number) {
|
|
176
|
+
const symbolNameList: string[] = [symbol.name];
|
|
177
|
+
while (symbol.parent) {
|
|
178
|
+
const parent = symbol.parent as INormalizedDocumentSymbol;
|
|
179
|
+
// dummyRoot
|
|
180
|
+
if (!parent.name) {
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
symbolNameList.unshift(parent.name);
|
|
184
|
+
symbol = parent;
|
|
185
|
+
}
|
|
186
|
+
return `${uri.toString()}__${symbolNameList.join('-')}__${index}`;
|
|
187
|
+
}
|