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

Formatting of async code aesthetics #1008

Closed
harry-dickson opened this issue Mar 26, 2021 · 2 comments
Closed

Formatting of async code aesthetics #1008

harry-dickson opened this issue Mar 26, 2021 · 2 comments

Comments

@harry-dickson
Copy link

Newbie dart programmer; Dart 2.12.2 with VSCode. This is mostly an FYI in case you think this is a problem.

My code is bad enough, but the formatter makes it worse imho, in particular the decision to linebreak and indent .signInWithEmailLink and the first .catchError

  void onLink(DynamicLinkEvent event) {
    var link = event.data?.link?.toString();
    if (link != null && _firebaseAuth.isSignInWithEmailLink(link)) {
      var url = Uri.parse(event.data.link.queryParameters['continueUrl']);
      var email = url.queryParameters['e'];
      if (email != null) {
        _firebaseAuth
            .signInWithEmailLink(  // <== urgh!
          email: email,
          emailLink: link,
        )
            .catchError(  // <== argh!
          (error) {
            print('Auth Error $error');
          },
          test: (e) => e is FirebaseAuthException,
        ).catchError(
          () {},
        );
      }
    }
  }

It annoyed me so much I did this :)

  void onLink(DynamicLinkEvent event) {
    var link = event.data?.link?.toString();
    if (link != null && _firebaseAuth.isSignInWithEmailLink(link)) {
      var url = Uri.parse(event.data.link.queryParameters['continueUrl']);
      var email = url.queryParameters['e'];
      if (email != null) {
        var f = _firebaseAuth.signInWithEmailLink(
          email: email,
          emailLink: link,
        );
        // [f] is a workaround for formatter ugliness
        f.catchError(
          (error) {
            print('Auth Error $error');
          },
          test: (e) => e is FirebaseAuthException,
        ).catchError(
          () {},
        );
      }
    }
  }
@munificent
Copy link
Member

This is mostly a consequence of the weird interaction between how trailing commas affect formatting and the formatting rules around lambdas in argument lists. If you remove the trailing commas, you get:

void onLink(DynamicLinkEvent event) {
  var link = event.data?.link?.toString();
  if (link != null && _firebaseAuth.isSignInWithEmailLink(link)) {
    var url = Uri.parse(event.data.link.queryParameters['continueUrl']);
    var email = url.queryParameters['e'];
    if (email != null) {
      _firebaseAuth
          .signInWithEmailLink(email: email, emailLink: link)
          .catchError((error) {
        print('Auth Error $error');
      }, test: (e) => e is FirebaseAuthException).catchError(() {});
    }
  }
}

I think that's a lot more reasonable. But I agree that the behavior in the presence of trailing commas is pretty bad. I'll leave this open to take a look at improving that.

@munificent
Copy link
Member

With the forthcoming tall style, it looks like:

  void onLink(DynamicLinkEvent event) {
    var link = event.data?.link?.toString();
    if (link != null && _firebaseAuth.isSignInWithEmailLink(link)) {
      var url = Uri.parse(event.data.link.queryParameters['continueUrl']);
      var email = url.queryParameters['e'];
      if (email != null) {
        _firebaseAuth
            .signInWithEmailLink(email: email, emailLink: link)
            .catchError((error) {
              print('Auth Error $error');
            }, test: (e) => e is FirebaseAuthException)
            .catchError(() {});
      }
    }
  }

That looks decent to me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants