(command.CommandList
  children: [
    (C {<Id.KW_Set set>} {<-o>} {<nounset>})
    (C {<Id.KW_Set set>} {<-o>} {<pipefail>})
    (C {<Id.KW_Set set>} {<-o>} {<errexit>})
    (C {<source>} {<test/common.sh>})
    (command.ShFunction
      name: assert-deps
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Pipeline
                  children: [(C {<bin/oshc>} {<deps>}) (C {<diff>} {<-u>} {</dev/fd/3>} {<->})]
                  negated: F
                )
                (C {<fail>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: usage
      body: 
        (command.BraceGroup
          children: [
            (C {<Id.KW_Set set>} {<Id.Lit_Other '+'> <o>} {<errexit>})
            (C {<bin/oshc>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<test>} {($ Id.VSub_QMark '$?')} {<-eq>} {<2>}) (C {<fail>})]
            )
            (C {<bin/oshc>} {<invalid>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<test>} {($ Id.VSub_QMark '$?')} {<-eq>} {<2>}) (C {<fail>})]
            )
            (command.Pipeline
              children: [(C {<echo>} {(SQ <'<'>)}) (C {<bin/oshc>} {<deps>})]
              negated: F
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<test>} {($ Id.VSub_QMark '$?')} {<-eq>} {<2>}) (C {<fail>})]
            )
            (C {<bin/oshc>} {<deps>} {<nonexistent.txt>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<test>} {($ Id.VSub_QMark '$?')} {<-eq>} {<2>}) (C {<fail>})]
            )
            (command.ControlFlow token:<Id.ControlFlow_Return return>)
            (C {<echo>} {<-->})
            (C {<bin/oshc>} {<--help>})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<test>} {($ Id.VSub_QMark '$?')} {<-eq>} {<0>}) (C {<fail>})]
            )
            (C {<Id.KW_Set set>} {<-o>} {<errexit>})
          ]
        )
    )
    (command.ShFunction
      name: deps
      body: 
        (command.BraceGroup
          children: [
            (C {<bin/oshc>} {<deps>} {($ Id.VSub_Number '$0')})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {<test>} {($ Id.VSub_QMark '$?')} {<-eq>} {<0>}) (C {<fail>})]
            )
            (command.Simple
              words: [{<assert-deps>}]
              redirects: [
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 276
                  stdin_parts: [<'if { grep foo bar; } then\n'> <'  cat hi\n'> <'fi\n'>]
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '3<<'>
                  fd: 3
                  here_begin: {<DEPS>}
                  here_end_span_id: 280
                  stdin_parts: [<'grep\n'> <'cat\n'>]
                )
              ]
            )
            (command.Simple
              words: [{<assert-deps>}]
              redirects: [
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 304
                  stdin_parts: [
                    <'f() {\n'>
                    <'  g\n'>
                    <'}\n'>
                    <'g() {\n'>
                    <'  echo G\n'>
                    <'}\n'>
                    <'f\n'>
                    <'grep foo bar\n'>
                  ]
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '3<<'>
                  fd: 3
                  here_begin: {<DEPS>}
                  here_end_span_id: 307
                  stdin_parts: [<'grep\n'>]
                )
              ]
            )
            (command.Simple
              words: [{<assert-deps>}]
              redirects: [
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 328
                  stdin_parts: [<'g\n'> <'g() {\n'> <'  echo G\n'> <'}\n'> <'grep foo bar\n'>]
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '3<<'>
                  fd: 3
                  here_begin: {<DEPS>}
                  here_end_span_id: 332
                  stdin_parts: [<'g\n'> <'grep\n'>]
                )
              ]
            )
          ]
        )
    )
    (C {<readonly>} {<-a>} 
      {<Id.Lit_VarLike 'PASSING='> 
        (sh_array_literal left:<Id.Op_LParen _> words:[{<usage>} {<deps>}])
      }
    )
    (command.ShFunction
      name: all-passing
      body: 
        (command.BraceGroup
          children: [
            (C {<run-all>} 
              {
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name PASSING>
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  )
                )
              }
            )
          ]
        )
    )
    (C {(DQ ($ Id.VSub_At '$@'))})
  ]
)