mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-27 07:10:30 -04:00
Vscode merge (#4582)
* Merge from vscode 37cb23d3dd4f9433d56d4ba5ea3203580719a0bd * fix issues with merges * bump node version in azpipe * replace license headers * remove duplicate launch task * fix build errors * fix build errors * fix tslint issues * working through package and linux build issues * more work * wip * fix packaged builds * working through linux build errors * wip * wip * wip * fix mac and linux file limits * iterate linux pipeline * disable editor typing * revert series to parallel * remove optimize vscode from linux * fix linting issues * revert testing change * add work round for new node * readd packaging for extensions * fix issue with angular not resolving decorator dependencies
This commit is contained in:
70
src/vs/workbench/contrib/codeinset/common/codeInset.ts
Normal file
70
src/vs/workbench/contrib/codeinset/common/codeInset.ts
Normal file
@@ -0,0 +1,70 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ITextModel } from 'vs/editor/common/model';
|
||||
import { onUnexpectedExternalError } from 'vs/base/common/errors';
|
||||
import { mergeSort } from 'vs/base/common/arrays';
|
||||
import { Event } from 'vs/base/common/event';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { LanguageFeatureRegistry } from 'vs/editor/common/modes/languageFeatureRegistry';
|
||||
import { ProviderResult } from 'vs/editor/common/modes';
|
||||
import { IRange } from 'vs/editor/common/core/range';
|
||||
|
||||
export interface ICodeInsetSymbol {
|
||||
id: string;
|
||||
range: IRange;
|
||||
height?: number;
|
||||
}
|
||||
|
||||
export interface CodeInsetProvider {
|
||||
onDidChange?: Event<this>;
|
||||
provideCodeInsets(model: ITextModel, token: CancellationToken): ProviderResult<ICodeInsetSymbol[]>;
|
||||
resolveCodeInset(model: ITextModel, codeInset: ICodeInsetSymbol, token: CancellationToken): ProviderResult<ICodeInsetSymbol>;
|
||||
}
|
||||
|
||||
export const CodeInsetProviderRegistry = new LanguageFeatureRegistry<CodeInsetProvider>();
|
||||
|
||||
export interface ICodeInsetData {
|
||||
symbol: ICodeInsetSymbol;
|
||||
provider: CodeInsetProvider;
|
||||
resolved?: boolean;
|
||||
}
|
||||
|
||||
export function getCodeInsetData(model: ITextModel, token: CancellationToken): Promise<ICodeInsetData[]> {
|
||||
|
||||
const symbols: ICodeInsetData[] = [];
|
||||
const providers = CodeInsetProviderRegistry.ordered(model);
|
||||
|
||||
const promises = providers.map(provider =>
|
||||
Promise.resolve(provider.provideCodeInsets(model, token)).then(result => {
|
||||
if (Array.isArray(result)) {
|
||||
for (let symbol of result) {
|
||||
symbols.push({ symbol, provider });
|
||||
}
|
||||
}
|
||||
}).catch(onUnexpectedExternalError));
|
||||
|
||||
return Promise.all(promises).then(() => {
|
||||
|
||||
return mergeSort(symbols, (a, b) => {
|
||||
// sort by lineNumber, provider-rank, and column
|
||||
if (a.symbol.range.startLineNumber < b.symbol.range.startLineNumber) {
|
||||
return -1;
|
||||
} else if (a.symbol.range.startLineNumber > b.symbol.range.startLineNumber) {
|
||||
return 1;
|
||||
} else if (providers.indexOf(a.provider) < providers.indexOf(b.provider)) {
|
||||
return -1;
|
||||
} else if (providers.indexOf(a.provider) > providers.indexOf(b.provider)) {
|
||||
return 1;
|
||||
} else if (a.symbol.range.startColumn < b.symbol.range.startColumn) {
|
||||
return -1;
|
||||
} else if (a.symbol.range.startColumn > b.symbol.range.startColumn) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user