Skip to content

Commit 0ef9af9

Browse files
committed
csv: deduplicate reader dialect configuration
to_reader configured ReaderBuilder separately for named, object, and default dialects even though the configuration was identical. Resolve the PyDialect once, then apply delimiter, double_quote, escapechar, and quotechar in one place. Preserve the existing unregistered-name fallback and required excel dialect lookup behavior. Assisted-by: Codex:gpt-5.6-terra
1 parent f9105a4 commit 0ef9af9

1 file changed

Lines changed: 18 additions & 39 deletions

File tree

crates/stdlib/src/csv.rs

Lines changed: 18 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -797,48 +797,27 @@ mod _csv {
797797
}
798798

799799
fn to_reader(&self) -> csv_core::Reader {
800-
let mut builder = csv_core::ReaderBuilder::new();
801-
let mut reader = match &self.dialect {
802-
DialectItem::Str(name) => {
800+
let dialect = match &self.dialect {
801+
DialectItem::Str(name) => GLOBAL_HASHMAP.lock().get(name).copied(),
802+
DialectItem::Obj(obj) => Some(*obj),
803+
DialectItem::None => {
803804
let g = GLOBAL_HASHMAP.lock();
804-
if let Some(dialect) = g.get(name) {
805-
let mut builder = builder
806-
.delimiter(dialect.delimiter)
807-
.double_quote(dialect.doublequote)
808-
.escape(dialect.escapechar);
809-
if let Some(t) = dialect.quotechar {
810-
builder = builder.quote(t);
811-
}
812-
builder
813-
// RustPython todo
814-
// todo! Perfecting the remaining attributes.
815-
} else {
816-
&mut builder
817-
}
805+
Some(*g.get("excel").unwrap())
818806
}
819-
DialectItem::Obj(obj) => {
820-
let mut builder = builder
821-
.delimiter(obj.delimiter)
822-
.double_quote(obj.doublequote)
823-
.escape(obj.escapechar);
824-
if let Some(t) = obj.quotechar {
825-
builder = builder.quote(t);
826-
}
827-
builder
828-
}
829-
_ => {
830-
let name = "excel";
831-
let g = GLOBAL_HASHMAP.lock();
832-
let dialect = g.get(name).unwrap();
833-
let mut builder = builder
834-
.delimiter(dialect.delimiter)
835-
.double_quote(dialect.doublequote)
836-
.escape(dialect.escapechar);
837-
if let Some(quotechar) = dialect.quotechar {
838-
builder = builder.quote(quotechar);
839-
}
840-
builder
807+
};
808+
809+
let mut builder = csv_core::ReaderBuilder::new();
810+
let mut reader = if let Some(dialect) = dialect {
811+
let mut builder = builder
812+
.delimiter(dialect.delimiter)
813+
.double_quote(dialect.doublequote)
814+
.escape(dialect.escapechar);
815+
if let Some(quotechar) = dialect.quotechar {
816+
builder = builder.quote(quotechar);
841817
}
818+
builder
819+
} else {
820+
&mut builder
842821
};
843822

844823
if let Some(t) = self.delimiter {

0 commit comments

Comments
 (0)