diff --git a/src/vs/editor/contrib/colorPicker/common/colorPicker.ts b/src/vs/editor/contrib/colorPicker/common/colorPicker.ts index 64a8bfd9ee6f7960a591637a39eca17b7382f97b..6ced6872484fd2b5ae11f338844a01ce978b344a 100644 --- a/src/vs/editor/contrib/colorPicker/common/colorPicker.ts +++ b/src/vs/editor/contrib/colorPicker/common/colorPicker.ts @@ -3,25 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { TPromise } from "vs/base/common/winjs.base"; -import { ColorProviderRegistry, IColorRange } from "vs/editor/common/modes"; -import { asWinJsPromise } from "vs/base/common/async"; -import { onUnexpectedExternalError } from "vs/base/common/errors"; -import { IReadOnlyModel } from "vs/editor/common/editorCommon"; +import { TPromise } from 'vs/base/common/winjs.base'; +import { ColorProviderRegistry, IColorRange } from 'vs/editor/common/modes'; +import { asWinJsPromise } from 'vs/base/common/async'; +import { IReadOnlyModel } from 'vs/editor/common/editorCommon'; +import { flatten } from 'vs/base/common/arrays'; export function getColors(model: IReadOnlyModel): TPromise { - let colorInfo: IColorRange[] = []; + const providers = ColorProviderRegistry.ordered(model).reverse(); + const promises = providers.map(p => asWinJsPromise(token => p.provideColorRanges(model, token))); - // ask all providers for colors in parallel - const promises = ColorProviderRegistry.ordered(model).reverse().map(provider => { - return asWinJsPromise(token => provider.provideColorRanges(model, token)).then(result => { - if (Array.isArray(result)) { - colorInfo = colorInfo.concat(result); - } - }, onUnexpectedExternalError); - }); - - return TPromise.join(promises).then(() => { - return colorInfo; - }); + return TPromise.join(promises) + .then(ranges => flatten(ranges.filter(r => Array.isArray(r)))); } \ No newline at end of file