bug fixing

This commit is contained in:
Erich Gamma 2018-04-01 18:13:55 +02:00
parent 3d5f0b75af
commit 8f6206c7d0
2 changed files with 23 additions and 20 deletions

View file

@ -10,7 +10,7 @@ import {
TextDocument, ThemeIcon, TreeDataProvider, TreeItem, TreeItemCollapsibleState, Uri,
WorkspaceFolder, commands, debug, window, workspace
} from 'vscode';
import { NpmTaskDefinition, getPackageJsonUriFromTask, getScripts, isWorkspaceFolder, getPackageManager } from './tasks';
import { NpmTaskDefinition, getPackageJsonUriFromTask, getScripts, isWorkspaceFolder, getPackageManager, getTaskName } from './tasks';
class Folder extends TreeItem {
packages: PackageJSON[] = [];
@ -94,7 +94,6 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
private _onDidChangeTreeData: EventEmitter<TreeItem | null> = new EventEmitter<TreeItem | null>();
readonly onDidChangeTreeData: Event<TreeItem | null> = this._onDidChangeTreeData.event;
constructor(context: ExtensionContext, taskProvider: TaskProvider, localize: any) {
const subscriptions = context.subscriptions;
this.taskProvider = taskProvider;
@ -106,9 +105,12 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
subscriptions.push(commands.registerCommand('npm.refresh', this.refresh, this));
}
private async scriptIsValid(scripts: any, task: Task): Promise<boolean> {
if (scripts[task.name]) {
return true;
private scriptIsValid(scripts: any, task: Task): boolean {
for (const script in scripts) {
let label = getTaskName(script, task.definition.path);
if (task.name === label) {
return true;
}
}
return false;
}
@ -118,7 +120,7 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
let uri = getPackageJsonUriFromTask(task);
let scripts = await getScripts(uri!, this.localize);
if (!await this.scriptIsValid(scripts, task)) {
if (!this.scriptIsValid(scripts, task)) {
this.scriptNotValid(task);
return;
}
@ -139,7 +141,7 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
let uri = getPackageJsonUriFromTask(task);
let scripts = await getScripts(uri!, this.localize);
if (!await this.scriptIsValid(scripts, task)) {
if (!this.scriptIsValid(scripts, task)) {
this.scriptNotValid(task);
return;
}
@ -249,12 +251,13 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider<TreeItem> {
folders.set(each.scope.name, folder);
}
let definition: NpmTaskDefinition = <NpmTaskDefinition>each.definition;
let path = definition.path ? definition.path : '';
packageJson = packages.get(path);
let relativePath = definition.path ? definition.path : '';
let fullPath = path.join(each.scope.name, relativePath);
packageJson = packages.get(fullPath);
if (!packageJson) {
packageJson = new PackageJSON(folder, path);
packageJson = new PackageJSON(folder, relativePath);
folder.addPackage(packageJson);
packages.set(path, packageJson);
packages.set(fullPath, packageJson);
}
let script = new NpmScript(this.extensionContext, packageJson, each);
packageJson.addScript(script);

View file

@ -129,14 +129,14 @@ async function provideNpmScriptsForFolder(localize: any, packageJsonUri: Uri): P
return result;
}
function createTask(script: string, cmd: string, folder: WorkspaceFolder, packageJsonUri: Uri, matcher?: any): Task {
function getTaskName(script: string, file: string) {
if (file.length) {
return `${script} - ${file.substring(0, file.length - 1)}`;
}
return script;
export function getTaskName(script: string, relativePath: string | undefined) {
if (relativePath && relativePath.length) {
return `${script} - ${relativePath.substring(0, relativePath.length - 1)}`;
}
return script;
}
function createTask(script: string, cmd: string, folder: WorkspaceFolder, packageJsonUri: Uri, matcher?: any): Task {
function getCommandLine(folder: WorkspaceFolder, cmd: string): string {
let packageManager = getPackageManager(folder);
@ -177,7 +177,7 @@ export function getPackageJsonUriFromTask(task: Task): Uri | null {
return null;
}
export async function exists(file: string): Promise<boolean> {
async function exists(file: string): Promise<boolean> {
return new Promise<boolean>((resolve, _reject) => {
fs.exists(file, (value) => {
resolve(value);
@ -185,7 +185,7 @@ export async function exists(file: string): Promise<boolean> {
});
}
export async function readFile(file: string): Promise<string> {
async function readFile(file: string): Promise<string> {
return new Promise<string>((resolve, reject) => {
fs.readFile(file, (err, data) => {
if (err) {