debugContentProvider.ts 2.6 KB
Newer Older
1 2 3 4 5 6
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import uri from 'vs/base/common/uri';
7
import { localize } from 'vs/nls';
8
import { TPromise } from 'vs/base/common/winjs.base';
I
isidor 已提交
9
import { guessMimeTypes, MIME_TEXT } from 'vs/base/common/mime';
10 11 12 13
import { IModel } from 'vs/editor/common/editorCommon';
import { IModelService } from 'vs/editor/common/services/modelService';
import { IModeService } from 'vs/editor/common/services/modeService';
import { ITextModelResolverService, ITextModelContentProvider } from 'vs/editor/common/services/resolverService';
14
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
15
import { DEBUG_SCHEME, IDebugService } from 'vs/workbench/parts/debug/common/debug';
16 17 18 19 20 21 22 23 24

export class DebugContentProvider implements IWorkbenchContribution, ITextModelContentProvider {

	constructor(
		@ITextModelResolverService textModelResolverService: ITextModelResolverService,
		@IDebugService private debugService: IDebugService,
		@IModelService private modelService: IModelService,
		@IModeService private modeService: IModeService
	) {
25
		textModelResolverService.registerTextModelContentProvider(DEBUG_SCHEME, this);
26 27 28 29 30 31 32 33
	}

	public getId(): string {
		return 'debug.contentprovider';
	}

	public provideTextContent(resource: uri): TPromise<IModel> {
		const process = this.debugService.getViewModel().focusedProcess;
34

35
		if (!process) {
36
			return TPromise.wrapError<IModel>(localize('unable', "Unable to resolve the resource without a debug session"));
37
		}
38
		const source = process.sources.get(resource.toString());
R
Rob Lourens 已提交
39 40 41
		let rawSource: DebugProtocol.Source;
		if (source) {
			rawSource = source.raw;
R
Rob Lourens 已提交
42
		} else {
R
Rob Lourens 已提交
43 44 45
			// Remove debug: scheme
			rawSource = { path: resource.with({ scheme: '' }).toString(true) };
		}
46

47
		return process.session.source({ sourceReference: source ? source.reference : undefined, source: rawSource }).then(response => {
48 49
			const mime = response.body.mimeType || guessMimeTypes(resource.toString())[0];
			const modePromise = this.modeService.getOrCreateMode(mime);
50
			const model = this.modelService.createModel(response.body.content, modePromise, resource);
51

52
			return model;
I
isidor 已提交
53 54 55 56 57 58
		}, (err: DebugProtocol.ErrorResponse) => {
			this.debugService.deemphasizeSource(resource);
			const modePromise = this.modeService.getOrCreateMode(MIME_TEXT);
			const model = this.modelService.createModel(err.message, modePromise, resource);

			return model;
59 60 61
		});
	}
}