Skip to content

fix(dts): ngAcceptInputType_* types drop some comments ngtsc keeps #506

Description

@Brooooooklyn

#496 prints the transform's parameter type into .d.ts. It keeps a single-line block comment in front of a list element. ngtsc keeps more than that, and in some U+2028/U+2029 cases prints the comment twice. Only the comments in the .d.ts text differ. The type is the same.

Repro (each line is the parameter type of @Input({transform: (v: <TYPE>) => 1}) a)

# <TYPE> in source OXC (#504 tip) ngtsc 22.1.7
a string /** doc */ string string /** doc */
b string | number /** doc */ string | number string | number /** doc */
c \n /** doc */\n string (comment on its own line) string \n /** doc */\n string
d string | /* a\n b */ number string | number string | /* a\n b */ number
e Array</* a\n b */ string> Array<string> Array</* a\n b */ string>
f Array<
/* c */\nstring | number> Array<string | number> Array</* c */ /* c */ string | number>
g Array<
/* c */\nstring | number> Array<string | number> Array</* c */ /* c */ string | number>

Cases where they already match: Array</* c */ string>, string /* keep */ \| number, /* a\n b */ string (both drop it), string /* a\n b */ (both drop it), and { a: 1; // x
 b: ... }.

Full source for case a:

import {Directive, Input} from '@angular/core';
@Directive({selector: '[d]'})
export class D {
  @Input({transform: (v: string /** doc */) => 1}) a = 0;
}

Where

crates/oxc_angular_compiler/src/directive/dts_type.rs (added in #496): leading_comments / same_line_comments. Only the comments on the same line in front of a list element are kept. Trailing comments, comments on their own line and comments that span lines are dropped.

On main?

No. Main prints unknown for these fields. This gap comes with #496.

Direction

Copy the rules of TypeScript's emitter for leading and trailing comments on type nodes, including the U+2028/U+2029 line-break cases. Test against ngtsc output.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions