MCPcopy Index your code
hub / github.com/microsoft/typescript-go / parseClassDeclarationOrExpression

Method parseClassDeclarationOrExpression

internal/parser/parser.go:1748–1793  ·  view source on GitHub ↗
(pos int, jsdoc jsdocScannerInfo, modifiers *ast.ModifierList, kind ast.Kind)

Source from the content-addressed store, hash-verified

1746}
1747
1748func (p *Parser) parseClassDeclarationOrExpression(pos int, jsdoc jsdocScannerInfo, modifiers *ast.ModifierList, kind ast.Kind) *ast.Node {
1749 saveContextFlags := p.contextFlags
1750 saveHasAwaitIdentifier := p.statementHasAwaitIdentifier
1751 p.parseExpected(ast.KindClassKeyword)
1752 // We don't parse the name here in await context, instead we will report a grammar error in the checker.
1753 name := p.parseNameOfClassDeclarationOrExpression()
1754 typeParameters := p.parseTypeParameters()
1755 if modifiers != nil && core.Some(modifiers.Nodes, isExportModifier) {
1756 p.setContextFlags(ast.NodeFlagsAwaitContext, true /*value*/)
1757 }
1758 heritageClauses := p.parseHeritageClauses()
1759 var members *ast.NodeList
1760 if p.parseExpected(ast.KindOpenBraceToken) {
1761 // ClassTail[Yield,Await] : (Modified) See 14.5
1762 // ClassHeritage[?Yield,?Await]opt { ClassBody[?Yield,?Await]opt }
1763 members = p.parseList(PCClassMembers, (*Parser).parseClassElement)
1764 p.parseExpected(ast.KindCloseBraceToken)
1765 } else {
1766 members = p.createMissingList()
1767 }
1768 p.contextFlags = saveContextFlags
1769 var result *ast.Node
1770 if modifiers != nil && ast.ModifiersToFlags(modifiers.Nodes)&ast.ModifierFlagsAmbient != 0 {
1771 p.statementHasAwaitIdentifier = saveHasAwaitIdentifier
1772 }
1773 if kind == ast.KindClassDeclaration {
1774 result = p.factory.NewClassDeclaration(modifiers, name, typeParameters, heritageClauses, members)
1775 } else {
1776 result = p.factory.NewClassExpression(modifiers, name, typeParameters, heritageClauses, members)
1777 }
1778 p.finishNode(result, pos)
1779 p.withJSDoc(result, jsdoc)
1780 if result.Flags&ast.NodeFlagsJavaScriptFile != 0 {
1781 p.checkJSSyntax(result)
1782 if heritageClauses != nil {
1783 for _, clause := range heritageClauses.Nodes {
1784 if clause.AsHeritageClause().Token == ast.KindExtendsKeyword {
1785 for _, expr := range clause.AsHeritageClause().Types.Nodes {
1786 p.checkJSSyntax(expr)
1787 }
1788 }
1789 }
1790 }
1791 }
1792 return result
1793}
1794
1795func (p *Parser) parseNameOfClassDeclarationOrExpression() *ast.Node {
1796 // implements is a future reserved word so

Callers 3

parseClassDeclarationMethod · 0.95
parseClassExpressionMethod · 0.95

Calls 15

parseExpectedMethod · 0.95
parseTypeParametersMethod · 0.95
setContextFlagsMethod · 0.95
parseHeritageClausesMethod · 0.95
parseListMethod · 0.95
createMissingListMethod · 0.95
finishNodeMethod · 0.95
withJSDocMethod · 0.95
checkJSSyntaxMethod · 0.95
SomeFunction · 0.92
ModifiersToFlagsFunction · 0.92

Tested by

no test coverage detected