提交 0e470e09 编写于 作者: I isidor

debug: allow adapters to provide full launch.json content

上级 4ef0081b
......@@ -5,12 +5,14 @@
import nls = require('vs/nls');
import { TPromise } from 'vs/base/common/winjs.base';
import strings = require('vs/base/common/strings');
import objects = require('vs/base/common/objects');
import paths = require('vs/base/common/paths');
import platform = require('vs/base/common/platform');
import debug = require('vs/workbench/parts/debug/common/debug');
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { ICommandService } from 'vs/platform/commands/common/commands';
export class Adapter {
......@@ -29,6 +31,7 @@ export class Adapter {
constructor(public rawAdapter: debug.IRawAdapter, public extensionDescription: IExtensionDescription,
@IConfigurationResolverService configurationResolverService: IConfigurationResolverService,
@IConfigurationService private configurationService: IConfigurationService,
@ICommandService private commandService: ICommandService
) {
if (rawAdapter.windows) {
......@@ -80,15 +83,29 @@ export class Adapter {
this.aiKey = rawAdapter.aiKey;
}
public getInitialConfigurations(): TPromise<string | any[]> {
public getInitialConfigFileContent(): TPromise<string> {
const editorConfig = this.configurationService.getConfiguration<any>();
if (typeof this.initialConfigurations === 'string') {
// Contributed initialConfigurations is a command that needs to be invoked
// Debug adapter will dynamically provide the initial conifguraiton
return this.commandService.executeCommand<string>(<string>this.initialConfigurations)
.then(result => JSON.parse(result));
// Debug adapter will dynamically provide the full launch.json
return this.commandService.executeCommand<string>(<string>this.initialConfigurations).then(content => {
// Debug adapter returned the full content of the launch.json - return it after format
if (editorConfig.editor.insertSpaces) {
content = content.replace(new RegExp('\t', 'g'), strings.repeat(' ', editorConfig.editor.tabSize));
}
return TPromise.as(this.initialConfigurations);
return content;
});
}
return TPromise.as(JSON.stringify(
{
version: '0.2.0',
configurations: this.initialConfigurations || []
},
null,
editorConfig.editor.insertSpaces ? strings.repeat(' ', editorConfig.editor.tabSize) : '\t'
));
};
public get label() {
......
......@@ -311,15 +311,17 @@ export class ConfigurationManager implements debug.IConfigurationManager {
let configFileCreated = false;
return this.fileService.resolveContent(resource).then(content => true, err =>
this.getInitialConfigFileContent().then(content => {
this.quickOpenService.pick(this.adapters, { placeHolder: nls.localize('selectDebug', "Select Environment") })
.then(adapter => adapter ? adapter.getInitialConfigFileContent() : null)
.then(content => {
if (!content) {
return false;
}
configFileCreated = true;
return this.fileService.updateContent(resource, content).then(() => true);
}
)).then(errorFree => {
}))
.then(errorFree => {
if (!errorFree) {
return false;
}
......@@ -337,26 +339,6 @@ export class ConfigurationManager implements debug.IConfigurationManager {
});
}
private getInitialConfigFileContent(): TPromise<string> {
return this.quickOpenService.pick(this.adapters, { placeHolder: nls.localize('selectDebug', "Select Environment") })
.then(adapter => {
if (!adapter) {
return null;
}
return adapter.getInitialConfigurations().then(configurations => {
let editorConfig = this.configurationService.getConfiguration<any>();
return JSON.stringify(
{
version: '0.2.0',
configurations: configurations || []
},
null,
editorConfig.editor.insertSpaces ? strings.repeat(' ', editorConfig.editor.tabSize) : '\t');
});
});
}
public canSetBreakpointsIn(model: editor.IModel): boolean {
if (model.uri.scheme === Schemas.inMemory) {
return false;
......
......@@ -49,7 +49,7 @@ suite('Debug - Adapter', () => {
};
setup(() => {
adapter = new Adapter(rawAdapter, { extensionFolderPath, id: 'adapter', name: 'myAdapter', version: '1.0.0', publisher: 'vscode', isBuiltin: false, engines: null }, null, null);
adapter = new Adapter(rawAdapter, { extensionFolderPath, id: 'adapter', name: 'myAdapter', version: '1.0.0', publisher: 'vscode', isBuiltin: false, engines: null }, null, null, null);
});
teardown(() => {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册