Skip to content

Commit c3ea358

Browse files
committed
Display all emission types in error msg if user inputs invalid option.
before: ``` > rustc --emit foo error: unknown emission type: `foo` ``` after: ``` > rustc --emit foo error: unknown emission type: `foo` - expected one of: `llvm-bc`, `asm`, `llvm-ir`, `mir`, `obj`, `metadata`, `link`, `dep-info` ```
1 parent 4efcc66 commit c3ea358

File tree

1 file changed

+35
-13
lines changed

1 file changed

+35
-13
lines changed

src/librustc/session/config.rs

+35-13
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,34 @@ impl OutputType {
138138
}
139139
}
140140

141+
fn from_shorthand(shorthand: &str) -> Option<Self> {
142+
Some(match shorthand {
143+
"asm" => OutputType::Assembly,
144+
"llvm-ir" => OutputType::LlvmAssembly,
145+
"mir" => OutputType::Mir,
146+
"llvm-bc" => OutputType::Bitcode,
147+
"obj" => OutputType::Object,
148+
"metadata" => OutputType::Metadata,
149+
"link" => OutputType::Exe,
150+
"dep-info" => OutputType::DepInfo,
151+
_ => return None,
152+
})
153+
}
154+
155+
fn shorthands_display() -> String {
156+
format!(
157+
"`{}`, `{}`, `{}`, `{}`, `{}`, `{}`, `{}`, `{}`",
158+
OutputType::Bitcode.shorthand(),
159+
OutputType::Assembly.shorthand(),
160+
OutputType::LlvmAssembly.shorthand(),
161+
OutputType::Mir.shorthand(),
162+
OutputType::Object.shorthand(),
163+
OutputType::Metadata.shorthand(),
164+
OutputType::Exe.shorthand(),
165+
OutputType::DepInfo.shorthand(),
166+
)
167+
}
168+
141169
pub fn extension(&self) -> &'static str {
142170
match *self {
143171
OutputType::Bitcode => "bc",
@@ -1479,19 +1507,13 @@ pub fn build_session_options_and_crate_config(matches: &getopts::Matches)
14791507
for list in matches.opt_strs("emit") {
14801508
for output_type in list.split(',') {
14811509
let mut parts = output_type.splitn(2, '=');
1482-
let output_type = match parts.next().unwrap() {
1483-
"asm" => OutputType::Assembly,
1484-
"llvm-ir" => OutputType::LlvmAssembly,
1485-
"mir" => OutputType::Mir,
1486-
"llvm-bc" => OutputType::Bitcode,
1487-
"obj" => OutputType::Object,
1488-
"metadata" => OutputType::Metadata,
1489-
"link" => OutputType::Exe,
1490-
"dep-info" => OutputType::DepInfo,
1491-
part => {
1492-
early_error(error_format, &format!("unknown emission type: `{}`",
1493-
part))
1494-
}
1510+
let shorthand = parts.next().unwrap();
1511+
let output_type = match OutputType::from_shorthand(shorthand) {
1512+
Some(output_type) => output_type,
1513+
None => early_error(error_format, &format!(
1514+
"unknown emission type: `{}` - expected one of: {}",
1515+
shorthand, OutputType::shorthands_display(),
1516+
)),
14951517
};
14961518
let path = parts.next().map(PathBuf::from);
14971519
output_types.insert(output_type, path);

0 commit comments

Comments
 (0)