Skip to content

Commit dd2007a

Browse files
committed
Continue to parse merge_imports={true,false}
1 parent 7be45a6 commit dd2007a

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

src/config/config_type.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::config::file_lines::FileLines;
2-
use crate::config::options::{IgnoreList, WidthHeuristics};
2+
use crate::config::options::{IgnoreList, MergeImports, WidthHeuristics};
33

44
/// Trait for types that can be used in `Config`.
55
pub(crate) trait ConfigType: Sized {
@@ -50,6 +50,12 @@ impl ConfigType for IgnoreList {
5050
}
5151
}
5252

53+
impl ConfigType for MergeImports {
54+
fn doc_hint() -> String {
55+
"[Never|Crate|Module]".to_owned()
56+
}
57+
}
58+
5359
macro_rules! update_config {
5460
($config:ident, ignore = $val:ident, $dir:ident) => {
5561
$config.ignore.1 = true;

src/config/options.rs

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::collections::{hash_set, HashSet};
22
use std::fmt;
33
use std::path::{Path, PathBuf};
4+
use std::str::FromStr;
45

56
use rustfmt_config_proc_macro::config_type;
67
use serde::de::{SeqAccess, Visitor};
@@ -118,7 +119,7 @@ pub enum GroupImportsTactic {
118119
StdExternalCrate,
119120
}
120121

121-
#[config_type]
122+
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize)]
122123
/// How to merge imports.
123124
pub enum MergeImports {
124125
/// Do not merge imports.
@@ -129,6 +130,50 @@ pub enum MergeImports {
129130
Module,
130131
}
131132

133+
impl FromStr for MergeImports {
134+
type Err = &'static str;
135+
136+
fn from_str(s: &str) -> Result<Self, Self::Err> {
137+
if "false".eq_ignore_ascii_case(s) {
138+
eprintln!("Warning: merge_imports=false is being renamed to Never");
139+
return Ok(MergeImports::Never);
140+
}
141+
if "true".eq_ignore_ascii_case(s) {
142+
eprintln!("Warning: merge_imports=true is being renamed to Crate");
143+
return Ok(MergeImports::Crate);
144+
}
145+
if "Never".eq_ignore_ascii_case(s) {
146+
return Ok(MergeImports::Never);
147+
}
148+
if "Crate".eq_ignore_ascii_case(s) {
149+
return Ok(MergeImports::Crate);
150+
}
151+
if "Module".eq_ignore_ascii_case(s) {
152+
return Ok(MergeImports::Module);
153+
}
154+
return Err("Bad variant, expected one of: `Never` `Crate` `Module`");
155+
}
156+
}
157+
158+
impl fmt::Display for MergeImports {
159+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
160+
write!(f, "{:?}", self)
161+
}
162+
}
163+
164+
impl<'de> Deserialize<'de> for MergeImports {
165+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
166+
where
167+
D: Deserializer<'de>,
168+
{
169+
let s = String::deserialize(deserializer)?;
170+
Self::from_str(&s).map_err(|_| {
171+
static ALLOWED: &'static [&str] = &["Never", "Crate", "Module"];
172+
serde::de::Error::unknown_variant(&s, ALLOWED)
173+
})
174+
}
175+
}
176+
132177
#[config_type]
133178
pub enum ReportTactic {
134179
Always,
@@ -328,7 +373,7 @@ impl IgnoreList {
328373
}
329374
}
330375

331-
impl std::str::FromStr for IgnoreList {
376+
impl FromStr for IgnoreList {
332377
type Err = &'static str;
333378

334379
fn from_str(_: &str) -> Result<Self, Self::Err> {

0 commit comments

Comments
 (0)