All files / src/parsers assignment.js

100% Statements 3/3
100% Branches 0/0
100% Functions 1/1
100% Lines 3/3

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                            19x             19x                       37x              
// @flow
 
import P from 'parsimmon'
import SectionParser from './section'
import IdentifierParser from './identifier'
import TupleParser from './collections/tuple'
import crap from './crap'
 
import type {
  NodeType,
  AssignmentNodeValueType,
  AssignmentsType
} from '../types'
 
const Assignment = P.seq(
  P.string('$').then(IdentifierParser),
  P.string('=')
    .trim(crap)
    .then(SectionParser)
)
 
const Assignments = P.sepBy(Assignment, crap)
 
export default P.seq(
  TupleParser,
  P.string('where')
    .trim(crap)
    .then(Assignments)
)
  .map(
    ([program, assignments]: [
      NodeType,
      AssignmentsType
    ]): AssignmentNodeValueType => ({
      program,
      assignments
    })
  )
  .node('assignment')
  .desc('assignment')