Skip to content

Commit 8bfa7ff

Browse files
committed
Move IExtensionService up to /workbench/ (fixes microsoft#44281)
1 parent 07b2c80 commit 8bfa7ff

79 files changed

Lines changed: 365 additions & 362 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/vs/platform/extensions/common/extensions.ts

Lines changed: 0 additions & 186 deletions
Original file line numberDiff line numberDiff line change
@@ -4,192 +4,6 @@
44
*--------------------------------------------------------------------------------------------*/
55
'use strict';
66

7-
import Severity from 'vs/base/common/severity';
8-
import { TPromise } from 'vs/base/common/winjs.base';
9-
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
10-
import { IExtensionPoint } from 'vs/platform/extensions/common/extensionsRegistry';
11-
import Event from 'vs/base/common/event';
12-
13-
export interface IExtensionDescription {
14-
readonly id: string;
15-
readonly name: string;
16-
readonly uuid?: string;
17-
readonly displayName?: string;
18-
readonly version: string;
19-
readonly publisher: string;
20-
readonly isBuiltin: boolean;
21-
readonly extensionFolderPath: string;
22-
readonly extensionDependencies?: string[];
23-
readonly activationEvents?: string[];
24-
readonly engines: {
25-
vscode: string;
26-
};
27-
readonly main?: string;
28-
readonly contributes?: { [point: string]: any; };
29-
readonly keywords?: string[];
30-
readonly repository?: {
31-
url: string;
32-
};
33-
enableProposedApi?: boolean;
34-
}
35-
367
export const MANIFEST_CACHE_FOLDER = 'CachedExtensions';
378
export const USER_MANIFEST_CACHE_FILE = 'user';
389
export const BUILTIN_MANIFEST_CACHE_FILE = 'builtin';
39-
40-
export const IExtensionService = createDecorator<IExtensionService>('extensionService');
41-
42-
export interface IMessage {
43-
type: Severity;
44-
message: string;
45-
source: string;
46-
extensionId: string;
47-
extensionPointId: string;
48-
}
49-
50-
export interface IExtensionsStatus {
51-
messages: IMessage[];
52-
activationTimes: ActivationTimes;
53-
runtimeErrors: Error[];
54-
}
55-
56-
/**
57-
* e.g.
58-
* ```
59-
* {
60-
* startTime: 1511954813493000,
61-
* endTime: 1511954835590000,
62-
* deltas: [ 100, 1500, 123456, 1500, 100000 ],
63-
* ids: [ 'idle', 'self', 'extension1', 'self', 'idle' ]
64-
* }
65-
* ```
66-
*/
67-
export interface IExtensionHostProfile {
68-
/**
69-
* Profiling start timestamp in microseconds.
70-
*/
71-
startTime: number;
72-
/**
73-
* Profiling end timestamp in microseconds.
74-
*/
75-
endTime: number;
76-
/**
77-
* Duration of segment in microseconds.
78-
*/
79-
deltas: number[];
80-
/**
81-
* Segment identifier: extension id or one of the four known strings.
82-
*/
83-
ids: ProfileSegmentId[];
84-
85-
/**
86-
* Get the information as a .cpuprofile.
87-
*/
88-
data: object;
89-
90-
/**
91-
* Get the aggregated time per segmentId
92-
*/
93-
getAggregatedTimes(): Map<ProfileSegmentId, number>;
94-
}
95-
96-
/**
97-
* Extension id or one of the four known program states.
98-
*/
99-
export type ProfileSegmentId = string | 'idle' | 'program' | 'gc' | 'self';
100-
101-
export class ActivationTimes {
102-
constructor(
103-
public readonly startup: boolean,
104-
public readonly codeLoadingTime: number,
105-
public readonly activateCallTime: number,
106-
public readonly activateResolvedTime: number,
107-
public readonly activationEvent: string
108-
) {
109-
}
110-
}
111-
112-
export class ExtensionPointContribution<T> {
113-
readonly description: IExtensionDescription;
114-
readonly value: T;
115-
116-
constructor(description: IExtensionDescription, value: T) {
117-
this.description = description;
118-
this.value = value;
119-
}
120-
}
121-
122-
export interface IExtensionService {
123-
_serviceBrand: any;
124-
125-
/**
126-
* An event emitted when extensions are registered after their extension points got handled.
127-
*
128-
* This event will also fire on startup to signal the installed extensions.
129-
*
130-
* @returns the extensions that got registered
131-
*/
132-
onDidRegisterExtensions: Event<void>;
133-
134-
/**
135-
* @event
136-
* Fired when extensions status changes.
137-
* The event contains the ids of the extensions that have changed.
138-
*/
139-
onDidChangeExtensionsStatus: Event<string[]>;
140-
141-
/**
142-
* Send an activation event and activate interested extensions.
143-
*/
144-
activateByEvent(activationEvent: string): TPromise<void>;
145-
146-
/**
147-
* An promise that resolves when the installed extensions are registered after
148-
* their extension points got handled.
149-
*/
150-
whenInstalledExtensionsRegistered(): TPromise<boolean>;
151-
152-
/**
153-
* Return all registered extensions
154-
*/
155-
getExtensions(): TPromise<IExtensionDescription[]>;
156-
157-
/**
158-
* Read all contributions to an extension point.
159-
*/
160-
readExtensionPointContributions<T>(extPoint: IExtensionPoint<T>): TPromise<ExtensionPointContribution<T>[]>;
161-
162-
/**
163-
* Get information about extensions status.
164-
*/
165-
getExtensionsStatus(): { [id: string]: IExtensionsStatus };
166-
167-
/**
168-
* Check if the extension host can be profiled.
169-
*/
170-
canProfileExtensionHost(): boolean;
171-
172-
/**
173-
* Begin an extension host process profile session.
174-
*/
175-
startExtensionHostProfile(): TPromise<ProfileSession>;
176-
177-
/**
178-
* Restarts the extension host.
179-
*/
180-
restartExtensionHost(): void;
181-
182-
/**
183-
* Starts the extension host.
184-
*/
185-
startExtensionHost(): void;
186-
187-
/**
188-
* Stops the extension host.
189-
*/
190-
stopExtensionHost(): void;
191-
}
192-
193-
export interface ProfileSession {
194-
stop(): TPromise<IExtensionHostProfile>;
195-
}

src/vs/platform/extensions/node/extensionValidator.ts

Lines changed: 0 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
'use strict';
66

77
import * as nls from 'vs/nls';
8-
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
9-
import { valid } from 'semver';
10-
import { join } from 'path';
118

129
export interface IParsedVersion {
1310
hasCaret: boolean;
@@ -254,90 +251,3 @@ export function isVersionValid(currentVersion: string, requestedVersion: string,
254251

255252
return true;
256253
}
257-
258-
function _isStringArray(arr: string[]): boolean {
259-
if (!Array.isArray(arr)) {
260-
return false;
261-
}
262-
for (let i = 0, len = arr.length; i < len; i++) {
263-
if (typeof arr[i] !== 'string') {
264-
return false;
265-
}
266-
}
267-
return true;
268-
}
269-
270-
function baseIsValidExtensionDescription(extensionFolderPath: string, extensionDescription: IExtensionDescription, notices: string[]): boolean {
271-
if (!extensionDescription) {
272-
notices.push(nls.localize('extensionDescription.empty', "Got empty extension description"));
273-
return false;
274-
}
275-
if (typeof extensionDescription.publisher !== 'string') {
276-
notices.push(nls.localize('extensionDescription.publisher', "property `{0}` is mandatory and must be of type `string`", 'publisher'));
277-
return false;
278-
}
279-
if (typeof extensionDescription.name !== 'string') {
280-
notices.push(nls.localize('extensionDescription.name', "property `{0}` is mandatory and must be of type `string`", 'name'));
281-
return false;
282-
}
283-
if (typeof extensionDescription.version !== 'string') {
284-
notices.push(nls.localize('extensionDescription.version', "property `{0}` is mandatory and must be of type `string`", 'version'));
285-
return false;
286-
}
287-
if (!extensionDescription.engines) {
288-
notices.push(nls.localize('extensionDescription.engines', "property `{0}` is mandatory and must be of type `object`", 'engines'));
289-
return false;
290-
}
291-
if (typeof extensionDescription.engines.vscode !== 'string') {
292-
notices.push(nls.localize('extensionDescription.engines.vscode', "property `{0}` is mandatory and must be of type `string`", 'engines.vscode'));
293-
return false;
294-
}
295-
if (typeof extensionDescription.extensionDependencies !== 'undefined') {
296-
if (!_isStringArray(extensionDescription.extensionDependencies)) {
297-
notices.push(nls.localize('extensionDescription.extensionDependencies', "property `{0}` can be omitted or must be of type `string[]`", 'extensionDependencies'));
298-
return false;
299-
}
300-
}
301-
if (typeof extensionDescription.activationEvents !== 'undefined') {
302-
if (!_isStringArray(extensionDescription.activationEvents)) {
303-
notices.push(nls.localize('extensionDescription.activationEvents1', "property `{0}` can be omitted or must be of type `string[]`", 'activationEvents'));
304-
return false;
305-
}
306-
if (typeof extensionDescription.main === 'undefined') {
307-
notices.push(nls.localize('extensionDescription.activationEvents2', "properties `{0}` and `{1}` must both be specified or must both be omitted", 'activationEvents', 'main'));
308-
return false;
309-
}
310-
}
311-
if (typeof extensionDescription.main !== 'undefined') {
312-
if (typeof extensionDescription.main !== 'string') {
313-
notices.push(nls.localize('extensionDescription.main1', "property `{0}` can be omitted or must be of type `string`", 'main'));
314-
return false;
315-
} else {
316-
let normalizedAbsolutePath = join(extensionFolderPath, extensionDescription.main);
317-
318-
if (normalizedAbsolutePath.indexOf(extensionFolderPath)) {
319-
notices.push(nls.localize('extensionDescription.main2', "Expected `main` ({0}) to be included inside extension's folder ({1}). This might make the extension non-portable.", normalizedAbsolutePath, extensionFolderPath));
320-
// not a failure case
321-
}
322-
}
323-
if (typeof extensionDescription.activationEvents === 'undefined') {
324-
notices.push(nls.localize('extensionDescription.main3', "properties `{0}` and `{1}` must both be specified or must both be omitted", 'activationEvents', 'main'));
325-
return false;
326-
}
327-
}
328-
return true;
329-
}
330-
331-
export function isValidExtensionDescription(version: string, extensionFolderPath: string, extensionDescription: IExtensionDescription, notices: string[]): boolean {
332-
333-
if (!baseIsValidExtensionDescription(extensionFolderPath, extensionDescription, notices)) {
334-
return false;
335-
}
336-
337-
if (!valid(extensionDescription.version)) {
338-
notices.push(nls.localize('notSemver', "Extension version is not semver compatible."));
339-
return false;
340-
}
341-
342-
return isValidExtensionVersion(version, extensionDescription, notices);
343-
}

src/vs/workbench/api/browser/viewsExtensionPoint.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import { localize } from 'vs/nls';
88
import { forEach } from 'vs/base/common/collections';
99
import { IJSONSchema } from 'vs/base/common/jsonSchema';
10-
import { ExtensionMessageCollector, ExtensionsRegistry } from 'vs/platform/extensions/common/extensionsRegistry';
10+
import { ExtensionMessageCollector, ExtensionsRegistry } from 'vs/workbench/services/extensions/common/extensionsRegistry';
1111
import { ViewLocation, ViewsRegistry, ICustomViewDescriptor } from 'vs/workbench/common/views';
1212
import { CustomTreeViewPanel } from 'vs/workbench/browser/parts/views/customViewPanel';
1313
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';

src/vs/workbench/api/electron-browser/mainThreadExtensionService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
'use strict';
66

77
import Severity from 'vs/base/common/severity';
8-
import { IExtensionService } from 'vs/platform/extensions/common/extensions';
8+
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
99
import { MainThreadExtensionServiceShape, MainContext, IExtHostContext } from '../node/extHost.protocol';
1010
import { ExtensionService } from 'vs/workbench/services/extensions/electron-browser/extensionService';
1111
import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers';

src/vs/workbench/api/electron-browser/mainThreadMessageService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Severity from 'vs/base/common/severity';
99
import { Action } from 'vs/base/common/actions';
1010
import { MainThreadMessageServiceShape, MainContext, IExtHostContext, MainThreadMessageOptions } from '../node/extHost.protocol';
1111
import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers';
12-
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
12+
import { IExtensionDescription } from 'vs/workbench/services/extensions/common/extensions';
1313
import { IChoiceService } from 'vs/platform/dialogs/common/dialogs';
1414
import { INotificationService } from 'vs/platform/notification/common/notification';
1515
import { once } from 'vs/base/common/event';

src/vs/workbench/api/node/extHost.api.impl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import { ExtHostWindow } from 'vs/workbench/api/node/extHostWindow';
3939
import * as extHostTypes from 'vs/workbench/api/node/extHostTypes';
4040
import URI from 'vs/base/common/uri';
4141
import Severity from 'vs/base/common/severity';
42-
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
42+
import { IExtensionDescription } from 'vs/workbench/services/extensions/common/extensions';
4343
import { ExtHostExtensionService } from 'vs/workbench/api/node/extHostExtensionService';
4444
import { TPromise } from 'vs/base/common/winjs.base';
4545
import { CancellationTokenSource } from 'vs/base/common/cancellation';

src/vs/workbench/api/node/extHost.protocol.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
1414

1515
import { IMarkerData } from 'vs/platform/markers/common/markers';
1616
import { Position as EditorPosition } from 'vs/platform/editor/common/editor';
17-
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
17+
import { IExtensionDescription } from 'vs/workbench/services/extensions/common/extensions';
1818
import { StatusbarAlignment as MainThreadStatusBarAlignment } from 'vs/platform/statusbar/common/statusbar';
1919
import { ITelemetryInfo } from 'vs/platform/telemetry/common/telemetry';
2020
import { ICommandHandlerDescription } from 'vs/platform/commands/common/commands';

src/vs/workbench/api/node/extHostDocumentSaveParticipant.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { ExtHostDocuments } from 'vs/workbench/api/node/extHostDocuments';
1515
import { SaveReason } from 'vs/workbench/services/textfile/common/textfiles';
1616
import * as vscode from 'vscode';
1717
import { LinkedList } from 'vs/base/common/linkedList';
18-
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
18+
import { IExtensionDescription } from 'vs/workbench/services/extensions/common/extensions';
1919
import { ILogService } from 'vs/platform/log/common/log';
2020

2121
type Listener = [Function, any, IExtensionDescription];

src/vs/workbench/api/node/extHostExtensionActivator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { IDisposable } from 'vs/base/common/lifecycle';
99
import Severity from 'vs/base/common/severity';
1010
import { TPromise } from 'vs/base/common/winjs.base';
1111
import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/node/extensionDescriptionRegistry';
12-
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
12+
import { IExtensionDescription } from 'vs/workbench/services/extensions/common/extensions';
1313
import { ExtHostLogger } from 'vs/workbench/api/node/extHostLogService';
1414

1515
const hasOwnProperty = Object.hasOwnProperty;

src/vs/workbench/api/node/extHostExtensionService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { mkdirp, dirExists, realpath, writeFile } from 'vs/base/node/pfs';
1010
import Severity from 'vs/base/common/severity';
1111
import { TPromise } from 'vs/base/common/winjs.base';
1212
import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/node/extensionDescriptionRegistry';
13-
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
13+
import { IExtensionDescription } from 'vs/workbench/services/extensions/common/extensions';
1414
import { ExtHostStorage } from 'vs/workbench/api/node/extHostStorage';
1515
import { createApiFactory, initializeExtensionApi, checkProposedApiEnabled } from 'vs/workbench/api/node/extHost.api.impl';
1616
import { MainContext, MainThreadExtensionServiceShape, IWorkspaceData, IEnvironment, IInitData, ExtHostExtensionServiceShape, MainThreadTelemetryShape, IExtHostContext } from './extHost.protocol';

0 commit comments

Comments
 (0)