in src/compiler/rust.rs [959:982]
fn process(arg: OsString) -> ArgParseResult<Self> {
// Is it obviously a json file path?
if Path::new(&arg)
.extension()
.map(|ext| ext == "json")
.unwrap_or(false)
{
return Ok(ArgTarget::Path(arg.into()));
}
// Time for clever detection - if we append .json (even if it's clearly
// a directory, i.e. resulting in /my/dir/.json), does the path exist?
let mut path = arg.clone();
path.push(".json");
if Path::new(&path).is_file() {
// Unfortunately, we're now not sure what will happen without having
// a list of all the built-in targets handy, as they don't get .json
// auto-added for target json discovery
return Ok(ArgTarget::Unsure(arg));
}
// The file doesn't exist so it can't be a path, safe to assume it's a name
Ok(ArgTarget::Name(
arg.into_string().map_err(ArgParseError::InvalidUnicode)?,
))
}