fix: correct JSDoc comment positioning in type literal members#217
Open
benpsnyder wants to merge 1 commit intosxzz:mainfrom
Open
fix: correct JSDoc comment positioning in type literal members#217benpsnyder wants to merge 1 commit intosxzz:mainfrom
benpsnyder wants to merge 1 commit intosxzz:mainfrom
Conversation
Single-line JSDoc comments on type alias members (e.g. `type B = {
/** comment */ foo: string }`) were rendered inline instead of on their
own line. This happened because Babel's generator only special-cases
`TSInterfaceBody` for comment newline insertion, not `TSTypeLiteral`.
When `loc` was deleted from AST nodes (needed for source map
correctness), Babel's generator fell through to a code path that skips
newlines before comments in type literals. The fix assigns synthetic
sequential line numbers to nodes with leading comments, which steers
Babel's generator into the loc-aware code path that correctly positions
comments on separate lines.
Closes sxzz#182
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Single-line JSDoc comments on type alias members get rendered inline instead of on their own line:
Interface members are unaffected — only
typealias object members have this issue.Root Cause
Babel's
@babel/generatorhas special-case newline handling for comments insideTSInterfaceBodybut notTSTypeLiteral(source). Whenlocis deleted from AST nodes (which the plugin needs for source map correctness — see e9d69ef), the generator falls through to a heuristic code path that skips newlines before single-line comments in type literals.Fix
After deleting
locfrom AST nodes, assign synthetic sequential line numbers to nodes that have leading comments. This steers Babel's generator into the loc-aware code path which correctly inserts newlines before comments regardless of the parent node type. The original comment column positions are preserved to maintain indentation.Related
declare modulespecifiers to output chunk paths #191 also modifyfake-js.ts— positional merge conflicts possible, no semantic overlapTest plan
jsdoc-memberstest fixture covering bothinterfaceandtypealias members with single-line and multi-line JSDoc commentsjsdoctest unchanged (no snapshot diff)