Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ESLint Config Migration: Fixing consistent-return linter warnings #1075

Merged
merged 1 commit into from
Aug 25, 2021

Conversation

filmaj
Copy link
Contributor

@filmaj filmaj commented Aug 23, 2021

Summary

This is a PR that should be merged into #1024 and incrementally addresses #842.

This PR is a separate approach to #1049: instead of turning off the consistent-return rule, here is my attempt at adhering to the rule.

Impact

Before

✖ 200 problems (11 errors, 189 warnings)

After

✖ 191 problems (2 errors, 189 warnings)

Requirements (place an x in each [ ])

@filmaj filmaj added the tests M-T: Testing work only label Aug 23, 2021
@filmaj filmaj self-assigned this Aug 23, 2021
@@ -695,6 +695,8 @@ export default class App {
} catch (error) {
this.logger.warn('Authorization of incoming event did not succeed. No listeners will be called.');
error.code = 'slack_bolt_authorization_error';
// disabling due to https://github.com/typescript-eslint/typescript-eslint/issues/1277
// eslint-disable-next-line consistent-return
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TL;DR typescript-eslint/typescript-eslint#1277 core eslint consistent-return is not type aware, and typescript-eslint has not implemented an extension to avoid this issue (functions that return Promise<void> are not honoured in terms of return type)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The clear comment about the reason here is really nice 👍

return processMiddleware(
listenerMiddleware,
listenerArgs as AnyMiddlewareArgs,
if (listener === undefined) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this part, we have to explicitly, instead of implicitly, return undefined in the case the listener is undefined. I like to nest/indent the exceptional case and return right away, which allows me to do further processing below this conditional nested one indent less. So that's what I did here. 🤷

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is fine.

@filmaj filmaj changed the title Fixing consistent-return linter warnings. ESLint Config Migration: Fixing consistent-return linter warnings Aug 23, 2021
Copy link
Member

@seratch seratch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for revising this! This pull request looks greater to me.

@@ -695,6 +695,8 @@ export default class App {
} catch (error) {
this.logger.warn('Authorization of incoming event did not succeed. No listeners will be called.');
error.code = 'slack_bolt_authorization_error';
// disabling due to https://github.com/typescript-eslint/typescript-eslint/issues/1277
// eslint-disable-next-line consistent-return
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The clear comment about the reason here is really nice 👍

return processMiddleware(
listenerMiddleware,
listenerArgs as AnyMiddlewareArgs,
if (listener === undefined) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is fine.

return reject(new ReceiverInconsistentStateError('The receiver cannot be stopped because it was not started.'));
}
this.server.close((error) => {
this.server?.close((error) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm. I assume ? was introduced because it no longer connects the check done above with the logic that follows. Can that addition be avoided if we added an else with the alternative path inside?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@misscoded so if I remove the ?, when compiling the code (and, in particular, when trying to run the tests via npm run mocha), I get this:

➜ npm run mocha

> @slack/bolt@3.5.0 mocha /Users/fmaj/src/bolt-js
> TS_NODE_PROJECT=tsconfig.json nyc mocha --config .mocharc.json "src/**/*.spec.ts"


/Users/fmaj/src/bolt-js/node_modules/ts-node/src/index.ts:434
    return new TSError(diagnosticText, diagnosticCodes)
           ^
TSError: ⨯ Unable to compile TypeScript:
src/receivers/ExpressReceiver.ts:342:7 - error TS2532: Object is possibly 'undefined'.

342       this.server.close((error) => {

... which is silly, since we have a check for undefined right before, but I guess because of the intervening Promise function scope, the TS compiler can't assume that the two scopes are executed in the same context / immediately after one another? Not sure.

If anyone has suggestions how to avoid this, I'd love to learn!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm.. ok! No suggestions here at the moment

return reject(new ReceiverInconsistentStateError('The receiver cannot be stopped because it was not started.'));
}
this.server.close((error) => {
this.server?.close((error) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment/question as stop() in the ExpressReceiver.ts

@filmaj filmaj merged commit e6b10eb into tslint-to-eslint Aug 25, 2021
@filmaj filmaj deleted the consistent-return-fixes branch August 25, 2021 18:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
tests M-T: Testing work only
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants