@@ -5,10 +5,10 @@ namespace ts {
55 export interface CommentWriter {
66 reset ( ) : void ;
77 setSourceFile ( sourceFile : SourceFile ) : void ;
8- getLeadingComments ( range : Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean ) : CommentRange [ ] ;
8+ getLeadingComments ( range : Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean , getCustomCommentRangeForNodeCallback ?: ( node : Node ) => TextRange ) : CommentRange [ ] ;
99 getLeadingComments ( range : TextRange ) : CommentRange [ ] ;
1010 getLeadingCommentsOfPosition ( pos : number ) : CommentRange [ ] ;
11- getTrailingComments ( range : Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean ) : CommentRange [ ] ;
11+ getTrailingComments ( range : Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean , getCustomCommentRangeForNodeCallback ?: ( node : Node ) => TextRange ) : CommentRange [ ] ;
1212 getTrailingComments ( range : TextRange ) : CommentRange [ ] ;
1313 getTrailingCommentsOfPosition ( pos : number ) : CommentRange [ ] ;
1414 emitLeadingComments ( range : TextRange , comments : CommentRange [ ] ) : void ;
@@ -43,9 +43,9 @@ namespace ts {
4343 return {
4444 reset,
4545 setSourceFile,
46- getLeadingComments ( range : TextRange , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean ) : CommentRange [ ] { return undefined ; } ,
46+ getLeadingComments ( range : TextRange , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean , getCustomCommentRangeForNodeCallback ?: ( node : Node ) => TextRange ) : CommentRange [ ] { return undefined ; } ,
4747 getLeadingCommentsOfPosition ( pos : number ) : CommentRange [ ] { return undefined ; } ,
48- getTrailingComments ( range : TextRange , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean ) : CommentRange [ ] { return undefined ; } ,
48+ getTrailingComments ( range : TextRange , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean , getCustomCommentRangeForNodeCallback ?: ( node : Node ) => TextRange ) : CommentRange [ ] { return undefined ; } ,
4949 getTrailingCommentsOfPosition ( pos : number ) : CommentRange [ ] { return undefined ; } ,
5050 emitLeadingComments ( range : TextRange , comments : CommentRange [ ] ) : void { } ,
5151 emitTrailingComments ( range : TextRange , comments : CommentRange [ ] ) : void { } ,
@@ -77,9 +77,9 @@ namespace ts {
7777 emitTrailingDetachedComments
7878 } ;
7979
80- function getLeadingComments ( range : Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean ) : CommentRange [ ] ;
80+ function getLeadingComments ( range : Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean , getCustomCommentRangeForNodeCallback ?: ( node : Node ) => TextRange ) : CommentRange [ ] ;
8181 function getLeadingComments ( range : TextRange ) : CommentRange [ ] ;
82- function getLeadingComments ( range : TextRange | Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean ) {
82+ function getLeadingComments ( range : TextRange | Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean , getCustomCommentRangeForNodeCallback ?: ( node : Node ) => TextRange ) {
8383 if ( shouldSkipCommentsForNodeCallback && shouldSkipCommentsForNodeCallback ( < Node > range ) ) {
8484 // If the node will not be emitted in JS, remove all the comments (normal,
8585 // pinned and `///`) associated with the node, unless it is a triple slash
@@ -100,6 +100,10 @@ namespace ts {
100100 return undefined ;
101101 }
102102
103+ if ( getCustomCommentRangeForNodeCallback ) {
104+ range = getCustomCommentRangeForNodeCallback ( < Node > range ) || range ;
105+ }
106+
103107 return getLeadingCommentsOfPosition ( range . pos ) ;
104108 }
105109
@@ -119,13 +123,17 @@ namespace ts {
119123 return false ;
120124 }
121125
122- function getTrailingComments ( range : Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean ) : CommentRange [ ] ;
126+ function getTrailingComments ( range : Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean , getCustomCommentRangeForNodeCallback ?: ( node : Node ) => TextRange ) : CommentRange [ ] ;
123127 function getTrailingComments ( range : TextRange ) : CommentRange [ ] ;
124- function getTrailingComments ( range : TextRange | Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean ) {
128+ function getTrailingComments ( range : TextRange | Node , shouldSkipCommentsForNodeCallback ?: ( node : Node ) => boolean , getCustomCommentRangeForNodeCallback ?: ( node : Node ) => TextRange ) {
125129 if ( shouldSkipCommentsForNodeCallback && shouldSkipCommentsForNodeCallback ( < Node > range ) ) {
126130 return undefined ;
127131 }
128132
133+ if ( getCustomCommentRangeForNodeCallback ) {
134+ range = getCustomCommentRangeForNodeCallback ( < Node > range ) || range ;
135+ }
136+
129137 return getTrailingCommentsOfPosition ( range . end ) ;
130138 }
131139
0 commit comments