()
| 2754 | } |
| 2755 | |
| 2756 | func (p *Parser) parseNonArrayType() *ast.Node { |
| 2757 | switch p.token { |
| 2758 | case ast.KindAnyKeyword, ast.KindUnknownKeyword, ast.KindStringKeyword, ast.KindNumberKeyword, ast.KindBigIntKeyword, |
| 2759 | ast.KindSymbolKeyword, ast.KindBooleanKeyword, ast.KindUndefinedKeyword, ast.KindNeverKeyword, ast.KindObjectKeyword: |
| 2760 | state := p.mark() |
| 2761 | keywordTypeNode := p.parseKeywordTypeNode() |
| 2762 | // If these are followed by a dot then parse these out as a dotted type reference instead |
| 2763 | if p.token != ast.KindDotToken { |
| 2764 | return keywordTypeNode |
| 2765 | } |
| 2766 | p.rewind(state) |
| 2767 | return p.parseTypeReference() |
| 2768 | case ast.KindAsteriskEqualsToken: |
| 2769 | // If there is '*=', treat it as * followed by postfix = |
| 2770 | p.scanner.ReScanAsteriskEqualsToken() |
| 2771 | fallthrough |
| 2772 | case ast.KindAsteriskToken: |
| 2773 | return p.parseJSDocAllType() |
| 2774 | case ast.KindQuestionQuestionToken: |
| 2775 | // If there is '??', treat it as prefix-'?' in JSDoc type. |
| 2776 | p.scanner.ReScanQuestionToken() |
| 2777 | fallthrough |
| 2778 | case ast.KindQuestionToken: |
| 2779 | return p.parseJSDocNullableType() |
| 2780 | case ast.KindExclamationToken: |
| 2781 | return p.parseJSDocNonNullableType() |
| 2782 | case ast.KindNoSubstitutionTemplateLiteral, ast.KindStringLiteral, ast.KindNumericLiteral, ast.KindBigIntLiteral, ast.KindTrueKeyword, |
| 2783 | ast.KindFalseKeyword, ast.KindNullKeyword: |
| 2784 | return p.parseLiteralTypeNode(false /*negative*/) |
| 2785 | case ast.KindMinusToken: |
| 2786 | if p.lookAhead((*Parser).nextTokenIsNumericOrBigIntLiteral) { |
| 2787 | return p.parseLiteralTypeNode(true /*negative*/) |
| 2788 | } |
| 2789 | return p.parseTypeReference() |
| 2790 | case ast.KindVoidKeyword: |
| 2791 | return p.parseKeywordTypeNode() |
| 2792 | case ast.KindThisKeyword: |
| 2793 | thisKeyword := p.parseThisTypeNode() |
| 2794 | if p.token == ast.KindIsKeyword && !p.hasPrecedingLineBreak() { |
| 2795 | return p.parseThisTypePredicate(thisKeyword) |
| 2796 | } |
| 2797 | return thisKeyword |
| 2798 | case ast.KindTypeOfKeyword: |
| 2799 | if p.lookAhead((*Parser).nextIsStartOfTypeOfImportType) { |
| 2800 | return p.parseImportType() |
| 2801 | } |
| 2802 | return p.parseTypeQuery() |
| 2803 | case ast.KindOpenBraceToken: |
| 2804 | if p.lookAhead((*Parser).nextIsStartOfMappedType) { |
| 2805 | return p.parseMappedType() |
| 2806 | } |
| 2807 | return p.parseTypeLiteral() |
| 2808 | case ast.KindOpenBracketToken: |
| 2809 | return p.parseTupleType() |
| 2810 | case ast.KindOpenParenToken: |
| 2811 | return p.parseParenthesizedType() |
| 2812 | case ast.KindImportKeyword: |
| 2813 | return p.parseImportType() |
no test coverage detected