 /// the argument by the given name.
 private func missingArgumentError(argumentName: String) -> NSError {
 	let description = "Missing argument for \(argumentName)"
+	return CarthageError.InvalidArgument(description: description).error
+}
+
+/// Constructs an `InvalidArgument` error that describes how to use the
+/// option.
+private func informativeUsageError<T: ArgumentType>(option: Option<T>) -> NSError {
+	var description = ""
+
+	if option.defaultValue != nil {
+		description += "["
+	}
+
+	if let key = option.key {
+		description += "--\(key) "
+	}
+
+	description += "(\(T.name))"
+
+	if option.defaultValue != nil {
+		description += "]"
+	}
+
+	description += "\n\t\(option.usage)"
 	return CarthageError.InvalidArgument(description: description).error
 }
 

}

/// Describes an option that can be provided on the command line.
public struct Option<T: ArgumentType> {
	/// The key that controls this option. For example, a key of `verbose` would
	/// be used for a `--verbose` option.
	///

		self.key = key
		self.defaultValue = defaultValue
		self.usage = usage
	}

	/// Constructs an `InvalidArgument` error that describes how the option was
