Skip to content

Allow omitting parentheses for Expression.asA(Expression other) #1140

Open

Description

@Robbendebiene

Expression.asA(Expression other) always wraps the code into parentheses. While this is a good default it is not always necessary. The problem for me is that the generated code triggers the linter rule unnecessary_parenthesis in our CI. Unfortunately dart_style auto fixes does not support the removal of unnecessary parenthesis.

My suggestion would be to have an optional parameter.
the following:

https://github.com/dart-lang/code_builder/blob/006790d8f3245124cc322bdf50376536ba28d85c/lib/src/specs/expression.dart#L68-L73

becomes

  Expression asA(Expression other, { bool parenthesized = true }) {
     final exp = BinaryExpression._( expression, other,  'as'));
     return parenthesized
        ? ParenthesizedExpression._(exp)
        : exp
  }

Activity

  1. natebosch commented on Nov 9, 2023

    @natebosch
    Member

    We typically recommend avoiding that type of style lint for generated code. As mentioned in #828 readability is not a goal for the generated output from this package. This is a relatively easy change though, and most of the complexity stays in the calling code deciding what value to pass.

    @srawlins do you have any opinions on adding this option?

  2. srawlins commented on Nov 9, 2023

    @srawlins
    Member

    Yeah I think that supporting a parenthesized parameter everywhere (it's not just asA right?) would add a fair amount of complexity.

    I recommend using // ignore_for_file: type=lint for generated files. See https://dart.dev/tools/analysis#suppressing-rules-for-a-file.

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions