code: func ParseInstruction(node *parser.Node) (interface{}, error) {
  	req := newParseRequestFromNode(node)
  	switch node.Value {
  	case command.Env:
  		return parseEnv(req)
  	case command.Maintainer:
  		return parseMaintainer(req)
  	case command.Label:
  		return parseLabel(req)
  	case command.Add:
  		return parseAdd(req)
  	case command.Copy:
  		return parseCopy(req)
  	case command.From:
  		return parseFrom(req)
  	case command.Onbuild:
  		return parseOnBuild(req)
  	case command.Workdir:
  		return parseWorkdir(req)
  	case command.Run:
  		return parseRun(req)
  	case command.Cmd:
  		return parseCmd(req)
  	case command.Healthcheck:
  		return parseHealthcheck(req)
  	case command.Entrypoint:
  		return parseEntrypoint(req)
  	case command.Expose:
  		return parseExpose(req)
  	case command.User:
  		return parseUser(req)
  	case command.Volume:
  		return parseVolume(req)
  	case command.StopSignal:
  		return parseStopSignal(req)
  	case command.Arg:
  		return parseArg(req)
  	case command.Shell:
  		return parseShell(req)
  	}
  
  	return nil, &UnknownInstruction{Instruction: node.Value, Line: node.StartLine}
  }
docs: // ParseInstruction converts an AST to a typed instruction (either a command or a build stage beginning when encountering a `FROM` statement)