Skip to content

Commit

Permalink
fix(eslint-plugin): check optional chaining for floating promises (#4096
Browse files Browse the repository at this point in the history
)
  • Loading branch information
G-Rath committed Nov 11, 2021
1 parent f409726 commit d724777
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 1 deletion.
8 changes: 7 additions & 1 deletion packages/eslint-plugin/src/rules/no-floating-promises.ts
Expand Up @@ -65,7 +65,13 @@ export default util.createRule<Options, MessageId>({
return;
}

if (isUnhandledPromise(checker, node.expression)) {
let expression = node.expression;

if (expression.type === AST_NODE_TYPES.ChainExpression) {
expression = expression.expression;
}

if (isUnhandledPromise(checker, expression)) {
if (options.ignoreVoid) {
context.report({
node,
Expand Down
80 changes: 80 additions & 0 deletions packages/eslint-plugin/tests/rules/no-floating-promises.test.ts
Expand Up @@ -334,6 +334,28 @@ async function test() {
returnsPromise()?.finally(() => {});
return returnsPromise();
}
`,
`
const doSomething = async (
obj1: { a?: { b?: { c?: () => Promise<void> } } },
obj2: { a?: { b?: { c: () => Promise<void> } } },
obj3: { a?: { b: { c?: () => Promise<void> } } },
obj4: { a: { b: { c?: () => Promise<void> } } },
obj5: { a?: () => { b?: { c?: () => Promise<void> } } },
obj6?: { a: { b: { c?: () => Promise<void> } } },
callback?: () => Promise<void>,
): Promise<void> => {
await obj1.a?.b?.c?.();
await obj2.a?.b?.c();
await obj3.a?.b.c?.();
await obj4.a.b.c?.();
await obj5.a?.().b?.c?.();
await obj6?.a.b.c?.();
return callback?.();
};
void doSomething();
`,
// ignoreIIFE
{
Expand Down Expand Up @@ -414,6 +436,64 @@ async function test() {
},
],
},
{
code: `
const doSomething = async (
obj1: { a?: { b?: { c?: () => Promise<void> } } },
obj2: { a?: { b?: { c: () => Promise<void> } } },
obj3: { a?: { b: { c?: () => Promise<void> } } },
obj4: { a: { b: { c?: () => Promise<void> } } },
obj5: { a?: () => { b?: { c?: () => Promise<void> } } },
obj6?: { a: { b: { c?: () => Promise<void> } } },
callback?: () => Promise<void>,
): Promise<void> => {
obj1.a?.b?.c?.();
obj2.a?.b?.c();
obj3.a?.b.c?.();
obj4.a.b.c?.();
obj5.a?.().b?.c?.();
obj6?.a.b.c?.();
callback?.();
};
doSomething();
`,
errors: [
{
line: 11,
messageId: 'floatingVoid',
},
{
line: 12,
messageId: 'floatingVoid',
},
{
line: 13,
messageId: 'floatingVoid',
},
{
line: 14,
messageId: 'floatingVoid',
},
{
line: 15,
messageId: 'floatingVoid',
},
{
line: 16,
messageId: 'floatingVoid',
},
{
line: 18,
messageId: 'floatingVoid',
},
{
line: 21,
messageId: 'floatingVoid',
},
],
},
{
options: [{ ignoreVoid: true }],
code: `
Expand Down

0 comments on commit d724777

Please sign in to comment.