@theia/plugin-ext 1.25.0-next.39 → 1.25.0-next.41
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/common/plugin-api-rpc-model.d.ts +1 -15
- package/lib/common/plugin-api-rpc-model.d.ts.map +1 -1
- package/lib/common/plugin-api-rpc-model.js.map +1 -1
- package/lib/common/plugin-api-rpc.d.ts +5 -4
- package/lib/common/plugin-api-rpc.d.ts.map +1 -1
- package/lib/common/plugin-api-rpc.js.map +1 -1
- package/lib/common/uri-components.d.ts +2 -9
- package/lib/common/uri-components.d.ts.map +1 -1
- package/lib/common/uri-components.js +1 -7
- package/lib/common/uri-components.js.map +1 -1
- package/lib/main/browser/callhierarchy/callhierarchy-type-converters.d.ts +9 -9
- package/lib/main/browser/callhierarchy/callhierarchy-type-converters.d.ts.map +1 -1
- package/lib/main/browser/callhierarchy/callhierarchy-type-converters.js +70 -89
- package/lib/main/browser/callhierarchy/callhierarchy-type-converters.js.map +1 -1
- package/lib/main/browser/languages-main.d.ts.map +1 -1
- package/lib/main/browser/languages-main.js +7 -1
- package/lib/main/browser/languages-main.js.map +1 -1
- package/lib/plugin/languages/call-hierarchy.d.ts +8 -7
- package/lib/plugin/languages/call-hierarchy.d.ts.map +1 -1
- package/lib/plugin/languages/call-hierarchy.js +39 -31
- package/lib/plugin/languages/call-hierarchy.js.map +1 -1
- package/lib/plugin/languages.d.ts +5 -4
- package/lib/plugin/languages.d.ts.map +1 -1
- package/lib/plugin/languages.js +3 -0
- package/lib/plugin/languages.js.map +1 -1
- package/lib/plugin/type-converters.d.ts +1 -1
- package/lib/plugin/type-converters.d.ts.map +1 -1
- package/lib/plugin/type-converters.js +4 -2
- package/lib/plugin/type-converters.js.map +1 -1
- package/lib/plugin/types-impl.d.ts +1 -2
- package/lib/plugin/types-impl.d.ts.map +1 -1
- package/lib/plugin/types-impl.js.map +1 -1
- package/package.json +23 -23
- package/src/common/plugin-api-rpc-model.ts +1 -17
- package/src/common/plugin-api-rpc.ts +7 -5
- package/src/common/uri-components.ts +4 -17
- package/src/main/browser/callhierarchy/callhierarchy-type-converters.ts +85 -97
- package/src/main/browser/languages-main.ts +8 -4
- package/src/plugin/languages/call-hierarchy.ts +44 -50
- package/src/plugin/languages.ts +11 -6
- package/src/plugin/type-converters.ts +6 -3
- package/src/plugin/types-impl.ts +1 -2
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import { CallHierarchyItem, CallHierarchyIncomingCall, CallHierarchyOutgoingCall } from '@theia/callhierarchy/lib/browser';
|
|
18
18
|
import * as model from '../../../common/plugin-api-rpc-model';
|
|
19
19
|
import * as rpc from '../../../common/plugin-api-rpc';
|
|
20
20
|
import * as callhierarchy from '@theia/core/shared/vscode-languageserver-protocol';
|
|
@@ -70,136 +70,124 @@ export function toRange(range: model.Range): callhierarchy.Range {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
export namespace SymbolKindConverter {
|
|
73
|
-
// tslint:disable-next-line:no-null-keyword
|
|
74
|
-
const fromMapping: { [kind: number]: model.SymbolKind } = Object.create(null);
|
|
75
|
-
fromMapping[callhierarchy.SymbolKind.File] = model.SymbolKind.File;
|
|
76
|
-
fromMapping[callhierarchy.SymbolKind.Module] = model.SymbolKind.Module;
|
|
77
|
-
fromMapping[callhierarchy.SymbolKind.Namespace] = model.SymbolKind.Namespace;
|
|
78
|
-
fromMapping[callhierarchy.SymbolKind.Package] = model.SymbolKind.Package;
|
|
79
|
-
fromMapping[callhierarchy.SymbolKind.Class] = model.SymbolKind.Class;
|
|
80
|
-
fromMapping[callhierarchy.SymbolKind.Method] = model.SymbolKind.Method;
|
|
81
|
-
fromMapping[callhierarchy.SymbolKind.Property] = model.SymbolKind.Property;
|
|
82
|
-
fromMapping[callhierarchy.SymbolKind.Field] = model.SymbolKind.Field;
|
|
83
|
-
fromMapping[callhierarchy.SymbolKind.Constructor] = model.SymbolKind.Constructor;
|
|
84
|
-
fromMapping[callhierarchy.SymbolKind.Enum] = model.SymbolKind.Enum;
|
|
85
|
-
fromMapping[callhierarchy.SymbolKind.Interface] = model.SymbolKind.Interface;
|
|
86
|
-
fromMapping[callhierarchy.SymbolKind.Function] = model.SymbolKind.Function;
|
|
87
|
-
fromMapping[callhierarchy.SymbolKind.Variable] = model.SymbolKind.Variable;
|
|
88
|
-
fromMapping[callhierarchy.SymbolKind.Constant] = model.SymbolKind.Constant;
|
|
89
|
-
fromMapping[callhierarchy.SymbolKind.String] = model.SymbolKind.String;
|
|
90
|
-
fromMapping[callhierarchy.SymbolKind.Number] = model.SymbolKind.Number;
|
|
91
|
-
fromMapping[callhierarchy.SymbolKind.Boolean] = model.SymbolKind.Boolean;
|
|
92
|
-
fromMapping[callhierarchy.SymbolKind.Array] = model.SymbolKind.Array;
|
|
93
|
-
fromMapping[callhierarchy.SymbolKind.Object] = model.SymbolKind.Object;
|
|
94
|
-
fromMapping[callhierarchy.SymbolKind.Key] = model.SymbolKind.Key;
|
|
95
|
-
fromMapping[callhierarchy.SymbolKind.Null] = model.SymbolKind.Null;
|
|
96
|
-
fromMapping[callhierarchy.SymbolKind.EnumMember] = model.SymbolKind.EnumMember;
|
|
97
|
-
fromMapping[callhierarchy.SymbolKind.Struct] = model.SymbolKind.Struct;
|
|
98
|
-
fromMapping[callhierarchy.SymbolKind.Event] = model.SymbolKind.Event;
|
|
99
|
-
fromMapping[callhierarchy.SymbolKind.Operator] = model.SymbolKind.Operator;
|
|
100
|
-
fromMapping[callhierarchy.SymbolKind.TypeParameter] = model.SymbolKind.TypeParameter;
|
|
101
|
-
|
|
102
73
|
export function fromSymbolKind(kind: callhierarchy.SymbolKind): model.SymbolKind {
|
|
103
|
-
|
|
74
|
+
switch (kind) {
|
|
75
|
+
case callhierarchy.SymbolKind.File: return model.SymbolKind.File;
|
|
76
|
+
case callhierarchy.SymbolKind.Module: return model.SymbolKind.Module;
|
|
77
|
+
case callhierarchy.SymbolKind.Namespace: return model.SymbolKind.Namespace;
|
|
78
|
+
case callhierarchy.SymbolKind.Package: return model.SymbolKind.Package;
|
|
79
|
+
case callhierarchy.SymbolKind.Class: return model.SymbolKind.Class;
|
|
80
|
+
case callhierarchy.SymbolKind.Method: return model.SymbolKind.Method;
|
|
81
|
+
case callhierarchy.SymbolKind.Property: return model.SymbolKind.Property;
|
|
82
|
+
case callhierarchy.SymbolKind.Field: return model.SymbolKind.Field;
|
|
83
|
+
case callhierarchy.SymbolKind.Constructor: return model.SymbolKind.Constructor;
|
|
84
|
+
case callhierarchy.SymbolKind.Enum: return model.SymbolKind.Enum;
|
|
85
|
+
case callhierarchy.SymbolKind.Interface: return model.SymbolKind.Interface;
|
|
86
|
+
case callhierarchy.SymbolKind.Function: return model.SymbolKind.Function;
|
|
87
|
+
case callhierarchy.SymbolKind.Variable: return model.SymbolKind.Variable;
|
|
88
|
+
case callhierarchy.SymbolKind.Constant: return model.SymbolKind.Constant;
|
|
89
|
+
case callhierarchy.SymbolKind.String: return model.SymbolKind.String;
|
|
90
|
+
case callhierarchy.SymbolKind.Number: return model.SymbolKind.Number;
|
|
91
|
+
case callhierarchy.SymbolKind.Boolean: return model.SymbolKind.Boolean;
|
|
92
|
+
case callhierarchy.SymbolKind.Array: return model.SymbolKind.Array;
|
|
93
|
+
case callhierarchy.SymbolKind.Object: return model.SymbolKind.Object;
|
|
94
|
+
case callhierarchy.SymbolKind.Key: return model.SymbolKind.Key;
|
|
95
|
+
case callhierarchy.SymbolKind.Null: return model.SymbolKind.Null;
|
|
96
|
+
case callhierarchy.SymbolKind.EnumMember: return model.SymbolKind.EnumMember;
|
|
97
|
+
case callhierarchy.SymbolKind.Struct: return model.SymbolKind.Struct;
|
|
98
|
+
case callhierarchy.SymbolKind.Event: return model.SymbolKind.Event;
|
|
99
|
+
case callhierarchy.SymbolKind.Operator: return model.SymbolKind.Operator;
|
|
100
|
+
case callhierarchy.SymbolKind.TypeParameter: return model.SymbolKind.TypeParameter;
|
|
101
|
+
default: return model.SymbolKind.Property;
|
|
102
|
+
}
|
|
104
103
|
}
|
|
105
|
-
|
|
106
|
-
// tslint:disable-next-line:no-null-keyword
|
|
107
|
-
const toMapping: { [kind: number]: callhierarchy.SymbolKind } = Object.create(null);
|
|
108
|
-
toMapping[model.SymbolKind.File] = callhierarchy.SymbolKind.File;
|
|
109
|
-
toMapping[model.SymbolKind.Module] = callhierarchy.SymbolKind.Module;
|
|
110
|
-
toMapping[model.SymbolKind.Namespace] = callhierarchy.SymbolKind.Namespace;
|
|
111
|
-
toMapping[model.SymbolKind.Package] = callhierarchy.SymbolKind.Package;
|
|
112
|
-
toMapping[model.SymbolKind.Class] = callhierarchy.SymbolKind.Class;
|
|
113
|
-
toMapping[model.SymbolKind.Method] = callhierarchy.SymbolKind.Method;
|
|
114
|
-
toMapping[model.SymbolKind.Property] = callhierarchy.SymbolKind.Property;
|
|
115
|
-
toMapping[model.SymbolKind.Field] = callhierarchy.SymbolKind.Field;
|
|
116
|
-
toMapping[model.SymbolKind.Constructor] = callhierarchy.SymbolKind.Constructor;
|
|
117
|
-
toMapping[model.SymbolKind.Enum] = callhierarchy.SymbolKind.Enum;
|
|
118
|
-
toMapping[model.SymbolKind.Interface] = callhierarchy.SymbolKind.Interface;
|
|
119
|
-
toMapping[model.SymbolKind.Function] = callhierarchy.SymbolKind.Function;
|
|
120
|
-
toMapping[model.SymbolKind.Variable] = callhierarchy.SymbolKind.Variable;
|
|
121
|
-
toMapping[model.SymbolKind.Constant] = callhierarchy.SymbolKind.Constant;
|
|
122
|
-
toMapping[model.SymbolKind.String] = callhierarchy.SymbolKind.String;
|
|
123
|
-
toMapping[model.SymbolKind.Number] = callhierarchy.SymbolKind.Number;
|
|
124
|
-
toMapping[model.SymbolKind.Boolean] = callhierarchy.SymbolKind.Boolean;
|
|
125
|
-
toMapping[model.SymbolKind.Array] = callhierarchy.SymbolKind.Array;
|
|
126
|
-
toMapping[model.SymbolKind.Object] = callhierarchy.SymbolKind.Object;
|
|
127
|
-
toMapping[model.SymbolKind.Key] = callhierarchy.SymbolKind.Key;
|
|
128
|
-
toMapping[model.SymbolKind.Null] = callhierarchy.SymbolKind.Null;
|
|
129
|
-
toMapping[model.SymbolKind.EnumMember] = callhierarchy.SymbolKind.EnumMember;
|
|
130
|
-
toMapping[model.SymbolKind.Struct] = callhierarchy.SymbolKind.Struct;
|
|
131
|
-
toMapping[model.SymbolKind.Event] = callhierarchy.SymbolKind.Event;
|
|
132
|
-
toMapping[model.SymbolKind.Operator] = callhierarchy.SymbolKind.Operator;
|
|
133
|
-
toMapping[model.SymbolKind.TypeParameter] = callhierarchy.SymbolKind.TypeParameter;
|
|
134
|
-
|
|
135
104
|
export function toSymbolKind(kind: model.SymbolKind): callhierarchy.SymbolKind {
|
|
136
|
-
|
|
105
|
+
switch (kind) {
|
|
106
|
+
case model.SymbolKind.File: return callhierarchy.SymbolKind.File;
|
|
107
|
+
case model.SymbolKind.Module: return callhierarchy.SymbolKind.Module;
|
|
108
|
+
case model.SymbolKind.Namespace: return callhierarchy.SymbolKind.Namespace;
|
|
109
|
+
case model.SymbolKind.Package: return callhierarchy.SymbolKind.Package;
|
|
110
|
+
case model.SymbolKind.Class: return callhierarchy.SymbolKind.Class;
|
|
111
|
+
case model.SymbolKind.Method: return callhierarchy.SymbolKind.Method;
|
|
112
|
+
case model.SymbolKind.Property: return callhierarchy.SymbolKind.Property;
|
|
113
|
+
case model.SymbolKind.Field: return callhierarchy.SymbolKind.Field;
|
|
114
|
+
case model.SymbolKind.Constructor: return callhierarchy.SymbolKind.Constructor;
|
|
115
|
+
case model.SymbolKind.Enum: return callhierarchy.SymbolKind.Enum;
|
|
116
|
+
case model.SymbolKind.Interface: return callhierarchy.SymbolKind.Interface;
|
|
117
|
+
case model.SymbolKind.Function: return callhierarchy.SymbolKind.Function;
|
|
118
|
+
case model.SymbolKind.Variable: return callhierarchy.SymbolKind.Variable;
|
|
119
|
+
case model.SymbolKind.Constant: return callhierarchy.SymbolKind.Constant;
|
|
120
|
+
case model.SymbolKind.String: return callhierarchy.SymbolKind.String;
|
|
121
|
+
case model.SymbolKind.Number: return callhierarchy.SymbolKind.Number;
|
|
122
|
+
case model.SymbolKind.Boolean: return callhierarchy.SymbolKind.Boolean;
|
|
123
|
+
case model.SymbolKind.Array: return callhierarchy.SymbolKind.Array;
|
|
124
|
+
case model.SymbolKind.Object: return callhierarchy.SymbolKind.Object;
|
|
125
|
+
case model.SymbolKind.Key: return callhierarchy.SymbolKind.Key;
|
|
126
|
+
case model.SymbolKind.Null: return callhierarchy.SymbolKind.Null;
|
|
127
|
+
case model.SymbolKind.EnumMember: return callhierarchy.SymbolKind.EnumMember;
|
|
128
|
+
case model.SymbolKind.Struct: return callhierarchy.SymbolKind.Struct;
|
|
129
|
+
case model.SymbolKind.Event: return callhierarchy.SymbolKind.Event;
|
|
130
|
+
case model.SymbolKind.Operator: return callhierarchy.SymbolKind.Operator;
|
|
131
|
+
case model.SymbolKind.TypeParameter: return callhierarchy.SymbolKind.TypeParameter;
|
|
132
|
+
default: return callhierarchy.SymbolKind.Property;
|
|
133
|
+
}
|
|
137
134
|
}
|
|
138
135
|
}
|
|
139
136
|
|
|
140
|
-
export function toDefinition(definition: model.
|
|
141
|
-
export function toDefinition(definition: model.
|
|
142
|
-
export function toDefinition(definition: model.
|
|
137
|
+
export function toDefinition(definition: model.CallHierarchyItem): CallHierarchyItem;
|
|
138
|
+
export function toDefinition(definition: model.CallHierarchyItem | undefined): CallHierarchyItem | undefined;
|
|
139
|
+
export function toDefinition(definition: model.CallHierarchyItem | undefined): CallHierarchyItem | undefined {
|
|
143
140
|
if (!definition) {
|
|
144
141
|
return undefined;
|
|
145
142
|
}
|
|
146
143
|
return {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
},
|
|
144
|
+
...definition,
|
|
145
|
+
kind: SymbolKindConverter.toSymbolKind(definition.kind),
|
|
146
|
+
range: toRange(definition.range),
|
|
151
147
|
selectionRange: toRange(definition.selectionRange),
|
|
152
|
-
symbolName: definition.name,
|
|
153
|
-
symbolKind: SymbolKindConverter.toSymbolKind(definition.kind),
|
|
154
|
-
containerName: undefined,
|
|
155
|
-
tags: definition.tags,
|
|
156
|
-
data: definition.data,
|
|
157
148
|
};
|
|
158
149
|
}
|
|
159
150
|
|
|
160
|
-
export function fromDefinition(definition:
|
|
151
|
+
export function fromDefinition(definition: CallHierarchyItem): model.CallHierarchyItem {
|
|
161
152
|
return {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
kind: SymbolKindConverter.fromSymbolKind(definition.symbolKind),
|
|
167
|
-
tags: definition.tags,
|
|
168
|
-
data: definition.data,
|
|
153
|
+
...definition,
|
|
154
|
+
kind: SymbolKindConverter.fromSymbolKind(definition.kind),
|
|
155
|
+
range: fromRange(definition.range),
|
|
156
|
+
selectionRange: fromRange(definition.range),
|
|
169
157
|
};
|
|
170
158
|
}
|
|
171
159
|
|
|
172
|
-
export function toCaller(caller: model.
|
|
160
|
+
export function toCaller(caller: model.CallHierarchyIncomingCall): CallHierarchyIncomingCall {
|
|
173
161
|
return {
|
|
174
|
-
|
|
175
|
-
|
|
162
|
+
from: toDefinition(caller.from),
|
|
163
|
+
fromRanges: caller.fromRanges.map(toRange)
|
|
176
164
|
};
|
|
177
165
|
}
|
|
178
166
|
|
|
179
|
-
export function fromCaller(caller:
|
|
167
|
+
export function fromCaller(caller: CallHierarchyIncomingCall): model.CallHierarchyIncomingCall {
|
|
180
168
|
return {
|
|
181
|
-
|
|
182
|
-
|
|
169
|
+
from: fromDefinition(caller.from),
|
|
170
|
+
fromRanges: caller.fromRanges.map(fromRange)
|
|
183
171
|
};
|
|
184
172
|
}
|
|
185
173
|
|
|
186
|
-
export function toCallee(callee: model.
|
|
174
|
+
export function toCallee(callee: model.CallHierarchyOutgoingCall): CallHierarchyOutgoingCall {
|
|
187
175
|
return {
|
|
188
|
-
|
|
189
|
-
|
|
176
|
+
to: toDefinition(callee.to),
|
|
177
|
+
fromRanges: callee.fromRanges.map(toRange),
|
|
190
178
|
};
|
|
191
179
|
}
|
|
192
180
|
|
|
193
|
-
export function fromCallHierarchyCallerToModelCallHierarchyIncomingCall(caller:
|
|
181
|
+
export function fromCallHierarchyCallerToModelCallHierarchyIncomingCall(caller: CallHierarchyIncomingCall): model.CallHierarchyIncomingCall {
|
|
194
182
|
return {
|
|
195
|
-
from: fromDefinition(caller.
|
|
196
|
-
fromRanges: caller.
|
|
183
|
+
from: fromDefinition(caller.from),
|
|
184
|
+
fromRanges: caller.fromRanges.map(fromRange),
|
|
197
185
|
};
|
|
198
186
|
}
|
|
199
187
|
|
|
200
|
-
export function fromCallHierarchyCalleeToModelCallHierarchyOutgoingCall(callee:
|
|
188
|
+
export function fromCallHierarchyCalleeToModelCallHierarchyOutgoingCall(callee: CallHierarchyOutgoingCall): model.CallHierarchyOutgoingCall {
|
|
201
189
|
return {
|
|
202
|
-
to: fromDefinition(callee.
|
|
203
|
-
fromRanges: callee.
|
|
190
|
+
to: fromDefinition(callee.to),
|
|
191
|
+
fromRanges: callee.fromRanges.map(fromRange),
|
|
204
192
|
};
|
|
205
193
|
}
|
|
@@ -50,7 +50,7 @@ import * as theia from '@theia/plugin';
|
|
|
50
50
|
import { UriComponents } from '../../common/uri-components';
|
|
51
51
|
import { CancellationToken } from '@theia/core/lib/common';
|
|
52
52
|
import { LanguageSelector, RelativePattern } from '@theia/callhierarchy/lib/common/language-selector';
|
|
53
|
-
import { CallHierarchyService, CallHierarchyServiceProvider,
|
|
53
|
+
import { CallHierarchyService, CallHierarchyServiceProvider, CallHierarchyItem } from '@theia/callhierarchy/lib/browser';
|
|
54
54
|
import { toDefinition, toUriComponents, fromDefinition, fromPosition, toCaller, toCallee } from './callhierarchy/callhierarchy-type-converters';
|
|
55
55
|
import { Position, DocumentUri, DiagnosticTag } from '@theia/core/shared/vscode-languageserver-protocol';
|
|
56
56
|
import { ObjectIdentifier } from '../../common/object-identifier';
|
|
@@ -804,8 +804,12 @@ export class LanguagesMainImpl implements LanguagesMain, Disposable {
|
|
|
804
804
|
selector: language,
|
|
805
805
|
getRootDefinition: (uri: DocumentUri, position: Position, cancellationToken: CancellationToken) =>
|
|
806
806
|
this.proxy.$provideRootDefinition(handle, toUriComponents(uri), fromPosition(position), cancellationToken)
|
|
807
|
-
.then(def =>
|
|
808
|
-
|
|
807
|
+
.then(def => {
|
|
808
|
+
if (!def) { return undefined; }
|
|
809
|
+
const defs = Array.isArray(def) ? def : [def];
|
|
810
|
+
return { dispose: () => this.proxy.$releaseCallHierarchy(handle, defs[0]?._sessionId), items: defs.map(item => toDefinition(item)) };
|
|
811
|
+
}),
|
|
812
|
+
getCallers: (definition: CallHierarchyItem, cancellationToken: CancellationToken) => this.proxy.$provideCallers(handle, fromDefinition(definition), cancellationToken)
|
|
809
813
|
.then(result => {
|
|
810
814
|
if (!result) {
|
|
811
815
|
return undefined!;
|
|
@@ -818,7 +822,7 @@ export class LanguagesMainImpl implements LanguagesMain, Disposable {
|
|
|
818
822
|
return undefined!;
|
|
819
823
|
}),
|
|
820
824
|
|
|
821
|
-
getCallees: (definition:
|
|
825
|
+
getCallees: (definition: CallHierarchyItem, cancellationToken: CancellationToken) => this.proxy.$provideCallees(handle, fromDefinition(definition), cancellationToken)
|
|
822
826
|
.then(result => {
|
|
823
827
|
if (!result) {
|
|
824
828
|
return undefined;
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
|
|
17
17
|
import { URI } from '@theia/core/shared/vscode-uri';
|
|
18
18
|
import * as theia from '@theia/plugin';
|
|
19
|
-
import * as Converter from '../type-converters';
|
|
20
19
|
import { DocumentsExtImpl } from '../documents';
|
|
21
|
-
import * as
|
|
20
|
+
import * as dto from '../../common/plugin-api-rpc-model';
|
|
22
21
|
import * as rpc from '../../common/plugin-api-rpc';
|
|
23
22
|
import * as types from '../types-impl';
|
|
23
|
+
import { fromRange } from '../type-converters';
|
|
24
24
|
|
|
25
25
|
export class CallHierarchyAdapter {
|
|
26
26
|
|
|
@@ -29,9 +29,12 @@ export class CallHierarchyAdapter {
|
|
|
29
29
|
private readonly documents: DocumentsExtImpl
|
|
30
30
|
) { }
|
|
31
31
|
|
|
32
|
+
protected sessionIds = 0;
|
|
33
|
+
protected readonly cache = new Map<string, Map<string, theia.CallHierarchyItem>>();
|
|
34
|
+
|
|
32
35
|
async provideRootDefinition(
|
|
33
36
|
resource: URI, position: rpc.Position, token: theia.CancellationToken
|
|
34
|
-
): Promise<
|
|
37
|
+
): Promise<dto.CallHierarchyItem[] | undefined> {
|
|
35
38
|
const documentData = this.documents.getDocumentData(resource);
|
|
36
39
|
if (!documentData) {
|
|
37
40
|
return Promise.reject(new Error(`There is no document for ${resource}`));
|
|
@@ -48,83 +51,74 @@ export class CallHierarchyAdapter {
|
|
|
48
51
|
if (!definition) {
|
|
49
52
|
return undefined;
|
|
50
53
|
}
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
const sessionId = (this.sessionIds++).toString(36);
|
|
55
|
+
this.cache.set(sessionId, new Map());
|
|
56
|
+
return Array.isArray(definition) ? definition.map(item => this.fromCallHierarchyItem(item, sessionId)) : [this.fromCallHierarchyItem(definition, sessionId)];
|
|
53
57
|
}
|
|
54
58
|
|
|
55
|
-
async provideCallers(definition:
|
|
59
|
+
async provideCallers(definition: dto.CallHierarchyItem, token: theia.CancellationToken): Promise<dto.CallHierarchyIncomingCall[] | undefined> {
|
|
56
60
|
const callers = await this.provider.provideCallHierarchyIncomingCalls(this.toCallHierarchyItem(definition), token);
|
|
57
61
|
if (!callers) {
|
|
58
62
|
return undefined;
|
|
59
63
|
}
|
|
60
64
|
|
|
61
|
-
return callers.map(item => this.fromCallHierarchyIncomingCall(item));
|
|
65
|
+
return callers.map(item => this.fromCallHierarchyIncomingCall(item, definition._sessionId!));
|
|
62
66
|
}
|
|
63
67
|
|
|
64
|
-
async provideCallees(definition:
|
|
68
|
+
async provideCallees(definition: dto.CallHierarchyItem, token: theia.CancellationToken): Promise<dto.CallHierarchyOutgoingCall[] | undefined> {
|
|
65
69
|
const callees = await this.provider.provideCallHierarchyOutgoingCalls(this.toCallHierarchyItem(definition), token);
|
|
66
70
|
if (!callees) {
|
|
67
71
|
return undefined;
|
|
68
72
|
}
|
|
69
73
|
|
|
70
|
-
return callees.map(item => this.fromCallHierarchyOutgoingCall(item));
|
|
74
|
+
return callees.map(item => this.fromCallHierarchyOutgoingCall(item, definition._sessionId!));
|
|
71
75
|
}
|
|
72
76
|
|
|
73
|
-
private fromCallHierarchyItem(item: theia.CallHierarchyItem):
|
|
74
|
-
|
|
77
|
+
private fromCallHierarchyItem(item: theia.CallHierarchyItem, sessionId: string): dto.CallHierarchyItem {
|
|
78
|
+
const sessionCache = this.cache.get(sessionId)!;
|
|
79
|
+
const itemId = sessionCache.size.toString(36);
|
|
80
|
+
const definition: dto.CallHierarchyItem = {
|
|
75
81
|
uri: item.uri,
|
|
76
|
-
range:
|
|
77
|
-
selectionRange:
|
|
82
|
+
range: fromRange(item.range),
|
|
83
|
+
selectionRange: fromRange(item.selectionRange),
|
|
78
84
|
name: item.name,
|
|
79
85
|
kind: item.kind,
|
|
80
86
|
tags: item.tags,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
private fromRange(range: theia.Range): model.Range {
|
|
86
|
-
return {
|
|
87
|
-
startLineNumber: range.start.line + 1,
|
|
88
|
-
startColumn: range.start.character + 1,
|
|
89
|
-
endLineNumber: range.end.line + 1,
|
|
90
|
-
endColumn: range.end.character + 1,
|
|
87
|
+
_itemId: itemId,
|
|
88
|
+
_sessionId: sessionId,
|
|
91
89
|
};
|
|
90
|
+
sessionCache.set(itemId, item);
|
|
91
|
+
return definition;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
private
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
private toCallHierarchyItem(definition: model.CallHierarchyDefinition): theia.CallHierarchyItem {
|
|
104
|
-
const item = new types.CallHierarchyItem(
|
|
105
|
-
Converter.SymbolKind.toSymbolKind(definition.kind),
|
|
106
|
-
definition.name,
|
|
107
|
-
definition.detail ? definition.detail : '',
|
|
108
|
-
URI.revive(definition.uri),
|
|
109
|
-
this.toRange(definition.range),
|
|
110
|
-
this.toRange(definition.selectionRange),
|
|
111
|
-
);
|
|
112
|
-
item.tags = definition.tags;
|
|
113
|
-
item.data = definition.data;
|
|
114
|
-
return item;
|
|
94
|
+
private toCallHierarchyItem(definition: dto.CallHierarchyItem): theia.CallHierarchyItem {
|
|
95
|
+
const cached = this.cache.get(definition._sessionId!)?.get(definition._itemId!);
|
|
96
|
+
if (!cached) {
|
|
97
|
+
throw new Error(`Found no cached item corresponding to ${definition.name} in ${definition.uri.path} with ID ${definition.data}.`);
|
|
98
|
+
}
|
|
99
|
+
return cached;
|
|
115
100
|
}
|
|
116
101
|
|
|
117
|
-
private fromCallHierarchyIncomingCall(caller: theia.CallHierarchyIncomingCall):
|
|
102
|
+
private fromCallHierarchyIncomingCall(caller: theia.CallHierarchyIncomingCall, sessionId: string): dto.CallHierarchyIncomingCall {
|
|
118
103
|
return {
|
|
119
|
-
|
|
120
|
-
|
|
104
|
+
from: this.fromCallHierarchyItem(caller.from, sessionId),
|
|
105
|
+
fromRanges: caller.fromRanges.map(r => fromRange(r))
|
|
121
106
|
};
|
|
122
107
|
}
|
|
123
108
|
|
|
124
|
-
protected fromCallHierarchyOutgoingCall(caller: theia.CallHierarchyOutgoingCall):
|
|
109
|
+
protected fromCallHierarchyOutgoingCall(caller: theia.CallHierarchyOutgoingCall, sessionId: string): dto.CallHierarchyOutgoingCall {
|
|
125
110
|
return {
|
|
126
|
-
|
|
127
|
-
|
|
111
|
+
to: this.fromCallHierarchyItem(caller.to, sessionId),
|
|
112
|
+
fromRanges: caller.fromRanges.map(r => fromRange(r)),
|
|
128
113
|
};
|
|
129
114
|
}
|
|
115
|
+
|
|
116
|
+
releaseSession(session?: string): Promise<boolean> {
|
|
117
|
+
if (session !== undefined) {
|
|
118
|
+
return Promise.resolve(this.cache.delete(session));
|
|
119
|
+
} else {
|
|
120
|
+
this.cache.clear();
|
|
121
|
+
return Promise.resolve(true);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
130
124
|
}
|
package/src/plugin/languages.ts
CHANGED
|
@@ -59,9 +59,10 @@ import {
|
|
|
59
59
|
CodeAction,
|
|
60
60
|
FoldingRange,
|
|
61
61
|
SelectionRange,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
ChainedCacheId,
|
|
63
|
+
CallHierarchyItem,
|
|
64
|
+
CallHierarchyIncomingCall,
|
|
65
|
+
CallHierarchyOutgoingCall,
|
|
65
66
|
} from '../common/plugin-api-rpc-model';
|
|
66
67
|
import { CompletionAdapter } from './languages/completion';
|
|
67
68
|
import { Diagnostics } from './languages/diagnostics';
|
|
@@ -612,17 +613,21 @@ export class LanguagesExtImpl implements LanguagesExt {
|
|
|
612
613
|
|
|
613
614
|
$provideRootDefinition(
|
|
614
615
|
handle: number, resource: UriComponents, location: Position, token: theia.CancellationToken
|
|
615
|
-
): Promise<
|
|
616
|
+
): Promise<CallHierarchyItem[] | undefined> {
|
|
616
617
|
return this.withAdapter(handle, CallHierarchyAdapter, adapter => adapter.provideRootDefinition(URI.revive(resource), location, token), undefined);
|
|
617
618
|
}
|
|
618
619
|
|
|
619
|
-
$provideCallers(handle: number, definition:
|
|
620
|
+
$provideCallers(handle: number, definition: CallHierarchyItem, token: theia.CancellationToken): Promise<CallHierarchyIncomingCall[] | undefined> {
|
|
620
621
|
return this.withAdapter(handle, CallHierarchyAdapter, adapter => adapter.provideCallers(definition, token), undefined);
|
|
621
622
|
}
|
|
622
623
|
|
|
623
|
-
$provideCallees(handle: number, definition:
|
|
624
|
+
$provideCallees(handle: number, definition: CallHierarchyItem, token: theia.CancellationToken): Promise<CallHierarchyOutgoingCall[] | undefined> {
|
|
624
625
|
return this.withAdapter(handle, CallHierarchyAdapter, adapter => adapter.provideCallees(definition, token), undefined);
|
|
625
626
|
}
|
|
627
|
+
|
|
628
|
+
$releaseCallHierarchy(handle: number, session?: string): Promise<boolean> {
|
|
629
|
+
return this.withAdapter(handle, CallHierarchyAdapter, adapter => adapter.releaseSession(session), false);
|
|
630
|
+
}
|
|
626
631
|
// ### Call Hierarchy Provider end
|
|
627
632
|
|
|
628
633
|
// #region semantic coloring
|
|
@@ -675,7 +675,7 @@ export function toLocation(value: model.Location): types.Location {
|
|
|
675
675
|
return new types.Location(URI.revive(value.uri), toRange(value.range));
|
|
676
676
|
}
|
|
677
677
|
|
|
678
|
-
export function fromCallHierarchyItem(item:
|
|
678
|
+
export function fromCallHierarchyItem(item: types.CallHierarchyItem): model.CallHierarchyItem {
|
|
679
679
|
return <model.CallHierarchyItem>{
|
|
680
680
|
kind: SymbolKind.fromSymbolKind(item.kind),
|
|
681
681
|
name: item.name,
|
|
@@ -684,7 +684,8 @@ export function fromCallHierarchyItem(item: theia.CallHierarchyItem): model.Call
|
|
|
684
684
|
range: fromRange(item.range),
|
|
685
685
|
selectionRange: fromRange(item.selectionRange),
|
|
686
686
|
tags: item.tags,
|
|
687
|
-
|
|
687
|
+
_itemId: item._itemId,
|
|
688
|
+
_sessionId: item._sessionId,
|
|
688
689
|
};
|
|
689
690
|
}
|
|
690
691
|
|
|
@@ -698,7 +699,9 @@ export function toCallHierarchyItem(value: model.CallHierarchyItem): types.CallH
|
|
|
698
699
|
toRange(value.selectionRange),
|
|
699
700
|
);
|
|
700
701
|
item.tags = value.tags;
|
|
701
|
-
item.
|
|
702
|
+
item._itemId = value._itemId;
|
|
703
|
+
item._sessionId = value._sessionId;
|
|
704
|
+
|
|
702
705
|
return item;
|
|
703
706
|
}
|
|
704
707
|
|
package/src/plugin/types-impl.ts
CHANGED
|
@@ -2437,7 +2437,6 @@ export class CallHierarchyItem {
|
|
|
2437
2437
|
range: Range;
|
|
2438
2438
|
selectionRange: Range;
|
|
2439
2439
|
tags?: readonly SymbolTag[];
|
|
2440
|
-
data?: unknown;
|
|
2441
2440
|
|
|
2442
2441
|
constructor(kind: SymbolKind, name: string, detail: string, uri: URI, range: Range, selectionRange: Range) {
|
|
2443
2442
|
this.kind = kind;
|
|
@@ -2448,7 +2447,7 @@ export class CallHierarchyItem {
|
|
|
2448
2447
|
this.selectionRange = selectionRange;
|
|
2449
2448
|
}
|
|
2450
2449
|
|
|
2451
|
-
static isCallHierarchyItem(thing: {}): thing is
|
|
2450
|
+
static isCallHierarchyItem(thing: {}): thing is CallHierarchyItem {
|
|
2452
2451
|
if (thing instanceof CallHierarchyItem) {
|
|
2453
2452
|
return true;
|
|
2454
2453
|
}
|