Skip to content

Commit 5812527

Browse files
committed
Adjusts source map emit for members
1 parent 6e9eb35 commit 5812527

14 files changed

Lines changed: 426 additions & 381 deletions

File tree

src/compiler/binder.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1989,7 +1989,7 @@ namespace ts {
19891989
case SyntaxKind.ObjectBindingPattern:
19901990
case SyntaxKind.ArrayBindingPattern:
19911991
// These nodes are ES6 syntax.
1992-
transformFlags = TransformFlags.AssertES6;
1992+
transformFlags = TransformFlags.AssertES6 | TransformFlags.ContainsBindingPattern;
19931993
break;
19941994

19951995
case SyntaxKind.Decorator:
@@ -2068,9 +2068,14 @@ namespace ts {
20682068
return computeVariableDeclaration(<VariableDeclaration>node, subtreeFlags);
20692069

20702070
case SyntaxKind.VariableDeclarationList:
2071+
excludeFlags = TransformFlags.VariableDeclarationListExcludes;
2072+
if (subtreeFlags & TransformFlags.ContainsBindingPattern) {
2073+
transformFlags |= TransformFlags.AssertES6;
2074+
}
2075+
20712076
// If a VariableDeclarationList is `let` or `const`, then it is ES6 syntax.
20722077
if (node.flags & NodeFlags.BlockScoped) {
2073-
transformFlags = TransformFlags.AssertES6 | TransformFlags.ContainsBlockScopedBinding;
2078+
transformFlags |= TransformFlags.AssertES6 | TransformFlags.ContainsBlockScopedBinding;
20742079
}
20752080

20762081
break;
@@ -2172,7 +2177,7 @@ namespace ts {
21722177
// A GetAccessor or SetAccessor is TypeScript syntax if it is either abstract,
21732178
// or has a decorator.
21742179
if ((<AccessorDeclaration>node).body === undefined
2175-
|| hasModifier(node, ModifierFlags.Abstract)
2180+
|| hasModifier(node, ModifierFlags.Async | ModifierFlags.Abstract)
21762181
|| subtreeFlags & TransformFlags.ContainsDecorators) {
21772182
transformFlags = TransformFlags.AssertTypeScript;
21782183
}
@@ -2279,11 +2284,11 @@ namespace ts {
22792284

22802285
// If a parameter has an initializer, a binding pattern or a dotDotDot token, then
22812286
// it is ES6 syntax and its container must emit default value assignments or parameter destructuring downlevel.
2282-
if (isDefined(node.initializer) || isDefined(node.dotDotDotToken) || isBindingPattern(node.name)) {
2287+
if (subtreeFlags & TransformFlags.ContainsBindingPattern || isDefined(node.initializer) || isDefined(node.dotDotDotToken)) {
22832288
transformFlags |= TransformFlags.AssertES6 | TransformFlags.ContainsDefaultValueAssignments;
22842289
}
22852290

2286-
return updateTransformFlags(node, subtreeFlags, transformFlags, TransformFlags.None);
2291+
return updateTransformFlags(node, subtreeFlags, transformFlags, TransformFlags.ParameterExcludes);
22872292
}
22882293

22892294
function computeParenthesizedExpression(node: ParenthesizedExpression, subtreeFlags: TransformFlags) {
@@ -2426,7 +2431,7 @@ namespace ts {
24262431

24272432
// A VariableDeclaration with a binding pattern is ES6 syntax.
24282433
if (isBindingPattern((<VariableDeclaration>node).name)) {
2429-
transformFlags = TransformFlags.AssertES6;
2434+
transformFlags = TransformFlags.AssertES6 | TransformFlags.ContainsBindingPattern;
24302435
}
24312436

24322437
return updateTransformFlags(node, subtreeFlags, transformFlags, TransformFlags.None);
@@ -2446,6 +2451,10 @@ namespace ts {
24462451
transformFlags = TransformFlags.AssertES6 | TransformFlags.AssertTypeScript;
24472452
}
24482453

2454+
if (node.declarationList.transformFlags & TransformFlags.ContainsBindingPattern) {
2455+
transformFlags |= TransformFlags.AssertES6;
2456+
}
2457+
24492458
return updateTransformFlags(node, subtreeFlags, transformFlags, TransformFlags.None);
24502459
}
24512460

src/compiler/comments.ts

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ namespace ts {
55
export interface CommentWriter {
66
reset(): void;
77
setSourceFile(sourceFile: SourceFile): void;
8-
getLeadingComments(range: Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomCommentRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[];
8+
getLeadingComments(range: Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomTextRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[];
99
getLeadingComments(range: TextRange): CommentRange[];
1010
getLeadingCommentsOfPosition(pos: number): CommentRange[];
11-
getTrailingComments(range: Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomCommentRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[];
11+
getTrailingComments(range: Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomTextRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[];
1212
getTrailingComments(range: TextRange): CommentRange[];
1313
getTrailingCommentsOfPosition(pos: number): CommentRange[];
14+
emitLeadingComments(range: Node, comments: CommentRange[], getCustomTextRangeForNodeCallback?: (node: Node) => TextRange): void;
1415
emitLeadingComments(range: TextRange, comments: CommentRange[]): void;
1516
emitTrailingComments(range: TextRange, comments: CommentRange[]): void;
1617
emitLeadingDetachedComments(range: TextRange): void;
@@ -43,11 +44,11 @@ namespace ts {
4344
return {
4445
reset,
4546
setSourceFile,
46-
getLeadingComments(range: TextRange, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomCommentRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[] { return undefined; },
47+
getLeadingComments(range: TextRange, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomTextRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[] { return undefined; },
4748
getLeadingCommentsOfPosition(pos: number): CommentRange[] { return undefined; },
48-
getTrailingComments(range: TextRange, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomCommentRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[] { return undefined; },
49+
getTrailingComments(range: TextRange, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomTextRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[] { return undefined; },
4950
getTrailingCommentsOfPosition(pos: number): CommentRange[] { return undefined; },
50-
emitLeadingComments(range: TextRange, comments: CommentRange[]): void { },
51+
emitLeadingComments(range: Node | TextRange, comments: CommentRange[], getCustomTextRangeForNodeCallback?: (node: Node) => TextRange): void { },
5152
emitTrailingComments(range: TextRange, comments: CommentRange[]): void { },
5253
emitLeadingDetachedComments,
5354
emitTrailingDetachedComments(node: TextRange, contextNode?: Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean): void {}
@@ -78,11 +79,11 @@ namespace ts {
7879
};
7980

8081
function getLeadingComments(range: TextRange): CommentRange[];
81-
function getLeadingComments(node: Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomCommentRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[];
82-
function getLeadingComments(nodeOrRange: TextRange | Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomCommentRangeForNodeCallback?: (node: Node) => TextRange) {
82+
function getLeadingComments(node: Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomTextRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[];
83+
function getLeadingComments(nodeOrRange: TextRange | Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomTextRangeForNodeCallback?: (node: Node) => TextRange) {
8384
let range = nodeOrRange;
84-
if (getCustomCommentRangeForNodeCallback) {
85-
range = getCustomCommentRangeForNodeCallback(<Node>nodeOrRange) || range;
85+
if (getCustomTextRangeForNodeCallback) {
86+
range = getCustomTextRangeForNodeCallback(<Node>nodeOrRange) || range;
8687
}
8788

8889
if (shouldSkipCommentsForNodeCallback && shouldSkipCommentsForNodeCallback(<Node>nodeOrRange)) {
@@ -125,15 +126,15 @@ namespace ts {
125126
}
126127

127128
function getTrailingComments(range: TextRange): CommentRange[];
128-
function getTrailingComments(node: Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomCommentRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[];
129-
function getTrailingComments(nodeOrRange: TextRange | Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomCommentRangeForNodeCallback?: (node: Node) => TextRange) {
129+
function getTrailingComments(node: Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomTextRangeForNodeCallback?: (node: Node) => TextRange): CommentRange[];
130+
function getTrailingComments(nodeOrRange: TextRange | Node, shouldSkipCommentsForNodeCallback?: (node: Node) => boolean, getCustomTextRangeForNodeCallback?: (node: Node) => TextRange) {
130131
let range = <TextRange>nodeOrRange;
131132
if (shouldSkipCommentsForNodeCallback && shouldSkipCommentsForNodeCallback(<Node>nodeOrRange)) {
132133
return undefined;
133134
}
134135

135-
if (getCustomCommentRangeForNodeCallback) {
136-
range = getCustomCommentRangeForNodeCallback(<Node>nodeOrRange) || range;
136+
if (getCustomTextRangeForNodeCallback) {
137+
range = getCustomTextRangeForNodeCallback(<Node>nodeOrRange) || range;
137138
}
138139

139140
return getTrailingCommentsOfPosition(range.end);
@@ -161,11 +162,20 @@ namespace ts {
161162
return consumeCommentRanges(comments);
162163
}
163164

164-
function emitLeadingComments(range: TextRange, comments: CommentRange[]) {
165-
emitNewLineBeforeLeadingComments(currentLineMap, writer, range, comments);
165+
function emitLeadingComments(range: Node, comments: CommentRange[], getCustomTextRangeForNodeCallback?: (node: Node) => TextRange): void;
166+
function emitLeadingComments(range: TextRange, comments: CommentRange[]): void;
167+
function emitLeadingComments(nodeOrRange: Node | TextRange, comments: CommentRange[], getCustomTextRangeForNodeCallback?: (node: Node) => TextRange) {
168+
if (comments && comments.length > 0) {
169+
let range = <TextRange>nodeOrRange;
170+
if (getCustomTextRangeForNodeCallback) {
171+
range = getCustomTextRangeForNodeCallback(<Node>nodeOrRange);
172+
}
173+
174+
emitNewLineBeforeLeadingComments(currentLineMap, writer, range, comments);
166175

167-
// Leading comments are emitted at /*leading comment1 */space/*leading comment*/space
168-
emitComments(currentText, currentLineMap, writer, comments, /*leadingSeparator*/ false, /*trailingSeparator*/ true, newLine, writeComment);
176+
// Leading comments are emitted at /*leading comment1 */space/*leading comment*/space
177+
emitComments(currentText, currentLineMap, writer, comments, /*leadingSeparator*/ false, /*trailingSeparator*/ true, newLine, writeComment);
178+
}
169179
}
170180

171181
function emitTrailingComments(range: TextRange, comments: CommentRange[]) {

0 commit comments

Comments
 (0)