Skip to content

Commit a8edf50

Browse files
authored
finishNode returns its node parameter (#1523)
1 parent 6d4ae18 commit a8edf50

File tree

2 files changed

+216
-514
lines changed

2 files changed

+216
-514
lines changed

internal/parser/jsdoc.go

Lines changed: 37 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,7 @@ func (p *Parser) parseJSDocTypeExpression(mayOmitBraces bool) *ast.Node {
8383
p.parseExpectedJSDoc(ast.KindCloseBraceToken)
8484
}
8585

86-
result := p.factory.NewJSDocTypeExpression(t)
87-
p.finishNode(result, pos)
88-
return result
86+
return p.finishNode(p.factory.NewJSDocTypeExpression(t), pos)
8987
}
9088

9189
func (p *Parser) parseJSDocNameReference() *ast.Node {
@@ -96,16 +94,13 @@ func (p *Parser) parseJSDocNameReference() *ast.Node {
9694
for p.token == ast.KindPrivateIdentifier {
9795
p.scanner.ReScanHashToken() // rescan #id as # id
9896
p.nextTokenJSDoc() // then skip the #
99-
entityName = p.factory.NewQualifiedName(entityName, p.parseIdentifier())
100-
p.finishNode(entityName, p2)
97+
entityName = p.finishNode(p.factory.NewQualifiedName(entityName, p.parseIdentifier()), p2)
10198
}
10299
if hasBrace {
103100
p.parseExpectedJSDoc(ast.KindCloseBraceToken)
104101
}
105102

106-
result := p.factory.NewJSDocNameReference(entityName)
107-
p.finishNode(result, pos)
108-
return result
103+
return p.finishNode(p.factory.NewJSDocNameReference(entityName), pos)
109104
}
110105

111106
// Pass end=-1 to parse the text to the end
@@ -258,8 +253,7 @@ loop:
258253
if linkEnd == start {
259254
comments = removeLeadingNewlines(comments)
260255
}
261-
jsdocText := p.factory.NewJSDocText(p.stringSlicePool.Clone(comments))
262-
p.finishNodeWithEnd(jsdocText, linkEnd, commentEnd)
256+
jsdocText := p.finishNodeWithEnd(p.factory.NewJSDocText(p.stringSlicePool.Clone(comments)), linkEnd, commentEnd)
263257
commentParts = append(commentParts, jsdocText, link)
264258
comments = comments[:0]
265259
linkEnd = p.scanner.TokenEnd()
@@ -287,8 +281,7 @@ loop:
287281

288282
if len(comments) > 0 {
289283
comments[len(comments)-1] = strings.TrimRightFunc(comments[len(comments)-1], unicode.IsSpace)
290-
jsdocText := p.factory.NewJSDocText(p.stringSlicePool.Clone(comments))
291-
p.finishNodeWithEnd(jsdocText, linkEnd, commentsPos)
284+
jsdocText := p.finishNodeWithEnd(p.factory.NewJSDocText(p.stringSlicePool.Clone(comments)), linkEnd, commentsPos)
292285
commentParts = append(commentParts, jsdocText)
293286
}
294287

@@ -305,8 +298,7 @@ loop:
305298
p.newNodeList(core.NewTextRange(start, commentsPos), commentParts),
306299
tagsNodeList,
307300
)
308-
p.finishNodeWithEnd(jsdocComment, fullStart, end)
309-
return jsdocComment
301+
return p.finishNodeWithEnd(jsdocComment, fullStart, end)
310302
}
311303

312304
func removeLeadingNewlines(comments []string) []string {
@@ -532,14 +524,13 @@ loop:
532524
linkStart := p.scanner.TokenEnd() - 1
533525
link := p.parseJSDocLink(linkStart)
534526
if link != nil {
535-
text := p.factory.NewJSDocText(p.stringSlicePool.Clone(comments))
536527
var commentStart int
537528
if linkEnd > -1 {
538529
commentStart = linkEnd
539530
} else {
540531
commentStart = commentsPos
541532
}
542-
p.finishNodeWithEnd(text, commentStart, commentEnd)
533+
text := p.finishNodeWithEnd(p.factory.NewJSDocText(p.stringSlicePool.Clone(comments)), commentStart, commentEnd)
543534
parts = append(parts, text)
544535
parts = append(parts, link)
545536
comments = comments[:0]
@@ -593,8 +584,7 @@ loop:
593584
} else {
594585
commentStart = commentsPos
595586
}
596-
text := p.factory.NewJSDocText(p.stringSlicePool.Clone(comments))
597-
p.finishNode(text, commentStart)
587+
text := p.finishNode(p.factory.NewJSDocText(p.stringSlicePool.Clone(comments)), commentStart)
598588
parts = append(parts, text)
599589
}
600590

@@ -631,8 +621,7 @@ func (p *Parser) parseJSDocLink(start int) *ast.Node {
631621
default:
632622
create = p.factory.NewJSDocLinkPlain(name, text)
633623
}
634-
p.finishNodeWithEnd(create, start, p.scanner.TokenEnd())
635-
return create
624+
return p.finishNodeWithEnd(create, start, p.scanner.TokenEnd())
636625
}
637626

638627
func (p *Parser) parseJSDocLinkName() *ast.Node {
@@ -647,15 +636,13 @@ func (p *Parser) parseJSDocLinkName() *ast.Node {
647636
} else {
648637
right = p.parseIdentifierName()
649638
}
650-
name = p.factory.NewQualifiedName(name, right)
651-
p.finishNode(name, pos)
639+
name = p.finishNode(p.factory.NewQualifiedName(name, right), pos)
652640
}
653641

654642
for p.token == ast.KindPrivateIdentifier {
655643
p.scanner.ReScanHashToken()
656644
p.nextTokenJSDoc()
657-
name = p.factory.NewQualifiedName(name, p.parseIdentifier())
658-
p.finishNode(name, pos)
645+
name = p.finishNode(p.factory.NewQualifiedName(name, p.parseIdentifier()), pos)
659646
}
660647
return name
661648
}
@@ -678,9 +665,7 @@ func isJSDocLinkTag(kind string) bool {
678665
}
679666

680667
func (p *Parser) parseUnknownTag(start int, tagName *ast.IdentifierNode, indent int, indentText string) *ast.Node {
681-
tag := p.factory.NewJSDocUnknownTag(tagName, p.parseTrailingTagComments(start, p.nodePos(), indent, indentText))
682-
p.finishNode(tag, start)
683-
return tag
668+
return p.finishNode(p.factory.NewJSDocUnknownTag(tagName, p.parseTrailingTagComments(start, p.nodePos(), indent, indentText)), start)
684669
}
685670

686671
func (p *Parser) tryParseTypeExpression() *ast.Node {
@@ -757,8 +742,7 @@ func (p *Parser) parseParameterOrPropertyTag(start int, tagName *ast.IdentifierN
757742
} else {
758743
result = p.factory.NewJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment)
759744
}
760-
p.finishNode(result, start)
761-
return result
745+
return p.finishNode(result, start)
762746
}
763747

764748
func (p *Parser) parseNestedTypeLiteral(typeExpression *ast.Node, name *ast.EntityName, target propertyLikeParse, indent int) *ast.Node {
@@ -779,11 +763,8 @@ func (p *Parser) parseNestedTypeLiteral(typeExpression *ast.Node, name *ast.Enti
779763
}
780764
}
781765
if children != nil {
782-
literal := p.factory.NewJSDocTypeLiteral(children, typeExpression.Type().Kind == ast.KindArrayType)
783-
p.finishNode(literal, pos)
784-
result := p.factory.NewJSDocTypeExpression(literal)
785-
p.finishNode(result, pos)
786-
return result
766+
literal := p.finishNode(p.factory.NewJSDocTypeLiteral(children, typeExpression.Type().Kind == ast.KindArrayType), pos)
767+
return p.finishNode(p.factory.NewJSDocTypeExpression(literal), pos)
787768
}
788769
}
789770
return nil
@@ -795,9 +776,7 @@ func (p *Parser) parseReturnTag(previousTags []*ast.Node, start int, tagName *as
795776
}
796777

797778
typeExpression := p.tryParseTypeExpression()
798-
result := p.factory.NewJSDocReturnTag(tagName, typeExpression, p.parseTrailingTagComments(start, p.nodePos(), indent, indentText))
799-
p.finishNode(result, start)
800-
return result
779+
return p.finishNode(p.factory.NewJSDocReturnTag(tagName, typeExpression, p.parseTrailingTagComments(start, p.nodePos(), indent, indentText)), start)
801780
}
802781

803782
// pass indent=-1 to skip parsing trailing comments (as when a type tag is nested in a typedef)
@@ -811,9 +790,7 @@ func (p *Parser) parseTypeTag(previousTags []*ast.Node, start int, tagName *ast.
811790
if indent != -1 {
812791
comments = p.parseTrailingTagComments(start, p.nodePos(), indent, indentText)
813792
}
814-
result := p.factory.NewJSDocTypeTag(tagName, typeExpression, comments)
815-
p.finishNode(result, start)
816-
return result
793+
return p.finishNode(p.factory.NewJSDocTypeTag(tagName, typeExpression, comments), start)
817794
}
818795

819796
func (p *Parser) parseSeeTag(start int, tagName *ast.IdentifierNode, indent int, indentText string) *ast.Node {
@@ -825,31 +802,23 @@ func (p *Parser) parseSeeTag(start int, tagName *ast.IdentifierNode, indent int,
825802
nameExpression = p.parseJSDocNameReference()
826803
}
827804
comments := p.parseTrailingTagComments(start, p.nodePos(), indent, indentText)
828-
result := p.factory.NewJSDocSeeTag(tagName, nameExpression, comments)
829-
p.finishNode(result, start)
830-
return result
805+
return p.finishNode(p.factory.NewJSDocSeeTag(tagName, nameExpression, comments), start)
831806
}
832807

833808
func (p *Parser) parseImplementsTag(start int, tagName *ast.IdentifierNode, margin int, indentText string) *ast.Node {
834809
className := p.parseExpressionWithTypeArgumentsForAugments()
835-
result := p.factory.NewJSDocImplementsTag(tagName, className, p.parseTrailingTagComments(start, p.nodePos(), margin, indentText))
836-
p.finishNode(result, start)
837-
return result
810+
return p.finishNode(p.factory.NewJSDocImplementsTag(tagName, className, p.parseTrailingTagComments(start, p.nodePos(), margin, indentText)), start)
838811
}
839812

840813
func (p *Parser) parseAugmentsTag(start int, tagName *ast.IdentifierNode, margin int, indentText string) *ast.Node {
841814
className := p.parseExpressionWithTypeArgumentsForAugments()
842-
result := p.factory.NewJSDocAugmentsTag(tagName, className, p.parseTrailingTagComments(start, p.nodePos(), margin, indentText))
843-
p.finishNode(result, start)
844-
return result
815+
return p.finishNode(p.factory.NewJSDocAugmentsTag(tagName, className, p.parseTrailingTagComments(start, p.nodePos(), margin, indentText)), start)
845816
}
846817

847818
func (p *Parser) parseSatisfiesTag(start int, tagName *ast.IdentifierNode, margin int, indentText string) *ast.Node {
848819
typeExpression := p.parseJSDocTypeExpression(false)
849820
comments := p.parseTrailingTagComments(start, p.nodePos(), margin, indentText)
850-
result := p.factory.NewJSDocSatisfiesTag(tagName, typeExpression, comments)
851-
p.finishNode(result, start)
852-
return result
821+
return p.finishNode(p.factory.NewJSDocSatisfiesTag(tagName, typeExpression, comments), start)
853822
}
854823

855824
func (p *Parser) parseImportTag(start int, tagName *ast.IdentifierNode, margin int, indentText string) *ast.Node {
@@ -865,9 +834,7 @@ func (p *Parser) parseImportTag(start int, tagName *ast.IdentifierNode, margin i
865834
attributes := p.tryParseImportAttributes()
866835

867836
comments := p.parseTrailingTagComments(start, p.nodePos(), margin, indentText)
868-
result := p.factory.NewJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comments)
869-
p.finishNode(result, start)
870-
return result
837+
return p.finishNode(p.factory.NewJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comments), start)
871838
}
872839

873840
func (p *Parser) parseExpressionWithTypeArgumentsForAugments() *ast.Node {
@@ -877,39 +844,33 @@ func (p *Parser) parseExpressionWithTypeArgumentsForAugments() *ast.Node {
877844
p.scanner.SetSkipJSDocLeadingAsterisks(true)
878845
typeArguments := p.parseTypeArguments()
879846
p.scanner.SetSkipJSDocLeadingAsterisks(false)
880-
node := p.factory.NewExpressionWithTypeArguments(expression, typeArguments)
881-
res := node
882-
p.finishNode(node, pos)
847+
node := p.finishNode(p.factory.NewExpressionWithTypeArguments(expression, typeArguments), pos)
883848
if usedBrace {
884849
p.skipWhitespace()
885850
p.parseExpected(ast.KindCloseBraceToken)
886851
}
887-
return res
852+
return node
888853
}
889854

890855
func (p *Parser) parsePropertyAccessEntityNameExpression() *ast.Node {
891856
pos := p.nodePos()
892857
node := p.parseJSDocIdentifierName(nil)
893858
for p.parseOptional(ast.KindDotToken) {
894859
name := p.parseJSDocIdentifierName(nil)
895-
node = p.factory.NewPropertyAccessExpression(node, nil, name, ast.NodeFlagsNone)
896-
p.finishNode(node, pos)
860+
node = p.finishNode(p.factory.NewPropertyAccessExpression(node, nil, name, ast.NodeFlagsNone), pos)
897861
}
898862
return node
899863
}
900864

901865
func (p *Parser) parseSimpleTag(start int, createTag func(tagName *ast.IdentifierNode, comment *ast.NodeList) *ast.Node, tagName *ast.IdentifierNode, margin int, indentText string) *ast.Node {
902-
tag := createTag(tagName, p.parseTrailingTagComments(start, p.nodePos(), margin, indentText))
903-
p.finishNode(tag, start)
904-
return tag
866+
return p.finishNode(createTag(tagName, p.parseTrailingTagComments(start, p.nodePos(), margin, indentText)), start)
905867
}
906868

907869
func (p *Parser) parseThisTag(start int, tagName *ast.IdentifierNode, margin int, indentText string) *ast.Node {
908870
typeExpression := p.parseJSDocTypeExpression(true)
909871
p.skipWhitespace()
910872
result := p.factory.NewJSDocThisTag(tagName, typeExpression, p.parseTrailingTagComments(start, p.nodePos(), margin, indentText))
911-
p.finishNode(result, start)
912-
return result
873+
return p.finishNode(result, start)
913874
}
914875

915876
func (p *Parser) parseTypedefTag(start int, tagName *ast.IdentifierNode, indent int, indentText string) *ast.Node {
@@ -957,8 +918,7 @@ func (p *Parser) parseTypedefTag(start int, tagName *ast.IdentifierNode, indent
957918
if childTypeTag != nil && childTypeTag.TypeExpression != nil && !isObjectOrObjectArrayTypeReference(childTypeTag.TypeExpression.Type()) {
958919
typeExpression = childTypeTag.TypeExpression
959920
} else {
960-
p.finishNode(jsdocTypeLiteral, start)
961-
typeExpression = jsdocTypeLiteral
921+
typeExpression = p.finishNode(jsdocTypeLiteral, start)
962922
}
963923
}
964924
}
@@ -982,8 +942,7 @@ func (p *Parser) parseTypedefTag(start int, tagName *ast.IdentifierNode, indent
982942
comment = p.parseTrailingTagComments(start, end, indent, indentText)
983943
}
984944

985-
typedefTag := p.factory.NewJSDocTypedefTag(tagName, typeExpression, fullName, comment)
986-
p.finishNodeWithEnd(typedefTag, start, end)
945+
typedefTag := p.finishNodeWithEnd(p.factory.NewJSDocTypedefTag(tagName, typeExpression, fullName, comment), start, end)
987946
if typeExpression != nil {
988947
typeExpression.Parent = typedefTag // forcibly overwrite parent potentially set by inner type expression parse
989948
}
@@ -1023,9 +982,7 @@ func (p *Parser) parseJSDocSignature(start int, indent int) *ast.Node {
1023982
if returnTag == nil {
1024983
p.rewind(state)
1025984
}
1026-
result := p.factory.NewJSDocSignature(nil, parameters, returnTag)
1027-
p.finishNode(result, start)
1028-
return result
985+
return p.finishNode(p.factory.NewJSDocSignature(nil, parameters, returnTag), start)
1029986
}
1030987

1031988
func (p *Parser) parseCallbackTag(start int, tagName *ast.IdentifierNode, indent int, indentText string) *ast.Node {
@@ -1042,9 +999,7 @@ func (p *Parser) parseCallbackTag(start int, tagName *ast.IdentifierNode, indent
1042999
} else {
10431000
end = typeExpression.End()
10441001
}
1045-
result := p.factory.NewJSDocCallbackTag(tagName, typeExpression, fullName, comment)
1046-
p.finishNodeWithEnd(result, start, end)
1047-
return result
1002+
return p.finishNodeWithEnd(p.factory.NewJSDocCallbackTag(tagName, typeExpression, fullName, comment), start, end)
10481003
}
10491004

10501005
func (p *Parser) parseOverloadTag(start int, tagName *ast.IdentifierNode, indent int, indentText string) *ast.Node {
@@ -1060,9 +1015,7 @@ func (p *Parser) parseOverloadTag(start int, tagName *ast.IdentifierNode, indent
10601015
} else {
10611016
end = typeExpression.End()
10621017
}
1063-
result := p.factory.NewJSDocOverloadTag(tagName, typeExpression, comment)
1064-
p.finishNodeWithEnd(result, start, end)
1065-
return result
1018+
return p.finishNodeWithEnd(p.factory.NewJSDocOverloadTag(tagName, typeExpression, comment), start, end)
10661019
}
10671020

10681021
func textsEqual(a *ast.EntityName, b *ast.EntityName) bool {
@@ -1168,9 +1121,7 @@ func (p *Parser) parseTemplateTagTypeParameter() *ast.Node {
11681121
if ast.NodeIsMissing(name) {
11691122
return nil
11701123
}
1171-
result := p.factory.NewTypeParameterDeclaration(modifiers, name, nil /*constraint*/, defaultType)
1172-
p.finishNode(result, typeParameterPos)
1173-
return result
1124+
return p.finishNode(p.factory.NewTypeParameterDeclaration(modifiers, name, nil /*constraint*/, defaultType), typeParameterPos)
11741125
}
11751126

11761127
func (p *Parser) parseTemplateTagTypeParameters() *ast.TypeParameterList {
@@ -1204,8 +1155,7 @@ func (p *Parser) parseTemplateTag(start int, tagName *ast.IdentifierNode, indent
12041155
}
12051156
typeParameters := p.parseTemplateTagTypeParameters()
12061157
result := p.factory.NewJSDocTemplateTag(tagName, constraint, typeParameters, p.parseTrailingTagComments(start, p.nodePos(), indent, indentText))
1207-
p.finishNode(result, start)
1208-
return result
1158+
return p.finishNode(result, start)
12091159
}
12101160

12111161
func (p *Parser) parseOptionalJsdoc(t ast.Kind) bool {
@@ -1230,8 +1180,7 @@ func (p *Parser) parseJSDocEntityName() *ast.EntityName {
12301180
p.parseExpected(ast.KindCloseBracketToken)
12311181
}
12321182
pos := entity.Pos()
1233-
entity = p.factory.NewQualifiedName(entity, name)
1234-
p.finishNode(entity, pos)
1183+
entity = p.finishNode(p.factory.NewQualifiedName(entity, name), pos)
12351184
}
12361185
return entity
12371186
}
@@ -1245,16 +1194,12 @@ func (p *Parser) parseJSDocIdentifierName(diagnosticMessage *diagnostics.Message
12451194
} else {
12461195
p.parseErrorAtCurrentToken(diagnostics.Identifier_expected)
12471196
}
1248-
result := p.newIdentifier("")
1249-
p.finishNode(result, p.nodePos())
1250-
return result
1197+
return p.finishNode(p.newIdentifier(""), p.nodePos())
12511198
}
12521199
pos := p.scanner.TokenStart()
12531200
end := p.scanner.TokenEnd()
12541201
text := p.scanner.TokenValue()
12551202
p.internIdentifier(text)
12561203
p.nextTokenJSDoc()
1257-
result := p.newIdentifier(text)
1258-
p.finishNodeWithEnd(result, pos, end)
1259-
return result
1204+
return p.finishNodeWithEnd(p.newIdentifier(text), pos, end)
12601205
}

0 commit comments

Comments
 (0)