Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 9x 9x 642x | // @flow
import P from 'parsimmon'
import crap from './crap'
import type {
TupleNodeType,
ParserType,
NodeType
} from '../types'
export default P.lazy((): ParserType => {
const TupleParser = require('./collections/tuple').default
return P.seq(
TupleParser,
P.seq(
P.string('if')
.trim(crap)
.then(TupleParser),
P.string('else')
.trim(crap)
.then(TupleParser)
).atMost(1)
).map(
([tuple, rest]: [
TupleNodeType,
Array<[TupleNodeType, TupleNodeType]>
]): NodeType =>
rest.length === 0
? tuple
: {
name: 'ternary',
value: {
left: tuple,
middle: rest[0][0],
right: rest[0][1]
}
}
)
})
|