mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-09 17:52:34 -05:00
Merge from vscode f2d41726ba5a0e8abfe61b2c743022b1b6372010 (#7415)
* Merge from vscode f2d41726ba5a0e8abfe61b2c743022b1b6372010 * add missing files
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
import * as nls from 'vs/nls';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import * as Objects from 'vs/base/common/objects';
|
||||
import * as resources from 'vs/base/common/resources';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { IStringDictionary } from 'vs/base/common/collections';
|
||||
import { Action } from 'vs/base/common/actions';
|
||||
@@ -77,6 +78,7 @@ import { ITextModelService } from 'vs/editor/common/services/resolverService';
|
||||
import { applyEdits } from 'vs/base/common/jsonEdit';
|
||||
import { ITextEditor } from 'vs/workbench/common/editor';
|
||||
import { ITextEditorSelection } from 'vs/platform/editor/common/editor';
|
||||
import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences';
|
||||
|
||||
export namespace ConfigureTaskAction {
|
||||
export const ID = 'workbench.action.tasks.configureTaskRunner';
|
||||
@@ -224,7 +226,8 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
|
||||
@IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService,
|
||||
@ITerminalInstanceService private readonly terminalInstanceService: ITerminalInstanceService,
|
||||
@IRemoteAgentService private readonly remoteAgentService: IRemoteAgentService,
|
||||
@ITextModelService private readonly textModelResolverService: ITextModelService
|
||||
@ITextModelService private readonly textModelResolverService: ITextModelService,
|
||||
@IPreferencesService private readonly preferencesService: IPreferencesService
|
||||
) {
|
||||
super();
|
||||
|
||||
@@ -389,6 +392,13 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
|
||||
this.panelService.openPanel(Constants.MARKERS_PANEL_ID, true);
|
||||
}
|
||||
});
|
||||
|
||||
CommandsRegistry.registerCommand('workbench.action.tasks.configureUserTask', async () => {
|
||||
const resource = this.getResourceForKind(TaskSourceKind.User);
|
||||
if (resource) {
|
||||
this.openTaskFile(resource);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private get workspaceFolders(): IWorkspaceFolder[] {
|
||||
@@ -963,10 +973,34 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
|
||||
}
|
||||
}
|
||||
|
||||
private getResourceForKind(kind: string): URI | undefined {
|
||||
switch (kind) {
|
||||
case TaskSourceKind.User: {
|
||||
return resources.joinPath(resources.dirname(this.preferencesService.userSettingsResource), 'tasks.json');
|
||||
}
|
||||
case TaskSourceKind.WorkspaceFile: {
|
||||
if (this._workspace && this._workspace.configuration) {
|
||||
return this._workspace.configuration;
|
||||
}
|
||||
}
|
||||
default: {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private getResourceForTask(task: CustomTask): URI {
|
||||
let uri = this.getResourceForKind(task._source.kind);
|
||||
if (!uri) {
|
||||
uri = task.getWorkspaceFolder().toResource(task._source.config.file);
|
||||
}
|
||||
return uri;
|
||||
}
|
||||
|
||||
public openConfig(task: CustomTask | undefined): Promise<void> {
|
||||
let resource: URI | undefined;
|
||||
if (task) {
|
||||
resource = task.getWorkspaceFolder().toResource(task._source.config.file);
|
||||
resource = this.getResourceForTask(task);
|
||||
} else {
|
||||
resource = (this._workspaceFolders && (this._workspaceFolders.length > 0)) ? this._workspaceFolders[0].toResource('.vscode/tasks.json') : undefined;
|
||||
}
|
||||
@@ -2206,6 +2240,52 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
|
||||
return result;
|
||||
}
|
||||
|
||||
private openTaskFile(resource: URI) {
|
||||
let configFileCreated = false;
|
||||
this.fileService.resolve(resource).then((stat) => stat, () => undefined).then((stat) => {
|
||||
if (stat) {
|
||||
return stat.resource;
|
||||
}
|
||||
return this.quickInputService.pick(getTaskTemplates(), { placeHolder: nls.localize('TaskService.template', 'Select a Task Template') }).then((selection) => {
|
||||
if (!selection) {
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
let content = selection.content;
|
||||
let editorConfig = this.configurationService.getValue<any>();
|
||||
if (editorConfig.editor.insertSpaces) {
|
||||
content = content.replace(/(\n)(\t+)/g, (_, s1, s2) => s1 + strings.repeat(' ', s2.length * editorConfig.editor.tabSize));
|
||||
}
|
||||
configFileCreated = true;
|
||||
type TaskServiceTemplateClassification = {
|
||||
templateId?: { classification: 'SystemMetaData', purpose: 'FeatureInsight' };
|
||||
autoDetect: { classification: 'SystemMetaData', purpose: 'FeatureInsight', isMeasurement: true };
|
||||
};
|
||||
type TaskServiceEvent = {
|
||||
templateId?: string;
|
||||
autoDetect: boolean;
|
||||
};
|
||||
return this.textFileService.create(resource, content).then((result): URI => {
|
||||
this.telemetryService.publicLog2<TaskServiceEvent, TaskServiceTemplateClassification>('taskService.template', {
|
||||
templateId: selection.id,
|
||||
autoDetect: selection.autoDetect
|
||||
});
|
||||
return result.resource;
|
||||
});
|
||||
});
|
||||
}).then((resource) => {
|
||||
if (!resource) {
|
||||
return;
|
||||
}
|
||||
this.editorService.openEditor({
|
||||
resource,
|
||||
options: {
|
||||
pinned: configFileCreated // pin only if config file is created #8727
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private runConfigureTasks(): void {
|
||||
if (!this.canRunCommand()) {
|
||||
return undefined;
|
||||
@@ -2217,52 +2297,6 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
|
||||
taskPromise = Promise.resolve(new TaskMap());
|
||||
}
|
||||
|
||||
let openTaskFile = (workspaceFolder: IWorkspaceFolder): void => {
|
||||
let resource = workspaceFolder.toResource('.vscode/tasks.json');
|
||||
let configFileCreated = false;
|
||||
this.fileService.resolve(resource).then((stat) => stat, () => undefined).then((stat) => {
|
||||
if (stat) {
|
||||
return stat.resource;
|
||||
}
|
||||
return this.quickInputService.pick(getTaskTemplates(), { placeHolder: nls.localize('TaskService.template', 'Select a Task Template') }).then((selection) => {
|
||||
if (!selection) {
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
let content = selection.content;
|
||||
let editorConfig = this.configurationService.getValue<any>();
|
||||
if (editorConfig.editor.insertSpaces) {
|
||||
content = content.replace(/(\n)(\t+)/g, (_, s1, s2) => s1 + strings.repeat(' ', s2.length * editorConfig.editor.tabSize));
|
||||
}
|
||||
configFileCreated = true;
|
||||
type TaskServiceTemplateClassification = {
|
||||
templateId?: { classification: 'SystemMetaData', purpose: 'FeatureInsight' };
|
||||
autoDetect: { classification: 'SystemMetaData', purpose: 'FeatureInsight', isMeasurement: true };
|
||||
};
|
||||
type TaskServiceEvent = {
|
||||
templateId?: string;
|
||||
autoDetect: boolean;
|
||||
};
|
||||
return this.textFileService.create(resource, content).then((result): URI => {
|
||||
this.telemetryService.publicLog2<TaskServiceEvent, TaskServiceTemplateClassification>('taskService.template', {
|
||||
templateId: selection.id,
|
||||
autoDetect: selection.autoDetect
|
||||
});
|
||||
return result.resource;
|
||||
});
|
||||
});
|
||||
}).then((resource) => {
|
||||
if (!resource) {
|
||||
return;
|
||||
}
|
||||
this.editorService.openEditor({
|
||||
resource,
|
||||
options: {
|
||||
pinned: configFileCreated // pin only if config file is created #8727
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
let configureTask = (task: Task): void => {
|
||||
if (ContributedTask.is(task)) {
|
||||
this.customize(task, undefined, true);
|
||||
@@ -2343,7 +2377,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
|
||||
if (isTaskEntry(selection)) {
|
||||
configureTask(selection.task);
|
||||
} else {
|
||||
openTaskFile(selection.folder);
|
||||
this.openTaskFile(selection.folder.toResource('.vscode/tasks.json'));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user