diff --git a/bindings/expressions.go b/bindings/expressions.go index 420b59e..8c675bb 100644 --- a/bindings/expressions.go +++ b/bindings/expressions.go @@ -177,6 +177,7 @@ type EnumMember struct { Name string // Value is allowed to be nil, which results in `undefined`. Value ExpressionType + SupportComments } func (*EnumMember) isNode() {} diff --git a/convert.go b/convert.go index e2eea0d..ae68df0 100644 --- a/convert.go +++ b/convert.go @@ -632,10 +632,15 @@ func (ts *Typescript) parse(obj types.Object) error { // type. However, the order types are parsed is not guaranteed, so we // add the enum to the Alias as a post-processing step. ts.updateNode(enumObjName.Ref(), func(n *typescriptNode) { - n.AddEnum(&bindings.EnumMember{ + member := &bindings.EnumMember{ Name: obj.Name(), Value: constValue, - }) + } + if ts.preserveComments { + cmts := ts.parsed.CommentForObject(obj) + member.AppendComments(cmts) + } + n.AddEnum(member) }) return nil case *types.Func: diff --git a/testdata/enums/enums.go b/testdata/enums/enums.go index c101673..5c0caa1 100644 --- a/testdata/enums/enums.go +++ b/testdata/enums/enums.go @@ -15,13 +15,16 @@ type ( const ( // EnumFoo is the "foo" value + // This comment should be preserved EnumFoo EnumString = "foo" + // EnumBar is the "bar" value EnumBar EnumString = "bar" EnumBaz EnumString = "baz" EnumQux EnumString = "qux" ) const ( + // EnumNumFoo is the number 5 EnumNumFoo EnumInt = 5 EnumNumBar EnumInt = 10 ) @@ -29,7 +32,8 @@ const ( const ( AudienceWorld Audience = "world" AudienceTenant Audience = "tenant" - AudienceTeam Audience = "team" + // AudienceTeam is the "team" value + AudienceTeam Audience = "team" ) // EmptyEnum references `time.Duration`, so the constant is considered an enum. diff --git a/testdata/enums/enums.ts b/testdata/enums/enums.ts index dd5d223..76bc778 100644 --- a/testdata/enums/enums.ts +++ b/testdata/enums/enums.ts @@ -2,6 +2,9 @@ // From enums/enums.go export enum Audience { + /** + * AudienceTeam is the "team" value + */ Team = "team", Tenant = "tenant", World = "world" @@ -10,6 +13,9 @@ export enum Audience { // From enums/enums.go export enum EnumInt { EnumNumBar = 10, + /** + * EnumNumFoo is the number 5 + */ EnumNumFoo = 5 } @@ -21,8 +27,15 @@ export type EnumSliceType = readonly EnumString[]; // From enums/enums.go export enum EnumString { + /** + * EnumBar is the "bar" value + */ EnumBar = "bar", EnumBaz = "baz", + /** + * EnumFoo is the "foo" value + * This comment should be preserved + */ EnumFoo = "foo", EnumQux = "qux" }