add telemetry about completion items and the use of snippet synatx, #3210

This commit is contained in:
Johannes Rieken
2016-11-07 12:41:27 +01:00
parent 20a3c1e91e
commit b283fc9e17
4 changed files with 42 additions and 9 deletions

View File

@@ -47,11 +47,11 @@ import * as languageConfiguration from 'vs/editor/common/modes/languageConfigura
export interface IExtensionApiFactory {
(extension?: IExtensionDescription): typeof vscode;
(extension: IExtensionDescription): typeof vscode;
}
function proposedApiFunction<T>(extension: IExtensionDescription, fn: T): T {
if (extension && extension.enableProposedApi) {
if (extension.enableProposedApi) {
return fn;
} else {
return <any>(() => {
@@ -92,9 +92,9 @@ export function createApiFactory(initDataConfiguration: IInitConfiguration, init
// Register API-ish commands
ExtHostApiCommands.register(extHostCommands);
return function (extension?: IExtensionDescription): typeof vscode {
return function (extension: IExtensionDescription): typeof vscode {
if (extension && extension.enableProposedApi) {
if (extension.enableProposedApi) {
console.warn(`${extension.name} (${extension.id}) uses PROPOSED API which is subject to change and removal without notice`);
}
@@ -204,7 +204,7 @@ export function createApiFactory(initDataConfiguration: IInitConfiguration, init
return languageFeatures.registerSignatureHelpProvider(selector, provider, triggerCharacters);
},
registerCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.CompletionItemProvider, ...triggerCharacters: string[]): vscode.Disposable {
return languageFeatures.registerCompletionItemProvider(selector, provider, triggerCharacters);
return languageFeatures.registerCompletionItemProvider(selector, provider, triggerCharacters, extension.id);
},
registerDocumentLinkProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentLinkProvider): vscode.Disposable {
return languageFeatures.registerDocumentLinkProvider(selector, provider);
@@ -460,8 +460,23 @@ export function defineAPI(factory: IExtensionApiFactory, extensionService: ExtHo
// fall back to a default implementation
if (!defaultApiImpl) {
defaultApiImpl = factory(undefined);
defaultApiImpl = factory(nullExtensionDescription);
}
return defaultApiImpl;
};
}
const nullExtensionDescription: IExtensionDescription = {
id: 'nullExtensionDescription',
name: 'Null Extension Description',
publisher: 'vscode',
activationEvents: undefined,
contributes: undefined,
enableProposedApi: false,
engines: undefined,
extensionDependencies: undefined,
extensionFolderPath: undefined,
isBuiltin: false,
main: undefined,
version: undefined
};

View File

@@ -412,12 +412,14 @@ class SuggestAdapter {
private _commands: CommandsConverter;
private _heapService: ExtHostHeapService;
private _provider: vscode.CompletionItemProvider;
private _extensionId: string;
constructor(documents: ExtHostDocuments, commands: CommandsConverter, heapService: ExtHostHeapService, provider: vscode.CompletionItemProvider) {
constructor(documents: ExtHostDocuments, commands: CommandsConverter, heapService: ExtHostHeapService, provider: vscode.CompletionItemProvider, extensionId?: string) {
this._documents = documents;
this._commands = commands;
this._heapService = heapService;
this._provider = provider;
this._extensionId = extensionId;
}
provideCompletionItems(resource: URI, position: IPosition): TPromise<modes.ISuggestResult> {
@@ -477,6 +479,10 @@ class SuggestAdapter {
suggestion.overwriteAfter = 0;
}
if (this._extensionId) {
suggestion._extensionId = this._extensionId;
}
// store suggestion
result.suggestions.push(suggestion);
}
@@ -771,9 +777,9 @@ export class ExtHostLanguageFeatures extends ExtHostLanguageFeaturesShape {
// --- suggestion
registerCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.CompletionItemProvider, triggerCharacters: string[]): vscode.Disposable {
registerCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.CompletionItemProvider, triggerCharacters: string[], extensionId?: string): vscode.Disposable {
const handle = this._nextHandle();
this._adapter[handle] = new SuggestAdapter(this._documents, this._commands.converter, this._heapService, provider);
this._adapter[handle] = new SuggestAdapter(this._documents, this._commands.converter, this._heapService, provider, extensionId);
this._proxy.$registerSuggestSupport(handle, selector, triggerCharacters);
return this._createDisposable(handle);
}