Refresh master with initial release/0.24 snapshot (#332)

* Initial port of release/0.24 source code

* Fix additional headers

* Fix a typo in launch.json
This commit is contained in:
Karl Burtram
2017-12-15 15:38:57 -08:00
committed by GitHub
parent 271b3a0b82
commit 6ad0df0e3e
7118 changed files with 107999 additions and 56466 deletions

View File

@@ -6,19 +6,17 @@
import { ok } from 'vs/base/common/assert';
import { readonly, illegalArgument, V8CallSite } from 'vs/base/common/errors';
import { readonly, illegalArgument } from 'vs/base/common/errors';
import { IdGenerator } from 'vs/base/common/idGenerator';
import { TPromise } from 'vs/base/common/winjs.base';
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, MainThreadTelemetryShape, IResolvedTextEditorConfiguration, ITextEditorConfigurationUpdate } from './extHost.protocol';
import { MainThreadEditorsShape, IResolvedTextEditorConfiguration, ITextEditorConfigurationUpdate } 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 {
@@ -418,11 +416,29 @@ export class ExtHostTextEditor implements vscode.TextEditor {
setDecorations(decorationType: vscode.TextEditorDecorationType, ranges: Range[] | vscode.DecorationOptions[]): void {
this._runOnProxy(
() => this._proxy.$trySetDecorations(
this._id,
decorationType.key,
TypeConverters.fromRangeOrRangeWithMessage(ranges)
)
() => {
if (TypeConverters.isDecorationOptionsArr(ranges)) {
return this._proxy.$trySetDecorations(
this._id,
decorationType.key,
TypeConverters.fromRangeOrRangeWithMessage(ranges)
);
} else {
let _ranges: number[] = new Array<number>(4 * ranges.length);
for (let i = 0, len = ranges.length; i < len; i++) {
const range = ranges[i];
_ranges[4 * i] = range.start.line + 1;
_ranges[4 * i + 1] = range.start.character + 1;
_ranges[4 * i + 2] = range.end.line + 1;
_ranges[4 * i + 3] = range.end.character + 1;
}
return this._proxy.$trySetDecorationsFast(
this._id,
decorationType.key,
/*TODO: marshaller is too slow*/JSON.stringify(_ranges)
);
}
}
);
}
@@ -552,70 +568,6 @@ export class ExtHostTextEditor implements vscode.TextEditor {
}
}
export class ExtHostTextEditor2 extends ExtHostTextEditor {
constructor(
private readonly _extHostExtensions: ExtHostExtensionService,
private readonly _mainThreadTelemetry: MainThreadTelemetryShape,
proxy: MainThreadEditorsShape,
id: string,
document: ExtHostDocumentData,
selections: Selection[],
options: IResolvedTextEditorConfiguration,
viewColumn: vscode.ViewColumn
) {
super(proxy, id, document, selections, options, viewColumn);
}
setDecorations(decorationType: vscode.TextEditorDecorationType, rangesOrOptions: Range[] | vscode.DecorationOptions[]): void {
// (1) find out if this decoration is important for us
let usesCommandLink = false;
outer: for (const rangeOrOption of rangesOrOptions) {
if (Range.isRange(rangeOrOption)) {
break;
}
if (typeof rangeOrOption.hoverMessage === 'string' && containsCommandLink(rangeOrOption.hoverMessage)) {
usesCommandLink = true;
break;
} else if (Array.isArray(rangeOrOption.hoverMessage)) {
for (const message of rangeOrOption.hoverMessage) {
if (typeof message === 'string' && containsCommandLink(message)) {
usesCommandLink = true;
break outer;
}
}
}
}
// (2) send event for important decorations
if (usesCommandLink) {
let tag = new Error();
this._extHostExtensions.getExtensionPathIndex().then(index => {
const oldHandler = (<any>Error).prepareStackTrace;
(<any>Error).prepareStackTrace = (error: Error, stackTrace: V8CallSite[]) => {
for (const call of stackTrace) {
const extension = index.findSubstr(call.getFileName());
if (extension) {
this._mainThreadTelemetry.$publicLog('usesCommandLink', {
extension: extension.id,
from: 'decoration',
});
return;
}
}
};
// it all happens here...
// tslint:disable-next-line:no-unused-expression
tag.stack;
(<any>Error).prepareStackTrace = oldHandler;
});
}
// (3) do it
super.setDecorations(decorationType, rangesOrOptions);
}
}
function warnOnError(promise: TPromise<any>): void {
promise.then(null, (err) => {
console.warn(err);