proposal-await-dictionary icon indicating copy to clipboard operation
proposal-await-dictionary copied to clipboard

Research existing code

Open acutmore opened this issue 2 years ago • 1 comments

We can search across existing code to both find examples of places where this proposal could have potentially helped, and also gauge how common it is.

If code is passing in a literal array to Promise.all this can be a good sign (low false positives) that the code is waiting for a static set of promises, as opposed to a variables length array of homogenous results.

Here's a SourceGraph query for [...] = await Promise.all([...]): https://sourcegraph.com/search?q=context:global+%28lang:JavaScript+or+lang:TypeScript%29++-file:test+-file:node_modules+%5B...%5D+%3D+await+Promise.all%28%5B...%5D%29&patternType=structural&sm=1&groupBy=repo

Some selected examples from the results:


https://github.com/mozilla/pdf.js/blob/ccb72073b0bef9e9809e3230c3cede34f41dc757/web/pdf_document_properties.js#L122-L138

// existing:
const [
    fileName,
    fileSize,
    creationDate,
    modificationDate,
    pageSize,
    isLinearized,
] = await Promise.all([
    this._fileNameLookup(),
    this.#parseFileSize(contentLength),
    this.#parseDate(info.CreationDate),
    this.#parseDate(info.ModDate),
    this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {
        return this.#parsePageSize(getPageSizeInches(pdfPage), pagesRotation);
    }),
    this.#parseLinearization(info.IsLinearized),
]);
// potentially with proposal:
const {
    fileName,
    fileSize,
    creationDate,
    modificationDate,
    pageSize,
    isLinearized,
} = await Promise.all({
    fileName : this._fileNameLookup(),
    fileSize: this.#parseFileSize(contentLength),
    creationDate: this.#parseDate(info.CreationDate),
    modificationDate: this.#parseDate(info.ModDate),
    pageSize: this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {
        return this.#parsePageSize(getPageSizeInches(pdfPage), pagesRotation);
    }),
    isLinearized: this.#parseLinearization(info.IsLinearized),
});

https://github.com/jupyterlab/jupyterlab/blob/ef485f16c67e6d1f2e83334d6813f94d626c39e5/packages/terminal/src/widget.ts#L604-L611

// current
const [xterm_, fitAddon_, renderer_, weblinksAddon_] = await Promise.all([
    import('xterm'),
    import('xterm-addon-fit'),
    supportWebGL
        ? import('xterm-addon-webgl')
        : import('xterm-addon-canvas'),
    import('xterm-addon-web-links')
]);
// potentially with proposal:
const {xterm_, fitAddon_, renderer_, weblinksAddon_} = await Promise.all({
    xterm_ : import('xterm'),
    fitAddon_: import('xterm-addon-fit'),
    renderer_: supportWebGL
        ? import('xterm-addon-webgl')
        : import('xterm-addon-canvas'),
    weblinksAddon_: import('xterm-addon-web-links')
});

https://github.com/NodeBB/NodeBB/blob/8744e4121eca1d2fc30226e05418c0f3e90a5522/src/groups/index.js#L123-L132

// current:
const [groupData, members, pending, invited, isMember, isPending, isInvited, isOwner] = await Promise.all([
    Groups.getGroupData(groupName),
    Groups.getOwnersAndMembers(groupName, options.uid, 0, stop),
    Groups.getPending(groupName),
    Groups.getInvites(groupName),
    Groups.isMember(options.uid, groupName),
    Groups.isPending(options.uid, groupName),
    Groups.isInvited(options.uid, groupName),
    Groups.ownership.isOwner(options.uid, groupName),
]);
// potentially with proposal:
const {groupData, members, pending, invited, isMember, isPending, isInvited, isOwner} = await Promise.all({
    groupData: Groups.getGroupData(groupName),
    members: Groups.getOwnersAndMembers(groupName, options.uid, 0, stop),
    pending: Groups.getPending(groupName),
    invited: Groups.getInvites(groupName),
    isMember: Groups.isMember(options.uid, groupName),
    isPending: Groups.isPending(options.uid, groupName),
    isInvited: Groups.isInvited(options.uid, groupName),
    isOwner: Groups.ownership.isOwner(options.uid, groupName),
});

acutmore avatar Jun 25 '23 15:06 acutmore

https://sourcegraph.com/search?q=context:global+%28lang:JavaScript%29+-file:test+-file:node_modules+await+Promise.all%28:%5B%5B_%5D%5D%2C+:%5B%5B_%5D%5D%29&patternType=structural&sm=1&groupBy=repo

cursory search for buggy calls to all turned up nothing, at least with 2 or 3 args. I don't know how to perform a variadic search with this syntax

ctcpip avatar Jul 12 '23 23:07 ctcpip