Skip to content

Commit

Permalink
Add no-async-promise-executor lint rule (denoland#4809)
Browse files Browse the repository at this point in the history
  • Loading branch information
disizali authored Apr 20, 2020
1 parent c1ec042 commit 437e35c
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 109 deletions.
3 changes: 2 additions & 1 deletion .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
"@typescript-eslint/ban-ts-ignore": ["off"],
"@typescript-eslint/no-empty-function": ["off"],
"no-return-await": "error",
"require-await": "error"
"require-await": "error",
"no-async-promise-executor": "error"
},
"overrides": [
{
Expand Down
49 changes: 23 additions & 26 deletions std/node/_fs/_fs_appendFile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,34 +21,31 @@ export function appendFile(
}

validateEncoding(options);

let rid = -1;
new Promise(async (resolve, reject) => {
try {
if (typeof pathOrRid === "number") {
rid = pathOrRid;
} else {
const mode: number | undefined = isFileOptions(options)
? options.mode
: undefined;
const flag: string | undefined = isFileOptions(options)
? options.flag
: undefined;

if (mode) {
//TODO rework once https://github.com/denoland/deno/issues/4017 completes
notImplemented("Deno does not yet support setting mode on create");
}
const file = await Deno.open(pathOrRid, getOpenOptions(flag));
rid = file.rid;
}

const buffer: Uint8Array = new TextEncoder().encode(data);
const buffer: Uint8Array = new TextEncoder().encode(data);
new Promise((resolve, reject) => {
if (typeof pathOrRid === "number") {
rid = pathOrRid;
Deno.write(rid, buffer).then(resolve).catch(reject);
} else {
const mode: number | undefined = isFileOptions(options)
? options.mode
: undefined;
const flag: string | undefined = isFileOptions(options)
? options.flag
: undefined;

await Deno.write(rid, buffer);
resolve();
} catch (err) {
reject(err);
if (mode) {
//TODO rework once https://github.com/denoland/deno/issues/4017 completes
notImplemented("Deno does not yet support setting mode on create");
}
Deno.open(pathOrRid, getOpenOptions(flag))
.then(({ rid: openedFileRid }) => {
rid = openedFileRid;
return Deno.write(openedFileRid, buffer);
})
.then(resolve)
.catch(reject);
}
})
.then(() => {
Expand Down
17 changes: 3 additions & 14 deletions std/node/_fs/_fs_chmod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,9 @@ export function chmod(
mode: string | number,
callback: CallbackWithError
): void {
new Promise(async (resolve, reject) => {
try {
await Deno.chmod(path, getResolvedMode(mode));
resolve();
} catch (err) {
reject(err);
}
})
.then(() => {
callback();
})
.catch((err) => {
callback(err);
});
Deno.chmod(path, getResolvedMode(mode))
.then(() => callback())
.catch(callback);
}

/**
Expand Down
17 changes: 3 additions & 14 deletions std/node/_fs/_fs_chown.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,9 @@ export function chown(
gid: number,
callback: CallbackWithError
): void {
new Promise(async (resolve, reject) => {
try {
await Deno.chown(path, uid, gid);
resolve();
} catch (err) {
reject(err);
}
})
.then(() => {
callback();
})
.catch((err) => {
callback(err);
});
Deno.chown(path, uid, gid)
.then(() => callback())
.catch(callback);
}

/**
Expand Down
17 changes: 3 additions & 14 deletions std/node/_fs/_fs_copy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,9 @@ export function copyFile(
destination: string,
callback: CallbackWithError
): void {
new Promise(async (resolve, reject) => {
try {
await Deno.copyFile(source, destination);
resolve();
} catch (err) {
reject(err);
}
})
.then(() => {
callback();
})
.catch((err) => {
callback(err);
});
Deno.copyFile(source, destination)
.then(() => callback())
.catch(callback);
}

export function copyFileSync(source: string, destination: string): void {
Expand Down
37 changes: 19 additions & 18 deletions std/node/_fs/_fs_dir.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import Dirent from "./_fs_dirent.ts";
import { assert } from "../../testing/asserts.ts";

export default class Dir {
private dirPath: string | Uint8Array;
Expand All @@ -17,25 +18,25 @@ export default class Dir {
}

read(callback?: Function): Promise<Dirent | null> {
return new Promise(async (resolve, reject) => {
try {
if (!this.asyncIterator) {
this.asyncIterator = Deno.readdir(this.path)[Symbol.asyncIterator]();
}

const result: Dirent | null = await (await this.asyncIterator?.next())
.value;
resolve(result ? result : null);

if (callback) {
callback(null, result ? result : null);
}
} catch (err) {
if (callback) {
callback(err, null);
}
reject(err);
return new Promise((resolve, reject) => {
if (!this.asyncIterator) {
this.asyncIterator = Deno.readdir(this.path)[Symbol.asyncIterator]();
}
assert(this.asyncIterator);
this.asyncIterator
.next()
.then(({ value }) => {
resolve(value ? value : null);
if (callback) {
callback(null, value ? value : null);
}
})
.catch((err) => {
if (callback) {
callback(err, null);
}
reject(err);
});
});
}

Expand Down
24 changes: 11 additions & 13 deletions std/node/_fs/_fs_exists.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,23 @@

type ExitsCallback = (exists: boolean) => void;

/* Deprecated in node api */

/**
* TODO: Also accept 'path' parameter as a Node polyfill Buffer or URL type once these
* are implemented. See https://github.com/denoland/deno/issues/3403
* Deprecated in node api
*/
export function exists(path: string, callback: ExitsCallback): void {
new Promise(async (resolve, reject) => {
try {
await Deno.lstat(path);
resolve();
} catch (err) {
reject(err);
}
})
Deno.lstat(path)
.then(() => {
callback(true);
})
.catch(() => {
callback(false);
});
.catch(() => callback(false));
}

/**
* TODO: Also accept 'path' parameter as a Node polyfill Buffer or URL type once these
* are implemented. See https://github.com/denoland/deno/issues/3403
*/
export function existsSync(path: string): boolean {
try {
Deno.lstatSync(path);
Expand Down
15 changes: 6 additions & 9 deletions std/node/_fs/_fs_mkdir.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
import { CallbackWithError } from "./_fs_common.ts";

type Path = string; // TODO path can also be a Buffer or URL.
/**
* TODO: Also accept 'path' parameter as a Node polyfill Buffer or URL type once these
* are implemented. See https://github.com/denoland/deno/issues/3403
*/
type Path = string;
type MkdirOptions =
| { recursive?: boolean; mode?: number | undefined }
| number
Expand Down Expand Up @@ -29,14 +33,7 @@ export function mkdir(
throw new Deno.errors.InvalidData(
"invalid recursive option , must be a boolean"
);
new Promise(async (resolve, reject) => {
try {
await Deno.mkdir(path, { recursive, mode });
resolve();
} catch (err) {
reject(err);
}
})
Deno.mkdir(path, { recursive, mode })
.then(() => {
if (callback && typeof callback == "function") {
callback();
Expand Down

0 comments on commit 437e35c

Please sign in to comment.