(pos int, jsdoc jsdocScannerInfo, modifiers *ast.ModifierList)
| 1150 | } |
| 1151 | |
| 1152 | func (p *Parser) parseDeclarationWorker(pos int, jsdoc jsdocScannerInfo, modifiers *ast.ModifierList) *ast.Statement { |
| 1153 | switch p.token { |
| 1154 | case ast.KindVarKeyword, ast.KindLetKeyword, ast.KindConstKeyword, ast.KindUsingKeyword: |
| 1155 | return p.parseVariableStatement(pos, jsdoc, modifiers) |
| 1156 | case ast.KindAwaitKeyword: |
| 1157 | if p.isAwaitUsingDeclaration() { |
| 1158 | return p.parseVariableStatement(pos, jsdoc, modifiers) |
| 1159 | } |
| 1160 | case ast.KindFunctionKeyword: |
| 1161 | return p.parseFunctionDeclaration(pos, jsdoc, modifiers) |
| 1162 | case ast.KindClassKeyword: |
| 1163 | return p.parseClassDeclaration(pos, jsdoc, modifiers) |
| 1164 | case ast.KindInterfaceKeyword: |
| 1165 | return p.parseInterfaceDeclaration(pos, jsdoc, modifiers) |
| 1166 | case ast.KindTypeKeyword: |
| 1167 | return p.parseTypeAliasDeclaration(pos, jsdoc, modifiers) |
| 1168 | case ast.KindEnumKeyword: |
| 1169 | return p.parseEnumDeclaration(pos, jsdoc, modifiers) |
| 1170 | case ast.KindGlobalKeyword, ast.KindModuleKeyword, ast.KindNamespaceKeyword: |
| 1171 | return p.parseModuleDeclaration(pos, jsdoc, modifiers) |
| 1172 | case ast.KindImportKeyword: |
| 1173 | return p.parseImportDeclarationOrImportEqualsDeclaration(pos, jsdoc, modifiers) |
| 1174 | case ast.KindExportKeyword: |
| 1175 | p.nextToken() |
| 1176 | switch p.token { |
| 1177 | case ast.KindDefaultKeyword, ast.KindEqualsToken: |
| 1178 | return p.parseExportAssignment(pos, jsdoc, modifiers) |
| 1179 | case ast.KindAsKeyword: |
| 1180 | return p.parseNamespaceExportDeclaration(pos, jsdoc, modifiers) |
| 1181 | default: |
| 1182 | return p.parseExportDeclaration(pos, jsdoc, modifiers) |
| 1183 | } |
| 1184 | } |
| 1185 | if modifiers != nil { |
| 1186 | // We reached this point because we encountered decorators and/or modifiers and assumed a declaration |
| 1187 | // would follow. For recovery and error reporting purposes, return an incomplete declaration. |
| 1188 | p.parseErrorAt(p.nodePos(), p.nodePos(), diagnostics.Declaration_expected) |
| 1189 | return p.finishNode(p.factory.NewMissingDeclaration(modifiers), pos) |
| 1190 | } |
| 1191 | panic("Unhandled case in parseDeclarationWorker") |
| 1192 | } |
| 1193 | |
| 1194 | func isDeclareModifier(modifier *ast.Node) bool { |
| 1195 | return modifier.Kind == ast.KindDeclareKeyword |
no test coverage detected