diff --git a/extensions/tasks/package.json b/extensions/tasks/package.json
deleted file mode 100644
index d19603aadad..00000000000
--- a/extensions/tasks/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "tasks",
- "description": "Extension to add support for tasks.json files",
- "displayName": "Tasks.json support for VSCode",
- "version": "0.10.1",
- "author": "Microsoft Corporation",
- "license": "MIT",
- "publisher": "vscode",
- "engines": {
- "vscode": "*"
- },
- "scripts": {
- "vscode:prepublish": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../gulpfile.plugins.js compile-plugin:tasks ./src/tsconfig.json"
- },
- "activationEvents": [
- "onLanguage:json"
- ],
- "main": "./out/tasksMain",
- "contributes": {
- }
-}
\ No newline at end of file
diff --git a/extensions/tasks/src/tasksMain.ts b/extensions/tasks/src/tasksMain.ts
deleted file mode 100644
index d011264653b..00000000000
--- a/extensions/tasks/src/tasksMain.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-'use strict';
-
-import * as path from 'path';
-
-import { languages, workspace, ExtensionContext, TextDocument, Position, CancellationToken, CompletionItem, CompletionItemKind, DocumentFilter } from 'vscode';
-
-export function activate(context: ExtensionContext): void {
- // We can't use a pattern here since it disables the normal json code complete
- // which we don't want. Do the filtering in the actual suggest
- let selector: DocumentFilter = { language: 'json' };
- let taskFileName = workspace.rootPath ? path.join(workspace.rootPath, '.vscode/tasks.json') : null;
- let items = taskFileName ? createCompletionItems() : [];
-
- languages.registerCompletionItemProvider(selector, {
- provideCompletionItems: (document: TextDocument, position: Position, token: CancellationToken): CompletionItem[] => {
- if (document.fileName === taskFileName) {
- return items;
- } else {
- return [];
- }
- }
- });
-}
-
-function createCompletionItems(): CompletionItem[] {
- let result: CompletionItem[] = [];
- let item: CompletionItem;
-
- item = new CompletionItem('tsc');
- item.kind = CompletionItemKind.Snippet;
- item.detail = 'Use the tsc compiler on a specific file.';
- item.filterText = 'ts-tsc';
- item.insertText = [
- '"version": "0.1.0",',
- '"command": "tsc",',
- '"isShellCommand": true,',
- '"showOutput": "silent",',
- '"args": ["HelloWorld.ts"],',
- '"problemMatcher": "$tsc"'
- ].join('\n');
- result.push(item);
-
- item = new CompletionItem('tsc - tsconfig.json');
- item.kind = CompletionItemKind.Snippet;
- item.detail = 'Use the tsc compiler with a tsconfig.json file.';
- item.filterText = 'ts-tsc - tsconfig.json';
- item.insertText = [
- '"version": "0.1.0",',
- '"command": "tsc",',
- '"isShellCommand": true,',
- '"showOutput": "silent",',
- '"args": ["-p", "."],',
- '"problemMatcher": "$tsc"'
- ].join('\n');
- result.push(item);
-
- item = new CompletionItem('tsc - watch');
- item.kind = CompletionItemKind.Snippet;
- item.detail = 'Use the tsc compiler in watch mode.';
- item.filterText = 'ts-tsc - watch';
- item.insertText = [
- '"version": "0.1.0",',
- '"command": "tsc",',
- '"isShellCommand": true,',
- '"showOutput": "silent",',
- '"args": ["-w", "-p", "."],',
- '"problemMatcher": "$tsc-watch"'
- ].join('\n');
- result.push(item);
-
- item = new CompletionItem('msbuild');
- item.kind = CompletionItemKind.Snippet;
- item.detail = 'Use msbuild to compile your project.';
- item.filterText = 'ts-msbuild';
- item.insertText = [
- '"version": "0.1.0",',
- '"command": "msbuild",',
- '"args": [',
- '\t// Ask msbuild to generate full paths for file names.',
- '\t"/property:GenerateFullPaths=true"',
- '],',
- '"taskSelector": "/t:",',
- '"showOutput": "silent",',
- '"tasks": [',
- '\t{',
- '\t\t"taskName": "build",',
- '\t\t// Show the output window only if unrecognized errors occur.',
- '\t\t"showOutput": "silent",',
- '\t\t// Use the standard MS compiler pattern to detect errors, warnings and infos',
- '\t\t"problemMatcher": "$msCompile"',
- '\t}',
- ']'
- ].join('\n');
- result.push(item);
-
- return result;
-}
\ No newline at end of file
diff --git a/extensions/tasks/src/tsconfig.json b/extensions/tasks/src/tsconfig.json
deleted file mode 100644
index e51744d35f4..00000000000
--- a/extensions/tasks/src/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "compilerOptions": {
- "module": "commonjs",
- "target": "es5",
- "noLib": true,
- "sourceMap": true,
- "outDir": "../out"
- }
-}
\ No newline at end of file
diff --git a/extensions/tasks/src/typings/node.additions.d.ts b/extensions/tasks/src/typings/node.additions.d.ts
deleted file mode 100644
index 3ae7322bc8a..00000000000
--- a/extensions/tasks/src/typings/node.additions.d.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;
-declare function clearTimeout(timeoutId: NodeJS.Timer): void;
-declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;
-declare function clearInterval(intervalId: NodeJS.Timer): void;
-declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any;
-declare function clearImmediate(immediateId: any): void;
-
-interface Console {
- assert(test?: boolean, message?: string, ...optionalParams: any[]): void;
- dir(value?: any, ...optionalParams: any[]): void;
- error(message?: any, ...optionalParams: any[]): void;
- info(message?: any, ...optionalParams: any[]): void;
- log(message?: any, ...optionalParams: any[]): void;
- time(timerName?: string): void;
- timeEnd(timerName?: string): void;
- trace(message?: any, ...optionalParams: any[]): void;
- warn(message?: any, ...optionalParams: any[]): void;
-}
-
-declare var Console: {
- prototype: Console;
- new(): Console;
-};
\ No newline at end of file
diff --git a/extensions/tasks/src/typings/refs.d.ts b/extensions/tasks/src/typings/refs.d.ts
deleted file mode 100644
index 6b027cbfa31..00000000000
--- a/extensions/tasks/src/typings/refs.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-///
-///
-///
-///
\ No newline at end of file
diff --git a/extensions/typescript/src/typescriptServiceClient.ts b/extensions/typescript/src/typescriptServiceClient.ts
index 358b3c44cbe..2eff6d138c3 100644
--- a/extensions/typescript/src/typescriptServiceClient.ts
+++ b/extensions/typescript/src/typescriptServiceClient.ts
@@ -225,7 +225,7 @@ export default class TypeScriptServiceClient implements ITypescriptServiceClient
return unknown;
}
let contents = fs.readFileSync(fileName).toString();
- let desc:any = null;
+ let desc = null;
try {
desc = JSON.parse(contents);
} catch(err) {
diff --git a/extensions/typescript/src/typings/node.additions.d.ts b/extensions/typescript/src/typings/node.additions.d.ts
index 834e4c251c1..5ffe3f54d66 100644
--- a/extensions/typescript/src/typings/node.additions.d.ts
+++ b/extensions/typescript/src/typings/node.additions.d.ts
@@ -9,29 +9,3 @@ declare function setInterval(callback: (...args: any[]) => void, ms: number, ...
declare function clearInterval(intervalId: NodeJS.Timer): void;
declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any;
declare function clearImmediate(immediateId: any): void;
-
-interface Console {
- assert(test?: boolean, message?: string, ...optionalParams: any[]): void;
- dir(value?: any, ...optionalParams: any[]): void;
- error(message?: any, ...optionalParams: any[]): void;
- info(message?: any, ...optionalParams: any[]): void;
- log(message?: any, ...optionalParams: any[]): void;
- time(timerName?: string): void;
- timeEnd(timerName?: string): void;
- trace(message?: any, ...optionalParams: any[]): void;
- warn(message?: any, ...optionalParams: any[]): void;
-}
-
-declare var Console: {
- prototype: Console;
- new(): Console;
-};
-
-declare var require: {
- toUrl(path: string): string;
- (moduleName: string): any;
- (dependencies: string[], callback: (...args: any[]) => any, errorback?: (err: any) => void): any;
- config(data: any): any;
- onError: Function;
- __$__nodeRequire(moduleName: string): T;
-};
\ No newline at end of file
diff --git a/src/vs/workbench/parts/tasks/common/taskSampleConfig.json b/src/vs/workbench/parts/tasks/common/taskSampleConfig.json
index 19c92397b15..1f312158d75 100644
--- a/src/vs/workbench/parts/tasks/common/taskSampleConfig.json
+++ b/src/vs/workbench/parts/tasks/common/taskSampleConfig.json
@@ -1,6 +1,190 @@
+// Available variables which can be used inside of strings.
+// ${workspaceRoot}: the root folder of the team
+// ${file}: the current opened file
+// ${fileBasename}: the current opened file's basename
+// ${fileDirname}: the current opened file's dirname
+// ${fileExtname}: the current opened file's extension
+// ${cwd}: the current working directory of the spawned process
+
+// A task runner that calls the Typescript compiler (tsc) and
+// Compiles a HelloWorld.ts program
{
- // See http://code.visualstudio.com/docs/editor/tasks
- // for the documentation about the tasks.json format
- // Use IntelliSense to insert predefined task snippets
- ts
-}
\ No newline at end of file
+ "version": "0.1.0",
+
+ // The command is tsc. Assumes that tsc has been installed using npm install -g typescript
+ "command": "tsc",
+
+ // The command is a shell script
+ "isShellCommand": true,
+
+ // Show the output window only if unrecognized errors occur.
+ "showOutput": "silent",
+
+ // args is the HelloWorld program to compile.
+ "args": ["HelloWorld.ts"],
+
+ // use the standard tsc problem matcher to find compile problems
+ // in the output.
+ "problemMatcher": "$tsc"
+}
+
+// A task runner that calls the Typescript compiler (tsc) and
+// compiles based on a tsconfig.json file that is present in
+// the root of the folder open in VSCode
+/*
+{
+ "version": "0.1.0",
+
+ // The command is tsc. Assumes that tsc has been installed using npm install -g typescript
+ "command": "tsc",
+
+ // The command is a shell script
+ "isShellCommand": true,
+
+ // Show the output window only if unrecognized errors occur.
+ "showOutput": "silent",
+
+ // Tell the tsc compiler to use the tsconfig.json from the open folder.
+ "args": ["-p", "."],
+
+ // use the standard tsc problem matcher to find compile problems
+ // in the output.
+ "problemMatcher": "$tsc"
+}
+*/
+
+// A task runner configuration for gulp. Gulp provides a less task
+// which compiles less to css.
+/*
+{
+ "version": "0.1.0",
+ "command": "gulp",
+ "isShellCommand": true,
+ "tasks": [
+ {
+ "taskName": "less",
+ // Make this the default build command.
+ "isBuildCommand": true,
+ // Show the output window only if unrecognized errors occur.
+ "showOutput": "silent",
+ // Use the standard less compilation problem matcher.
+ "problemMatcher": "$lessCompile"
+ }
+ ]
+}
+*/
+
+// Uncomment the following section to use jake to build a workspace
+// cloned from https://github.com/Microsoft/TypeScript.git
+/*
+{
+ "version": "0.1.0",
+ // Task runner is jake
+ "command": "jake",
+ // Need to be executed in shell / cmd
+ "isShellCommand": true,
+ "showOutput": "silent",
+ "tasks": [
+ {
+ // TS build command is local.
+ "taskName": "local",
+ // Make this the default build command.
+ "isBuildCommand": true,
+ // Show the output window only if unrecognized errors occur.
+ "showOutput": "silent",
+ // Use the redefined Typescript output problem matcher.
+ "problemMatcher": [
+ "$tsc"
+ ]
+ }
+ ]
+}
+*/
+
+// Uncomment the section below to use msbuild and generate problems
+// for csc, cpp, tsc and vb. The configuration assumes that msbuild
+// is available on the path and a solution file exists in the
+// workspace folder root.
+/*
+{
+ "version": "0.1.0",
+ "command": "msbuild",
+ "args": [
+ // Ask msbuild to generate full paths for file names.
+ "/property:GenerateFullPaths=true"
+ ],
+ "taskSelector": "/t:",
+ "showOutput": "silent",
+ "tasks": [
+ {
+ "taskName": "build",
+ // Show the output window only if unrecognized errors occur.
+ "showOutput": "silent",
+ // Use the standard MS compiler pattern to detect errors, warnings
+ // and infos in the output.
+ "problemMatcher": "$msCompile"
+ }
+ ]
+}
+*/
+
+// Uncomment the following section to use msbuild which compiles Typescript
+// and less files.
+/*
+{
+ "version": "0.1.0",
+ "command": "msbuild",
+ "args": [
+ // Ask msbuild to generate full paths for file names.
+ "/property:GenerateFullPaths=true"
+ ],
+ "taskSelector": "/t:",
+ "showOutput": "silent",
+ "tasks": [
+ {
+ "taskName": "build",
+ // Show the output window only if unrecognized errors occur.
+ "showOutput": "silent",
+ // Use the standard MS compiler pattern to detect errors, warnings
+ // and infos in the output.
+ "problemMatcher": [
+ "$msCompile",
+ "$lessCompile"
+ ]
+ }
+ ]
+}
+*/
+// A task runner example that defines a problemMatcher inline instead of using
+// a predefined one.
+/*
+{
+ "version": "0.1.0",
+ "command": "tsc",
+ "isShellCommand": true,
+ "args": ["HelloWorld.ts"],
+ "showOutput": "silent",
+ "problemMatcher": {
+ // The problem is owned by the typescript language service. Ensure that the problems
+ // are merged with problems produced by Visual Studio's language service.
+ "owner": "typescript",
+ // The file name for reported problems is relative to the current working directory.
+ "fileLocation": ["relative", "${cwd}"],
+ // The actual pattern to match problems in the output.
+ "pattern": {
+ // The regular expression. Matches HelloWorld.ts(2,10): error TS2339: Property 'logg' does not exist on type 'Console'.
+ "regexp": "^([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s*:\\s*(.*)$",
+ // The match group that denotes the file containing the problem.
+ "file": 1,
+ // The match group that denotes the problem location.
+ "location": 2,
+ // The match group that denotes the problem's severity. Can be omitted.
+ "severity": 3,
+ // The match group that denotes the problem code. Can be omitted.
+ "code": 4,
+ // The match group that denotes the problem's message.
+ "message": 5
+ }
+ }
+}
+*/
\ No newline at end of file
diff --git a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
index bf616113490..baab42c50f2 100644
--- a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
+++ b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
@@ -39,13 +39,10 @@ import { IConfigurationService, ConfigurationServiceEventTypes } from 'vs/platfo
import { IFileService, FileChangesEvent, FileChangeType, EventType as FileEventType } from 'vs/platform/files/common/files';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IPluginService } from 'vs/platform/plugins/common/plugins';
-import { IKeybindingService } from 'vs/platform/keybinding/common/keybindingService';
import { IModeService } from 'vs/editor/common/services/modeService';
import { IModelService } from 'vs/editor/common/services/modelService';
-import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
-
import jsonContributionRegistry = require('vs/platform/jsonschemas/common/jsonContributionRegistry');
import { IJSONSchema } from 'vs/base/common/jsonSchema';
@@ -151,12 +148,11 @@ class ConfigureTaskRunnerAction extends Action {
private contextService: IWorkspaceContextService;
private outputService: IOutputService;
private messageService: IMessageService;
- private keybindingService: IKeybindingService;
constructor(id: string, label: string, @IConfigurationService configurationService: IConfigurationService,
@IWorkbenchEditorService editorService: IWorkbenchEditorService, @IFileService fileService: IFileService,
@IWorkspaceContextService contextService: IWorkspaceContextService, @IOutputService outputService: IOutputService,
- @IMessageService messageService: IMessageService, @IKeybindingService keybindingService: IKeybindingService) {
+ @IMessageService messageService: IMessageService) {
super(id, label);
this.configurationService = configurationService;
@@ -165,13 +161,11 @@ class ConfigureTaskRunnerAction extends Action {
this.contextService = contextService;
this.outputService = outputService;
this.messageService = messageService;
- this.keybindingService = keybindingService;
}
public run(event?:any): Promise {
let sideBySide = !!(event && (event.ctrlKey || event.metaKey));
let autoDetectFailed = false;
- let fileCreated = false;
return this.fileService.resolveFile(this.contextService.toResource('.vscode/tasks.json')).then((success) => {
return success;
}, (err:any) => {
@@ -204,7 +198,6 @@ class ConfigureTaskRunnerAction extends Action {
});
}
return contentPromise.then((content) => {
- fileCreated = true;
return this.fileService.createFile(this.contextService.toResource('.vscode/tasks.json'), content);
});
});
@@ -215,19 +208,9 @@ class ConfigureTaskRunnerAction extends Action {
options: {
forceOpen: true
}
- }, sideBySide).then((editor) => {
- if (fileCreated) {
- let codeEditor: ICodeEditor = editor.getControl() as ICodeEditor;
- let position = { lineNumber: 5, column: 4 };
- codeEditor.revealPosition(position);
- codeEditor.setPosition(position);
- // Workaround for: https://github.com/Microsoft/vscode/issues/3121
- setTimeout(() => {
- this.keybindingService.executeCommand('editor.action.triggerSuggest');
- }, 300);
- }
+ }, sideBySide).then((value) => {
this.outputService.showOutput(TaskService.OutputChannel, true);
- return editor;
+ return value;
});
}, (error) => {
throw new Error(nls.localize('ConfigureTaskRunnerAction.failed', "Unable to create the 'tasks.json' file inside the '.vscode' folder. Consult the task output for details."));
@@ -470,7 +453,6 @@ class TaskService extends EventEmitter implements ITaskService {
private eventService: IEventService;
private modelService: IModelService;
private pluginService: IPluginService;
- private keybindingService: IKeybindingService;
private _taskSystemPromise: TPromise;
private _taskSystem: ITaskSystem;
@@ -485,8 +467,7 @@ class TaskService extends EventEmitter implements ITaskService {
@IFileService fileService:IFileService, @IWorkspaceContextService contextService: IWorkspaceContextService,
@ITelemetryService telemetryService: ITelemetryService, @ITextFileService textFileService:ITextFileService,
@ILifecycleService lifecycleService: ILifecycleService, @IEventService eventService: IEventService,
- @IModelService modelService: IModelService, @IPluginService pluginService: IPluginService,
- @IKeybindingService keybindingService: IKeybindingService) {
+ @IModelService modelService: IModelService, @IPluginService pluginService: IPluginService) {
super();
this.modeService = modeService;
@@ -502,7 +483,6 @@ class TaskService extends EventEmitter implements ITaskService {
this.eventService = eventService;
this.modelService = modelService;
this.pluginService = pluginService;
- this.keybindingService = keybindingService;
this.taskSystemListeners = [];
this.clearTaskSystemPromise = false;
@@ -641,7 +621,7 @@ class TaskService extends EventEmitter implements ITaskService {
public configureAction(): Action {
return new ConfigureTaskRunnerAction(ConfigureTaskRunnerAction.ID, ConfigureTaskRunnerAction.TEXT,
this.configurationService, this.editorService, this.fileService, this.contextService,
- this.outputService, this.messageService, this.keybindingService);
+ this.outputService, this.messageService);
}
public build(): TPromise {
@@ -770,7 +750,7 @@ class TaskService extends EventEmitter implements ITaskService {
if (needsConfig || needsTerminate) {
let closeAction = new CloseMessageAction();
let action = needsConfig
- ? this.configureAction()
+ ? new ConfigureTaskRunnerAction(ConfigureTaskRunnerAction.ID, ConfigureTaskRunnerAction.TEXT, this.configurationService, this.editorService, this.fileService, this.contextService, this.outputService, this.messageService)
: new TerminateAction(TerminateAction.ID, TerminateAction.TEXT, this, this.telemetryService);
closeAction.closeFunction = this.messageService.show(buildError.severity, { message: buildError.message, actions: [closeAction, action ] });