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

debug: allow adapters to provide full launch.json content

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