UNPKG

jsdoc-type-pratt-parser

Version:

[![Npm Package](https://badgen.net/npm/v/jsdoc-type-pratt-parser)](https://www.npmjs.com/package/jsdoc-type-pratt-parser) [![Test Status](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/actions/workflows/test.yml/badge.svg?branch=main)]

34 lines (32 loc) 907 B
import { composeParslet } from './Parslet.js' import { Precedence } from '../Precedence.js' import { assertRootResult } from '../assertTypes.js' export const parenthesisParslet = composeParslet({ name: 'parenthesisParslet', accept: type => type === '(', parsePrefix: parser => { parser.consume('(') if (parser.consume(')')) { return { type: 'JsdocTypeParameterList', elements: [] } } const result = parser.parseIntermediateType(Precedence.ALL) if (!parser.consume(')')) { throw new Error('Unterminated parenthesis') } if (result.type === 'JsdocTypeParameterList') { return result } else if (result.type === 'JsdocTypeKeyValue') { return { type: 'JsdocTypeParameterList', elements: [result] } } return { type: 'JsdocTypeParenthesis', element: assertRootResult(result) } } })