mirror of
https://github.com/nushell/nushell.git
synced 2025-05-01 00:24:29 +02:00
This commit extracts Tag, Span, Text, as well as source-related debug facilities into a new crate called nu_source. This change is much bigger than one might have expected because the previous code relied heavily on implementing inherent methods on `Tagged<T>` and `Spanned<T>`, which is no longer possible. As a result, this change creates more concrete types instead of using `Tagged<T>`. One notable example: Tagged<Value> became Value, and Value became UntaggedValue. This change clarifies the intent of the code in many places, but it does make it a big change.
61 lines
2.5 KiB
Rust
61 lines
2.5 KiB
Rust
use crate::data::base::Primitive;
|
|
use crate::traits::PrettyType;
|
|
use nu_source::{b, DebugDocBuilder, PrettyDebug};
|
|
|
|
impl PrettyType for Primitive {
|
|
fn pretty_type(&self) -> DebugDocBuilder {
|
|
match self {
|
|
Primitive::Nothing => ty("nothing"),
|
|
Primitive::Int(_) => ty("integer"),
|
|
Primitive::Decimal(_) => ty("decimal"),
|
|
Primitive::Bytes(_) => ty("bytesize"),
|
|
Primitive::String(_) => ty("string"),
|
|
Primitive::ColumnPath(_) => ty("column-path"),
|
|
Primitive::Pattern(_) => ty("pattern"),
|
|
Primitive::Boolean(_) => ty("boolean"),
|
|
Primitive::Date(_) => ty("date"),
|
|
Primitive::Duration(_) => ty("duration"),
|
|
Primitive::Path(_) => ty("path"),
|
|
Primitive::Binary(_) => ty("binary"),
|
|
Primitive::BeginningOfStream => b::keyword("beginning-of-stream"),
|
|
Primitive::EndOfStream => b::keyword("end-of-stream"),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl PrettyDebug for Primitive {
|
|
fn pretty(&self) -> DebugDocBuilder {
|
|
match self {
|
|
Primitive::Nothing => b::primitive("nothing"),
|
|
Primitive::Int(int) => prim(format_args!("{}", int)),
|
|
Primitive::Decimal(decimal) => prim(format_args!("{}", decimal)),
|
|
Primitive::Bytes(bytes) => primitive_doc(bytes, "bytesize"),
|
|
Primitive::String(string) => prim(string),
|
|
Primitive::ColumnPath(path) => path.pretty(),
|
|
Primitive::Pattern(pattern) => primitive_doc(pattern, "pattern"),
|
|
Primitive::Boolean(boolean) => match boolean {
|
|
true => b::primitive("$yes"),
|
|
false => b::primitive("$no"),
|
|
},
|
|
Primitive::Date(date) => primitive_doc(date, "date"),
|
|
Primitive::Duration(duration) => primitive_doc(duration, "seconds"),
|
|
Primitive::Path(path) => primitive_doc(path, "path"),
|
|
Primitive::Binary(_) => b::opaque("binary"),
|
|
Primitive::BeginningOfStream => b::keyword("beginning-of-stream"),
|
|
Primitive::EndOfStream => b::keyword("end-of-stream"),
|
|
}
|
|
}
|
|
}
|
|
|
|
fn prim(name: impl std::fmt::Debug) -> DebugDocBuilder {
|
|
b::primitive(format!("{:?}", name))
|
|
}
|
|
|
|
fn ty(name: impl std::fmt::Debug) -> DebugDocBuilder {
|
|
b::kind(format!("{:?}", name))
|
|
}
|
|
|
|
fn primitive_doc(name: impl std::fmt::Debug, ty: impl Into<String>) -> DebugDocBuilder {
|
|
b::primitive(format!("{:?}", name)) + b::delimit("(", b::kind(ty.into()), ")")
|
|
}
|