@@ -6548,8 +6548,7 @@ namespace ts {
6548
6548
6549
6549
function parseTag ( indent : number ) {
6550
6550
Debug . assert ( token ( ) === SyntaxKind . AtToken ) ;
6551
- const atToken = < AtToken > createNode ( SyntaxKind . AtToken , scanner . getTokenPos ( ) ) ;
6552
- atToken . end = scanner . getTextPos ( ) ;
6551
+ const start = scanner . getTokenPos ( ) ;
6553
6552
nextJSDocToken ( ) ;
6554
6553
6555
6554
const tagName = parseJSDocIdentifierName ( /*message*/ undefined ) ;
@@ -6559,40 +6558,40 @@ namespace ts {
6559
6558
switch ( tagName . escapedText ) {
6560
6559
case "augments" :
6561
6560
case "extends" :
6562
- tag = parseAugmentsTag ( atToken , tagName ) ;
6561
+ tag = parseAugmentsTag ( start , tagName ) ;
6563
6562
break ;
6564
6563
case "class" :
6565
6564
case "constructor" :
6566
- tag = parseClassTag ( atToken , tagName ) ;
6565
+ tag = parseClassTag ( start , tagName ) ;
6567
6566
break ;
6568
6567
case "this" :
6569
- tag = parseThisTag ( atToken , tagName ) ;
6568
+ tag = parseThisTag ( start , tagName ) ;
6570
6569
break ;
6571
6570
case "enum" :
6572
- tag = parseEnumTag ( atToken , tagName ) ;
6571
+ tag = parseEnumTag ( start , tagName ) ;
6573
6572
break ;
6574
6573
case "arg" :
6575
6574
case "argument" :
6576
6575
case "param" :
6577
- return parseParameterOrPropertyTag ( atToken , tagName , PropertyLikeParse . Parameter , indent ) ;
6576
+ return parseParameterOrPropertyTag ( start , tagName , PropertyLikeParse . Parameter , indent ) ;
6578
6577
case "return" :
6579
6578
case "returns" :
6580
- tag = parseReturnTag ( atToken , tagName ) ;
6579
+ tag = parseReturnTag ( start , tagName ) ;
6581
6580
break ;
6582
6581
case "template" :
6583
- tag = parseTemplateTag ( atToken , tagName ) ;
6582
+ tag = parseTemplateTag ( start , tagName ) ;
6584
6583
break ;
6585
6584
case "type" :
6586
- tag = parseTypeTag ( atToken , tagName ) ;
6585
+ tag = parseTypeTag ( start , tagName ) ;
6587
6586
break ;
6588
6587
case "typedef" :
6589
- tag = parseTypedefTag ( atToken , tagName , indent ) ;
6588
+ tag = parseTypedefTag ( start , tagName , indent ) ;
6590
6589
break ;
6591
6590
case "callback" :
6592
- tag = parseCallbackTag ( atToken , tagName , indent ) ;
6591
+ tag = parseCallbackTag ( start , tagName , indent ) ;
6593
6592
break ;
6594
6593
default :
6595
- tag = parseUnknownTag ( atToken , tagName ) ;
6594
+ tag = parseUnknownTag ( start , tagName ) ;
6596
6595
break ;
6597
6596
}
6598
6597
@@ -6675,9 +6674,8 @@ namespace ts {
6675
6674
return comments . length === 0 ? undefined : comments . join ( "" ) ;
6676
6675
}
6677
6676
6678
- function parseUnknownTag ( atToken : AtToken , tagName : Identifier ) {
6679
- const result = < JSDocTag > createNode ( SyntaxKind . JSDocTag , atToken . pos ) ;
6680
- result . atToken = atToken ;
6677
+ function parseUnknownTag ( start : number , tagName : Identifier ) {
6678
+ const result = < JSDocTag > createNode ( SyntaxKind . JSDocTag , start ) ;
6681
6679
result . tagName = tagName ;
6682
6680
return finishNode ( result ) ;
6683
6681
}
@@ -6734,7 +6732,7 @@ namespace ts {
6734
6732
}
6735
6733
}
6736
6734
6737
- function parseParameterOrPropertyTag ( atToken : AtToken , tagName : Identifier , target : PropertyLikeParse , indent : number ) : JSDocParameterTag | JSDocPropertyTag {
6735
+ function parseParameterOrPropertyTag ( start : number , tagName : Identifier , target : PropertyLikeParse , indent : number ) : JSDocParameterTag | JSDocPropertyTag {
6738
6736
let typeExpression = tryParseTypeExpression ( ) ;
6739
6737
let isNameFirst = ! typeExpression ;
6740
6738
skipWhitespaceOrAsterisk ( ) ;
@@ -6747,15 +6745,14 @@ namespace ts {
6747
6745
}
6748
6746
6749
6747
const result = target === PropertyLikeParse . Property ?
6750
- < JSDocPropertyTag > createNode ( SyntaxKind . JSDocPropertyTag , atToken . pos ) :
6751
- < JSDocParameterTag > createNode ( SyntaxKind . JSDocParameterTag , atToken . pos ) ;
6752
- const comment = parseTagComments ( indent + scanner . getStartPos ( ) - atToken . pos ) ;
6748
+ < JSDocPropertyTag > createNode ( SyntaxKind . JSDocPropertyTag , start ) :
6749
+ < JSDocParameterTag > createNode ( SyntaxKind . JSDocParameterTag , start ) ;
6750
+ const comment = parseTagComments ( indent + scanner . getStartPos ( ) - start ) ;
6753
6751
const nestedTypeLiteral = target !== PropertyLikeParse . CallbackParameter && parseNestedTypeLiteral ( typeExpression , name , target , indent ) ;
6754
6752
if ( nestedTypeLiteral ) {
6755
6753
typeExpression = nestedTypeLiteral ;
6756
6754
isNameFirst = true ;
6757
6755
}
6758
- result . atToken = atToken ;
6759
6756
result . tagName = tagName ;
6760
6757
result . typeExpression = typeExpression ;
6761
6758
result . name = name ;
@@ -6789,33 +6786,30 @@ namespace ts {
6789
6786
}
6790
6787
}
6791
6788
6792
- function parseReturnTag ( atToken : AtToken , tagName : Identifier ) : JSDocReturnTag {
6789
+ function parseReturnTag ( start : number , tagName : Identifier ) : JSDocReturnTag {
6793
6790
if ( forEach ( tags , t => t . kind === SyntaxKind . JSDocReturnTag ) ) {
6794
6791
parseErrorAt ( tagName . pos , scanner . getTokenPos ( ) , Diagnostics . _0_tag_already_specified , tagName . escapedText ) ;
6795
6792
}
6796
6793
6797
- const result = < JSDocReturnTag > createNode ( SyntaxKind . JSDocReturnTag , atToken . pos ) ;
6798
- result . atToken = atToken ;
6794
+ const result = < JSDocReturnTag > createNode ( SyntaxKind . JSDocReturnTag , start ) ;
6799
6795
result . tagName = tagName ;
6800
6796
result . typeExpression = tryParseTypeExpression ( ) ;
6801
6797
return finishNode ( result ) ;
6802
6798
}
6803
6799
6804
- function parseTypeTag ( atToken : AtToken , tagName : Identifier ) : JSDocTypeTag {
6800
+ function parseTypeTag ( start : number , tagName : Identifier ) : JSDocTypeTag {
6805
6801
if ( forEach ( tags , t => t . kind === SyntaxKind . JSDocTypeTag ) ) {
6806
6802
parseErrorAt ( tagName . pos , scanner . getTokenPos ( ) , Diagnostics . _0_tag_already_specified , tagName . escapedText ) ;
6807
6803
}
6808
6804
6809
- const result = < JSDocTypeTag > createNode ( SyntaxKind . JSDocTypeTag , atToken . pos ) ;
6810
- result . atToken = atToken ;
6805
+ const result = < JSDocTypeTag > createNode ( SyntaxKind . JSDocTypeTag , start ) ;
6811
6806
result . tagName = tagName ;
6812
6807
result . typeExpression = parseJSDocTypeExpression ( /*mayOmitBraces*/ true ) ;
6813
6808
return finishNode ( result ) ;
6814
6809
}
6815
6810
6816
- function parseAugmentsTag ( atToken : AtToken , tagName : Identifier ) : JSDocAugmentsTag {
6817
- const result = < JSDocAugmentsTag > createNode ( SyntaxKind . JSDocAugmentsTag , atToken . pos ) ;
6818
- result . atToken = atToken ;
6811
+ function parseAugmentsTag ( start : number , tagName : Identifier ) : JSDocAugmentsTag {
6812
+ const result = < JSDocAugmentsTag > createNode ( SyntaxKind . JSDocAugmentsTag , start ) ;
6819
6813
result . tagName = tagName ;
6820
6814
result . class = parseExpressionWithTypeArgumentsForAugments ( ) ;
6821
6815
return finishNode ( result ) ;
@@ -6844,37 +6838,33 @@ namespace ts {
6844
6838
return node ;
6845
6839
}
6846
6840
6847
- function parseClassTag ( atToken : AtToken , tagName : Identifier ) : JSDocClassTag {
6848
- const tag = < JSDocClassTag > createNode ( SyntaxKind . JSDocClassTag , atToken . pos ) ;
6849
- tag . atToken = atToken ;
6841
+ function parseClassTag ( start : number , tagName : Identifier ) : JSDocClassTag {
6842
+ const tag = < JSDocClassTag > createNode ( SyntaxKind . JSDocClassTag , start ) ;
6850
6843
tag . tagName = tagName ;
6851
6844
return finishNode ( tag ) ;
6852
6845
}
6853
6846
6854
- function parseThisTag ( atToken : AtToken , tagName : Identifier ) : JSDocThisTag {
6855
- const tag = < JSDocThisTag > createNode ( SyntaxKind . JSDocThisTag , atToken . pos ) ;
6856
- tag . atToken = atToken ;
6847
+ function parseThisTag ( start : number , tagName : Identifier ) : JSDocThisTag {
6848
+ const tag = < JSDocThisTag > createNode ( SyntaxKind . JSDocThisTag , start ) ;
6857
6849
tag . tagName = tagName ;
6858
6850
tag . typeExpression = parseJSDocTypeExpression ( /*mayOmitBraces*/ true ) ;
6859
6851
skipWhitespace ( ) ;
6860
6852
return finishNode ( tag ) ;
6861
6853
}
6862
6854
6863
- function parseEnumTag ( atToken : AtToken , tagName : Identifier ) : JSDocEnumTag {
6864
- const tag = < JSDocEnumTag > createNode ( SyntaxKind . JSDocEnumTag , atToken . pos ) ;
6865
- tag . atToken = atToken ;
6855
+ function parseEnumTag ( start : number , tagName : Identifier ) : JSDocEnumTag {
6856
+ const tag = < JSDocEnumTag > createNode ( SyntaxKind . JSDocEnumTag , start ) ;
6866
6857
tag . tagName = tagName ;
6867
6858
tag . typeExpression = parseJSDocTypeExpression ( /*mayOmitBraces*/ true ) ;
6868
6859
skipWhitespace ( ) ;
6869
6860
return finishNode ( tag ) ;
6870
6861
}
6871
6862
6872
- function parseTypedefTag ( atToken : AtToken , tagName : Identifier , indent : number ) : JSDocTypedefTag {
6863
+ function parseTypedefTag ( start : number , tagName : Identifier , indent : number ) : JSDocTypedefTag {
6873
6864
const typeExpression = tryParseTypeExpression ( ) ;
6874
6865
skipWhitespaceOrAsterisk ( ) ;
6875
6866
6876
- const typedefTag = < JSDocTypedefTag > createNode ( SyntaxKind . JSDocTypedefTag , atToken . pos ) ;
6877
- typedefTag . atToken = atToken ;
6867
+ const typedefTag = < JSDocTypedefTag > createNode ( SyntaxKind . JSDocTypedefTag , start ) ;
6878
6868
typedefTag . tagName = tagName ;
6879
6869
typedefTag . fullName = parseJSDocTypeNameWithNamespace ( ) ;
6880
6870
typedefTag . name = getJSDocTypeAliasName ( typedefTag . fullName ) ;
@@ -6887,7 +6877,6 @@ namespace ts {
6887
6877
let child : JSDocTypeTag | JSDocPropertyTag | false ;
6888
6878
let jsdocTypeLiteral : JSDocTypeLiteral | undefined ;
6889
6879
let childTypeTag : JSDocTypeTag | undefined ;
6890
- const start = atToken . pos ;
6891
6880
while ( child = tryParse ( ( ) => parseChildPropertyTag ( indent ) ) ) {
6892
6881
if ( ! jsdocTypeLiteral ) {
6893
6882
jsdocTypeLiteral = < JSDocTypeLiteral > createNode ( SyntaxKind . JSDocTypeLiteral , start ) ;
@@ -6941,17 +6930,15 @@ namespace ts {
6941
6930
return typeNameOrNamespaceName ;
6942
6931
}
6943
6932
6944
- function parseCallbackTag ( atToken : AtToken , tagName : Identifier , indent : number ) : JSDocCallbackTag {
6945
- const callbackTag = createNode ( SyntaxKind . JSDocCallbackTag , atToken . pos ) as JSDocCallbackTag ;
6946
- callbackTag . atToken = atToken ;
6933
+ function parseCallbackTag ( start : number , tagName : Identifier , indent : number ) : JSDocCallbackTag {
6934
+ const callbackTag = createNode ( SyntaxKind . JSDocCallbackTag , start ) as JSDocCallbackTag ;
6947
6935
callbackTag . tagName = tagName ;
6948
6936
callbackTag . fullName = parseJSDocTypeNameWithNamespace ( ) ;
6949
6937
callbackTag . name = getJSDocTypeAliasName ( callbackTag . fullName ) ;
6950
6938
skipWhitespace ( ) ;
6951
6939
callbackTag . comment = parseTagComments ( indent ) ;
6952
6940
6953
6941
let child : JSDocParameterTag | false ;
6954
- const start = scanner . getStartPos ( ) ;
6955
6942
const jsdocSignature = createNode ( SyntaxKind . JSDocSignature , start ) as JSDocSignature ;
6956
6943
jsdocSignature . parameters = [ ] ;
6957
6944
while ( child = tryParse ( ( ) => parseChildParameterOrPropertyTag ( PropertyLikeParse . CallbackParameter , indent ) as JSDocParameterTag ) ) {
@@ -7039,16 +7026,15 @@ namespace ts {
7039
7026
7040
7027
function tryParseChildTag ( target : PropertyLikeParse , indent : number ) : JSDocTypeTag | JSDocPropertyTag | JSDocParameterTag | false {
7041
7028
Debug . assert ( token ( ) === SyntaxKind . AtToken ) ;
7042
- const atToken = < AtToken > createNode ( SyntaxKind . AtToken ) ;
7043
- atToken . end = scanner . getTextPos ( ) ;
7029
+ const start = scanner . getStartPos ( ) ;
7044
7030
nextJSDocToken ( ) ;
7045
7031
7046
7032
const tagName = parseJSDocIdentifierName ( ) ;
7047
7033
skipWhitespace ( ) ;
7048
7034
let t : PropertyLikeParse ;
7049
7035
switch ( tagName . escapedText ) {
7050
7036
case "type" :
7051
- return target === PropertyLikeParse . Property && parseTypeTag ( atToken , tagName ) ;
7037
+ return target === PropertyLikeParse . Property && parseTypeTag ( start , tagName ) ;
7052
7038
case "prop" :
7053
7039
case "property" :
7054
7040
t = PropertyLikeParse . Property ;
@@ -7064,10 +7050,10 @@ namespace ts {
7064
7050
if ( ! ( target & t ) ) {
7065
7051
return false ;
7066
7052
}
7067
- return parseParameterOrPropertyTag ( atToken , tagName , target , indent ) ;
7053
+ return parseParameterOrPropertyTag ( start , tagName , target , indent ) ;
7068
7054
}
7069
7055
7070
- function parseTemplateTag ( atToken : AtToken , tagName : Identifier ) : JSDocTemplateTag {
7056
+ function parseTemplateTag ( start : number , tagName : Identifier ) : JSDocTemplateTag {
7071
7057
// the template tag looks like '@template {Constraint} T,U,V'
7072
7058
let constraint : JSDocTypeExpression | undefined ;
7073
7059
if ( token ( ) === SyntaxKind . OpenBraceToken ) {
@@ -7085,8 +7071,7 @@ namespace ts {
7085
7071
typeParameters . push ( typeParameter ) ;
7086
7072
} while ( parseOptionalJsdoc ( SyntaxKind . CommaToken ) ) ;
7087
7073
7088
- const result = < JSDocTemplateTag > createNode ( SyntaxKind . JSDocTemplateTag , atToken . pos ) ;
7089
- result . atToken = atToken ;
7074
+ const result = < JSDocTemplateTag > createNode ( SyntaxKind . JSDocTemplateTag , start ) ;
7090
7075
result . tagName = tagName ;
7091
7076
result . constraint = constraint ;
7092
7077
result . typeParameters = createNodeArray ( typeParameters , typeParametersPos ) ;
0 commit comments