Extract core stuff into own crates
This commit extracts five new crates:
- nu-source, which contains the core source-code handling logic in Nu,
including Text, Span, and also the pretty.rs-based debug logic
- nu-parser, which is the parser and expander logic
- nu-protocol, which is the bulk of the types and basic conveniences
used by plugins
- nu-errors, which contains ShellError, ParseError and error handling
conveniences
- nu-textview, which is the textview plugin extracted into a crate
One of the major consequences of this refactor is that it's no longer
possible to `impl X for Spanned<Y>` outside of the `nu-source` crate, so
a lot of types became more concrete (Value became a concrete type
instead of Spanned<Value>, for example).
This also turned a number of inherent methods in the main nu crate into
plain functions (impl Value {} became a bunch of functions in the
`value` namespace in `crate::data::value`).
2019-11-26 03:30:48 +01:00
|
|
|
use crate::data::value;
|
2019-05-10 18:59:12 +02:00
|
|
|
use crate::format::RenderView;
|
2019-05-15 18:12:38 +02:00
|
|
|
use crate::prelude::*;
|
Extract core stuff into own crates
This commit extracts five new crates:
- nu-source, which contains the core source-code handling logic in Nu,
including Text, Span, and also the pretty.rs-based debug logic
- nu-parser, which is the parser and expander logic
- nu-protocol, which is the bulk of the types and basic conveniences
used by plugins
- nu-errors, which contains ShellError, ParseError and error handling
conveniences
- nu-textview, which is the textview plugin extracted into a crate
One of the major consequences of this refactor is that it's no longer
possible to `impl X for Spanned<Y>` outside of the `nu-source` crate, so
a lot of types became more concrete (Value became a concrete type
instead of Spanned<Value>, for example).
This also turned a number of inherent methods in the main nu crate into
plain functions (impl Value {} became a bunch of functions in the
`value` namespace in `crate::data::value`).
2019-11-26 03:30:48 +01:00
|
|
|
use nu_errors::ShellError;
|
|
|
|
use nu_protocol::Value;
|
2019-05-15 18:12:38 +02:00
|
|
|
|
2019-05-10 18:59:12 +02:00
|
|
|
use derive_new::new;
|
|
|
|
|
|
|
|
// An entries list is printed like this:
|
|
|
|
//
|
|
|
|
// name : ...
|
|
|
|
// name2 : ...
|
|
|
|
// another_name : ...
|
|
|
|
#[derive(new)]
|
|
|
|
pub struct EntriesView {
|
2019-07-03 19:37:09 +02:00
|
|
|
entries: Vec<(String, String)>,
|
2019-05-10 18:59:12 +02:00
|
|
|
}
|
|
|
|
|
2019-05-16 00:23:36 +02:00
|
|
|
impl EntriesView {
|
2019-08-29 13:08:28 +02:00
|
|
|
pub(crate) fn from_value(value: &Value) -> EntriesView {
|
2019-05-16 00:23:36 +02:00
|
|
|
let descs = value.data_descriptors();
|
|
|
|
let mut entries = vec![];
|
|
|
|
|
|
|
|
for desc in descs {
|
|
|
|
let value = value.get_data(&desc);
|
|
|
|
|
Extract core stuff into own crates
This commit extracts five new crates:
- nu-source, which contains the core source-code handling logic in Nu,
including Text, Span, and also the pretty.rs-based debug logic
- nu-parser, which is the parser and expander logic
- nu-protocol, which is the bulk of the types and basic conveniences
used by plugins
- nu-errors, which contains ShellError, ParseError and error handling
conveniences
- nu-textview, which is the textview plugin extracted into a crate
One of the major consequences of this refactor is that it's no longer
possible to `impl X for Spanned<Y>` outside of the `nu-source` crate, so
a lot of types became more concrete (Value became a concrete type
instead of Spanned<Value>, for example).
This also turned a number of inherent methods in the main nu crate into
plain functions (impl Value {} became a bunch of functions in the
`value` namespace in `crate::data::value`).
2019-11-26 03:30:48 +01:00
|
|
|
let formatted_value = value::format_leaf(value.borrow()).plain_string(75);
|
2019-05-16 00:23:36 +02:00
|
|
|
|
2019-07-03 19:37:09 +02:00
|
|
|
entries.push((desc.clone(), formatted_value))
|
2019-05-16 00:23:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
EntriesView::new(entries)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-10 18:59:12 +02:00
|
|
|
impl RenderView for EntriesView {
|
2019-05-24 20:48:33 +02:00
|
|
|
fn render_view(&self, _host: &mut dyn Host) -> Result<(), ShellError> {
|
2019-05-10 18:59:12 +02:00
|
|
|
if self.entries.len() == 0 {
|
2019-05-24 20:48:33 +02:00
|
|
|
return Ok(());
|
2019-05-10 18:59:12 +02:00
|
|
|
}
|
|
|
|
|
2019-07-03 19:37:09 +02:00
|
|
|
let max_name_size: usize = self.entries.iter().map(|(n, _)| n.len()).max().unwrap();
|
2019-05-24 20:48:33 +02:00
|
|
|
|
|
|
|
for (name, value) in &self.entries {
|
2019-11-04 16:47:03 +01:00
|
|
|
outln!("{:width$} : {}", name, value, width = max_name_size)
|
2019-05-24 20:48:33 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
Ok(())
|
2019-05-10 18:59:12 +02:00
|
|
|
}
|
|
|
|
}
|