Add no-async-promise-executor lint rule (#4809)

This commit is contained in:
Ali Hasani 2020-04-20 13:59:37 +04:30 committed by GitHub
parent c1ec042a00
commit 437e35ca52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 69 additions and 108 deletions

View File

@ -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": [
{

View File

@ -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;
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;
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;
if (mode) {
//TODO rework once https://github.com/denoland/deno/issues/4017 completes
notImplemented("Deno does not yet support setting mode on create");
}
const buffer: Uint8Array = new TextEncoder().encode(data);
await Deno.write(rid, buffer);
resolve();
} catch (err) {
reject(err);
Deno.open(pathOrRid, getOpenOptions(flag))
.then(({ rid: openedFileRid }) => {
rid = openedFileRid;
return Deno.write(openedFileRid, buffer);
})
.then(resolve)
.catch(reject);
}
})
.then(() => {

View File

@ -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);
}
/**

View File

@ -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);
}
/**

View File

@ -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 {

View File

@ -1,4 +1,5 @@
import Dirent from "./_fs_dirent.ts";
import { assert } from "../../testing/asserts.ts";
export default class Dir {
private dirPath: string | Uint8Array;
@ -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);
});
});
}

View File

@ -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);

View File

@ -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
@ -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();