Skip to content

Commit

Permalink
fixes #3122: Add snippet support to tasks.json
Browse files Browse the repository at this point in the history
  • Loading branch information
dbaeumer committed Feb 18, 2016
1 parent 054734f commit 8004d27
Show file tree
Hide file tree
Showing 9 changed files with 218 additions and 197 deletions.
21 changes: 21 additions & 0 deletions extensions/tasks/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"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": {
}
}
101 changes: 101 additions & 0 deletions extensions/tasks/src/tasksMain.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/*---------------------------------------------------------------------------------------------
* 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;
}
9 changes: 9 additions & 0 deletions extensions/tasks/src/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noLib": true,
"sourceMap": true,
"outDir": "../out"
}
}
28 changes: 28 additions & 0 deletions extensions/tasks/src/typings/node.additions.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*---------------------------------------------------------------------------------------------
* 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;
};
9 changes: 9 additions & 0 deletions extensions/tasks/src/typings/refs.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

/// <reference path='../../../../src/vs/vscode.d.ts'/>
/// <reference path='../../../../src/typings/mocha.d.ts'/>
/// <reference path='../../../../extensions/node.d.ts'/>
/// <reference path='../../../../extensions/lib.core.d.ts'/>
2 changes: 1 addition & 1 deletion extensions/typescript/src/typescriptServiceClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ export default class TypeScriptServiceClient implements ITypescriptServiceClient
return unknown;
}
let contents = fs.readFileSync(fileName).toString();
let desc = null;
let desc:any = null;
try {
desc = JSON.parse(contents);
} catch(err) {
Expand Down
19 changes: 18 additions & 1 deletion extensions/typescript/src/typings/node.additions.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,21 @@ 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;
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;
};
Loading

0 comments on commit 8004d27

Please sign in to comment.