know decorations using command links, #29076

This commit is contained in:
Johannes Rieken
2017-08-23 11:49:38 +02:00
parent 001cff3e78
commit 94c4b25a47
5 changed files with 72 additions and 7 deletions

View File

@@ -13,10 +13,12 @@ import { ExtHostDocumentData } from 'vs/workbench/api/node/extHostDocumentData';
import { Selection, Range, Position, EndOfLine, TextEditorRevealType, TextEditorLineNumbersStyle, SnippetString } from './extHostTypes';
import { ISingleEditOperation } from 'vs/editor/common/editorCommon';
import * as TypeConverters from './extHostTypeConverters';
import { MainThreadEditorsShape, IResolvedTextEditorConfiguration, ITextEditorConfigurationUpdate } from './extHost.protocol';
import { MainThreadEditorsShape, IResolvedTextEditorConfiguration, ITextEditorConfigurationUpdate, MainThreadTelemetryShape } from './extHost.protocol';
import * as vscode from 'vscode';
import { TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions';
import { IRange } from 'vs/editor/common/core/range';
import { containsCommandLink } from 'vs/base/common/htmlContent';
import { ExtHostExtensionService } from 'vs/workbench/api/node/extHostExtensionService';
export class TextEditorDecorationType implements vscode.TextEditorDecorationType {
@@ -314,6 +316,8 @@ export class ExtHostTextEditorOptions implements vscode.TextEditorOptions {
export class ExtHostTextEditor implements vscode.TextEditor {
private readonly _proxy: MainThreadEditorsShape;
private readonly _telemetry: MainThreadTelemetryShape;
private readonly _extHostExtensions: ExtHostExtensionService;
private readonly _id: string;
private readonly _documentData: ExtHostDocumentData;
@@ -324,8 +328,19 @@ export class ExtHostTextEditor implements vscode.TextEditor {
get id(): string { return this._id; }
constructor(proxy: MainThreadEditorsShape, id: string, document: ExtHostDocumentData, selections: Selection[], options: IResolvedTextEditorConfiguration, viewColumn: vscode.ViewColumn) {
constructor(
proxy: MainThreadEditorsShape,
telemetry: MainThreadTelemetryShape,
extHostExtensions: ExtHostExtensionService,
id: string,
document: ExtHostDocumentData,
selections: Selection[],
options: IResolvedTextEditorConfiguration,
viewColumn: vscode.ViewColumn
) {
this._proxy = proxy;
this._telemetry = telemetry;
this._extHostExtensions = extHostExtensions;
this._id = id;
this._documentData = document;
this._selections = selections;
@@ -414,12 +429,36 @@ export class ExtHostTextEditor implements vscode.TextEditor {
this._trySetSelection();
}
setDecorations(decorationType: vscode.TextEditorDecorationType, ranges: Range[] | vscode.DecorationOptions[]): void {
setDecorations(decorationType: vscode.TextEditorDecorationType, rangesOrOptions: Range[] | vscode.DecorationOptions[]): void {
const options = TypeConverters.fromRangeOrRangeWithMessage(rangesOrOptions);
let usesCommands = false;
for (let i = 0; i < options.length && !usesCommands; i++) {
const { hoverMessage } = options[i];
if (Array.isArray(hoverMessage)) {
usesCommands = hoverMessage.some(containsCommandLink);
} else if (hoverMessage) {
usesCommands = containsCommandLink(hoverMessage);
}
}
if (usesCommands) {
this._extHostExtensions.getActiveExtensionFromCallstack().then(extension => {
if (!extension) {
return;
}
this._telemetry.$publicLog('MarkedString/commandLink', {
extension: extension.id,
from: 'decoration'
});
});
}
this._runOnProxy(
() => this._proxy.$trySetDecorations(
this._id,
decorationType.key,
TypeConverters.fromRangeOrRangeWithMessage(ranges)
options
)
);
}