Skip to content

Conversation

@jtkiesel
Copy link
Contributor

@jtkiesel jtkiesel commented Jul 9, 2023

What changed with this PR:

Long lines containing type arguments (i.e. those that previously violated printWidth) are now broken on type arguments the way Prettier JavaScript does (on TypeScript).

Example

Input

class Example {

  <A extends ShortClassName & ShortClassName & ShortClassName & ShortClassName, B extends ShortClassName & ShortClassName & ShortClassName & ShortClassName & ShortClassName, C extends ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName>, ExtremelyLongAndObnoxiousClassName> & ExtremelyLongAndObnoxiousInterfaceName & ExtremelyLongAndObnoxiousInterfaceName & ExtremelyLongAndObnoxiousInterfaceName> void example(
    ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName> parameter,
    ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName>, ExtremelyLongAndObnoxiousClassName> parameter
  ) {
    ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName> variable;

    ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName>, ExtremelyLongAndObnoxiousClassName> variable;

    ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName>, ExtremelyLongAndObnoxiousClassName> variable =
      new MyExtremelyLongAndObnoxiousClassName<>();

    ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName>, ExtremelyLongAndObnoxiousClassName> variable =
      new MyExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName>, ExtremelyLongAndObnoxiousClassName>();

    ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName>, ExtremelyLongAndObnoxiousClassName> aParticularlyLongAndObnoxiousNameForIllustrativePurposes =
      new MyExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName>, ExtremelyLongAndObnoxiousClassName>();

    new MyExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName<ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName>, ExtremelyLongAndObnoxiousClassName>()
      .method();
  }
}

Output

class Example {

  <
    A extends ShortClassName & ShortClassName & ShortClassName & ShortClassName,
    B extends ShortClassName
      & ShortClassName
      & ShortClassName
      & ShortClassName
      & ShortClassName,
    C extends ExtremelyLongAndObnoxiousClassName<
      ExtremelyLongAndObnoxiousClassName<
        ExtremelyLongAndObnoxiousClassName,
        ExtremelyLongAndObnoxiousClassName
      >,
      ExtremelyLongAndObnoxiousClassName
    >
      & ExtremelyLongAndObnoxiousInterfaceName
      & ExtremelyLongAndObnoxiousInterfaceName
      & ExtremelyLongAndObnoxiousInterfaceName
  > void example(
    ExtremelyLongAndObnoxiousClassName<
      ExtremelyLongAndObnoxiousClassName
    > parameter,
    ExtremelyLongAndObnoxiousClassName<
      ExtremelyLongAndObnoxiousClassName<
        ExtremelyLongAndObnoxiousClassName,
        ExtremelyLongAndObnoxiousClassName
      >,
      ExtremelyLongAndObnoxiousClassName
    > parameter
  ) {
    ExtremelyLongAndObnoxiousClassName<
      ExtremelyLongAndObnoxiousClassName
    > variable;

    ExtremelyLongAndObnoxiousClassName<
      ExtremelyLongAndObnoxiousClassName<
        ExtremelyLongAndObnoxiousClassName,
        ExtremelyLongAndObnoxiousClassName
      >,
      ExtremelyLongAndObnoxiousClassName
    > variable;

    ExtremelyLongAndObnoxiousClassName<
      ExtremelyLongAndObnoxiousClassName<
        ExtremelyLongAndObnoxiousClassName,
        ExtremelyLongAndObnoxiousClassName
      >,
      ExtremelyLongAndObnoxiousClassName
    > variable = new MyExtremelyLongAndObnoxiousClassName<>();

    ExtremelyLongAndObnoxiousClassName<
      ExtremelyLongAndObnoxiousClassName<
        ExtremelyLongAndObnoxiousClassName,
        ExtremelyLongAndObnoxiousClassName
      >,
      ExtremelyLongAndObnoxiousClassName
    > variable = new MyExtremelyLongAndObnoxiousClassName<
      ExtremelyLongAndObnoxiousClassName<
        ExtremelyLongAndObnoxiousClassName,
        ExtremelyLongAndObnoxiousClassName
      >,
      ExtremelyLongAndObnoxiousClassName
    >();

    ExtremelyLongAndObnoxiousClassName<
      ExtremelyLongAndObnoxiousClassName<
        ExtremelyLongAndObnoxiousClassName,
        ExtremelyLongAndObnoxiousClassName
      >,
      ExtremelyLongAndObnoxiousClassName
    > aParticularlyLongAndObnoxiousNameForIllustrativePurposes =
      new MyExtremelyLongAndObnoxiousClassName<
        ExtremelyLongAndObnoxiousClassName<
          ExtremelyLongAndObnoxiousClassName,
          ExtremelyLongAndObnoxiousClassName
        >,
        ExtremelyLongAndObnoxiousClassName
      >();

    new MyExtremelyLongAndObnoxiousClassName<
      ExtremelyLongAndObnoxiousClassName<
        ExtremelyLongAndObnoxiousClassName,
        ExtremelyLongAndObnoxiousClassName
      >,
      ExtremelyLongAndObnoxiousClassName
    >()
      .method();
  }
}

Relative issues or prs:

None

@jtkiesel jtkiesel force-pushed the feat/break-on-type-arguments branch from 2c6b86c to b946ef0 Compare July 9, 2023 07:49
@jtkiesel jtkiesel force-pushed the feat/break-on-type-arguments branch from b946ef0 to 8764988 Compare July 10, 2023 07:48
@jtkiesel jtkiesel changed the title feat: break long variable declarations/assignments on type arguments feat: break long lines on type arguments Jul 10, 2023
@clementdessoude
Copy link
Contributor

LGTM ! Thanks @jtkiesel !

@clementdessoude clementdessoude merged commit 20da8ea into jhipster:main Jul 22, 2023
@jtkiesel jtkiesel deleted the feat/break-on-type-arguments branch July 22, 2023 07:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants