Skip to content

Commit 2903fc5

Browse files
committed
More loose build and test task detection
1 parent 8e0d8cf commit 2903fc5

4 files changed

Lines changed: 93 additions & 51 deletions

File tree

extensions/grunt/src/main.ts

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,26 @@ interface GruntTaskKind extends vscode.TaskKind {
8989
file?: string;
9090
}
9191

92+
const buildNames: string[] = ['build', 'compile', 'watch'];
93+
function isBuildTask(name: string): boolean {
94+
for (let buildName of buildNames) {
95+
if (name.indexOf(buildName) !== -1) {
96+
return true;
97+
}
98+
}
99+
return false;
100+
}
101+
102+
const testNames: string[] = ['test'];
103+
function isTestTask(name: string): boolean {
104+
for (let testName of testNames) {
105+
if (name.indexOf(testName) !== -1) {
106+
return true;
107+
}
108+
}
109+
return false;
110+
}
111+
92112
async function getGruntTasks(): Promise<vscode.Task[]> {
93113
let workspaceRoot = vscode.workspace.rootPath;
94114
let emptyTasks: vscode.Task[] = [];
@@ -119,9 +139,6 @@ async function getGruntTasks(): Promise<vscode.Task[]> {
119139
}
120140
let result: vscode.Task[] = [];
121141
if (stdout) {
122-
let buildTask: { task: vscode.Task | undefined, rank: number } = { task: undefined, rank: 0 };
123-
let testTask: { task: vscode.Task | undefined, rank: number } = { task: undefined, rank: 0 };
124-
125142
// grunt lists tasks as follows (description is wrapped into a new line if too long):
126143
// ...
127144
// Available tasks
@@ -162,25 +179,15 @@ async function getGruntTasks(): Promise<vscode.Task[]> {
162179
: new vscode.Task(kind, taskName, new vscode.ShellExecution(`${command} "${taskName}"`));
163180
result.push(task);
164181
let lowerCaseTaskName = taskName.toLowerCase();
165-
if (lowerCaseTaskName === 'build') {
166-
buildTask = { task, rank: 2 };
167-
} else if (lowerCaseTaskName.indexOf('build') !== -1 && buildTask.rank < 1) {
168-
buildTask = { task, rank: 1 };
169-
} else if (lowerCaseTaskName === 'test') {
170-
testTask = { task, rank: 2 };
171-
} else if (lowerCaseTaskName.indexOf('test') !== -1 && testTask.rank < 1) {
172-
testTask = { task, rank: 1 };
182+
if (isBuildTask(lowerCaseTaskName)) {
183+
task.group = vscode.TaskGroup.Build;
184+
} else if (isTestTask(lowerCaseTaskName)) {
185+
task.group = vscode.TaskGroup.Test;
173186
}
174187
}
175188
}
176189
}
177190
}
178-
if (buildTask.task) {
179-
buildTask.task.group = vscode.TaskGroup.Build;
180-
}
181-
if (testTask.task) {
182-
testTask.task.group = vscode.TaskGroup.Test;
183-
}
184191
}
185192
return result;
186193
} catch (err) {

extensions/gulp/src/main.ts

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,26 @@ interface GulpTaskKind extends vscode.TaskKind {
8989
file?: string;
9090
}
9191

92+
const buildNames: string[] = ['build', 'compile', 'watch'];
93+
function isBuildTask(name: string): boolean {
94+
for (let buildName of buildNames) {
95+
if (name.indexOf(buildName) !== -1) {
96+
return true;
97+
}
98+
}
99+
return false;
100+
}
101+
102+
const testNames: string[] = ['test'];
103+
function isTestTask(name: string): boolean {
104+
for (let testName of testNames) {
105+
if (name.indexOf(testName) !== -1) {
106+
return true;
107+
}
108+
}
109+
return false;
110+
}
111+
92112
async function getGulpTasks(): Promise<vscode.Task[]> {
93113
let workspaceRoot = vscode.workspace.rootPath;
94114
let emptyTasks: vscode.Task[] = [];
@@ -122,8 +142,6 @@ async function getGulpTasks(): Promise<vscode.Task[]> {
122142
}
123143
let result: vscode.Task[] = [];
124144
if (stdout) {
125-
let buildTask: { task: vscode.Task | undefined, rank: number } = { task: undefined, rank: 0 };
126-
let testTask: { task: vscode.Task | undefined, rank: number } = { task: undefined, rank: 0 };
127145
let lines = stdout.split(/\r{0,1}\n/);
128146
for (let line of lines) {
129147
if (line.length === 0) {
@@ -136,22 +154,12 @@ async function getGulpTasks(): Promise<vscode.Task[]> {
136154
let task = new vscode.Task(kind, line, new vscode.ShellExecution(`${gulpCommand} ${line}`));
137155
result.push(task);
138156
let lowerCaseLine = line.toLowerCase();
139-
if (lowerCaseLine === 'build') {
140-
buildTask = { task, rank: 2 };
141-
} else if (lowerCaseLine.indexOf('build') !== -1 && buildTask.rank < 1) {
142-
buildTask = { task, rank: 1 };
143-
} else if (lowerCaseLine === 'test') {
144-
testTask = { task, rank: 2 };
145-
} else if (lowerCaseLine.indexOf('test') !== -1 && testTask.rank < 1) {
146-
testTask = { task, rank: 1 };
157+
if (isBuildTask(lowerCaseLine)) {
158+
task.group = vscode.TaskGroup.Build;
159+
} else if (isTestTask(lowerCaseLine)) {
160+
task.group = vscode.TaskGroup.Test;
147161
}
148162
}
149-
if (buildTask.task) {
150-
buildTask.task.group = vscode.TaskGroup.Build;
151-
}
152-
if (testTask.task) {
153-
testTask.task.group = vscode.TaskGroup.Test;
154-
}
155163
}
156164
return result;
157165
} catch (err) {

extensions/jake/src/main.ts

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,26 @@ interface JakeTaskKind extends vscode.TaskKind {
8989
file?: string;
9090
}
9191

92+
const buildNames: string[] = ['build', 'compile', 'watch'];
93+
function isBuildTask(name: string): boolean {
94+
for (let buildName of buildNames) {
95+
if (name.indexOf(buildName) !== -1) {
96+
return true;
97+
}
98+
}
99+
return false;
100+
}
101+
102+
const testNames: string[] = ['test'];
103+
function isTestTask(name: string): boolean {
104+
for (let testName of testNames) {
105+
if (name.indexOf(testName) !== -1) {
106+
return true;
107+
}
108+
}
109+
return false;
110+
}
111+
92112
async function getJakeTasks(): Promise<vscode.Task[]> {
93113
let workspaceRoot = vscode.workspace.rootPath;
94114
let emptyTasks: vscode.Task[] = [];
@@ -122,8 +142,6 @@ async function getJakeTasks(): Promise<vscode.Task[]> {
122142
}
123143
let result: vscode.Task[] = [];
124144
if (stdout) {
125-
let buildTask: { task: vscode.Task | undefined, rank: number } = { task: undefined, rank: 0 };
126-
let testTask: { task: vscode.Task | undefined, rank: number } = { task: undefined, rank: 0 };
127145
let lines = stdout.split(/\r{0,1}\n/);
128146
for (let line of lines) {
129147
if (line.length === 0) {
@@ -140,23 +158,13 @@ async function getJakeTasks(): Promise<vscode.Task[]> {
140158
let task = new vscode.Task(kind, taskName, new vscode.ShellExecution(`${jakeCommand} ${taskName}`));
141159
result.push(task);
142160
let lowerCaseLine = line.toLowerCase();
143-
if (lowerCaseLine === 'build') {
144-
buildTask = { task, rank: 2 };
145-
} else if (lowerCaseLine.indexOf('build') !== -1 && buildTask.rank < 1) {
146-
buildTask = { task, rank: 1 };
147-
} else if (lowerCaseLine === 'test') {
148-
testTask = { task, rank: 2 };
149-
} else if (lowerCaseLine.indexOf('test') !== -1 && testTask.rank < 1) {
150-
testTask = { task, rank: 1 };
161+
if (isBuildTask(lowerCaseLine)) {
162+
task.group = vscode.TaskGroup.Build;
163+
} else if (isTestTask(lowerCaseLine)) {
164+
task.group = vscode.TaskGroup.Test;
151165
}
152166
}
153167
}
154-
if (buildTask.task) {
155-
buildTask.task.group = vscode.TaskGroup.Build;
156-
}
157-
if (testTask.task) {
158-
testTask.task.group = vscode.TaskGroup.Test;
159-
}
160168
}
161169
return result;
162170
} catch (err) {

extensions/npm/src/main.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,25 @@ interface NpmTaskKind extends vscode.TaskKind {
6767
file?: string;
6868
}
6969

70+
const buildNames: string[] = ['build', 'compile', 'watch'];
71+
function isBuildTask(name: string): boolean {
72+
for (let buildName of buildNames) {
73+
if (name.indexOf(buildName) !== -1) {
74+
return true;
75+
}
76+
}
77+
return false;
78+
}
79+
80+
const testNames: string[] = ['test'];
81+
function isTestTask(name: string): boolean {
82+
for (let testName of testNames) {
83+
if (name === testName) {
84+
return true;
85+
}
86+
}
87+
return false;
88+
}
7089

7190
async function getNpmScriptsAsTasks(): Promise<vscode.Task[]> {
7291
let workspaceRoot = vscode.workspace.rootPath;
@@ -96,9 +115,9 @@ async function getNpmScriptsAsTasks(): Promise<vscode.Task[]> {
96115
};
97116
const task = new vscode.Task(kind, `run ${each}`, new vscode.ShellExecution(`npm run ${each}`));
98117
const lowerCaseTaskName = each.toLowerCase();
99-
if (lowerCaseTaskName === 'build') {
118+
if (isBuildTask(lowerCaseTaskName)) {
100119
task.group = vscode.TaskGroup.Build;
101-
} else if (lowerCaseTaskName === 'test') {
120+
} else if (isTestTask(lowerCaseTaskName)) {
102121
task.group = vscode.TaskGroup.Test;
103122
}
104123
result.push(task);

0 commit comments

Comments
 (0)