mirror of
https://github.com/nushell/nushell.git
synced 2025-04-22 12:18:20 +02:00
Adding coloring to help examples (#1754)
This commit is contained in:
parent
2275575575
commit
c5ea4a31bd
@ -43,10 +43,16 @@ impl WholeStreamCommand for Alias {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn examples(&self) -> &[Example] {
|
fn examples(&self) -> &[Example] {
|
||||||
&[Example {
|
&[
|
||||||
description: "Some people prefer to write one letter instead of two",
|
Example {
|
||||||
example: "alias l [x] { ls $x }",
|
description: "An alias without parameters",
|
||||||
}]
|
example: "alias say-hi [] { echo 'Hello!' }",
|
||||||
|
},
|
||||||
|
Example {
|
||||||
|
description: "An alias with a single parameter",
|
||||||
|
example: "alias l [x] { ls $x }",
|
||||||
|
},
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,14 +272,19 @@ pub(crate) fn get_help(
|
|||||||
|
|
||||||
let examples = cmd.examples();
|
let examples = cmd.examples();
|
||||||
if !examples.is_empty() {
|
if !examples.is_empty() {
|
||||||
long_desc.push_str("\nExamples:\n");
|
long_desc.push_str("\nExamples:");
|
||||||
}
|
}
|
||||||
for example in examples {
|
for example in examples {
|
||||||
|
long_desc.push_str("\n");
|
||||||
long_desc.push_str(" ");
|
long_desc.push_str(" ");
|
||||||
long_desc.push_str(example.description);
|
long_desc.push_str(example.description);
|
||||||
long_desc.push_str(&format!("\n > {}\n", example.example));
|
let colored_example =
|
||||||
|
crate::shell::helper::Painter::paint_string(example.example, registry);
|
||||||
|
long_desc.push_str(&format!("\n > {}\n", colored_example));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long_desc.push_str("\n");
|
||||||
|
|
||||||
help.push_back(ReturnSuccess::value(
|
help.push_back(ReturnSuccess::value(
|
||||||
UntaggedValue::string(long_desc).into_value(Tag::from((0, cmd_name.len(), None))),
|
UntaggedValue::string(long_desc).into_value(Tag::from((0, cmd_name.len(), None))),
|
||||||
));
|
));
|
||||||
|
@ -61,24 +61,7 @@ impl Highlighter for Helper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn highlight<'l>(&self, line: &'l str, _pos: usize) -> Cow<'l, str> {
|
fn highlight<'l>(&self, line: &'l str, _pos: usize) -> Cow<'l, str> {
|
||||||
let lite_block = nu_parser::lite_parse(line, 0);
|
Painter::paint_string(line, &self.context.registry().clone_box())
|
||||||
|
|
||||||
match lite_block {
|
|
||||||
Err(_) => Cow::Borrowed(line),
|
|
||||||
Ok(lb) => {
|
|
||||||
let classified =
|
|
||||||
nu_parser::classify_block(&lb, &self.context.registry().clone_box());
|
|
||||||
|
|
||||||
let shapes = nu_parser::shapes(&classified.block);
|
|
||||||
let mut painter = Painter::new(line);
|
|
||||||
|
|
||||||
for shape in shapes {
|
|
||||||
painter.paint_shape(&shape);
|
|
||||||
}
|
|
||||||
|
|
||||||
Cow::Owned(painter.into_string())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn highlight_char(&self, _line: &str, _pos: usize) -> bool {
|
fn highlight_char(&self, _line: &str, _pos: usize) -> bool {
|
||||||
@ -98,7 +81,7 @@ fn vec_tag<T>(input: Vec<Tagged<T>>) -> Option<Tag> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Painter {
|
pub struct Painter {
|
||||||
original: Vec<u8>,
|
original: Vec<u8>,
|
||||||
styles: Vec<Style>,
|
styles: Vec<Style>,
|
||||||
}
|
}
|
||||||
@ -113,6 +96,26 @@ impl Painter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn paint_string<'l>(line: &'l str, registry: &dyn SignatureRegistry) -> Cow<'l, str> {
|
||||||
|
let lite_block = nu_parser::lite_parse(line, 0);
|
||||||
|
|
||||||
|
match lite_block {
|
||||||
|
Err(_) => Cow::Borrowed(line),
|
||||||
|
Ok(lb) => {
|
||||||
|
let classified = nu_parser::classify_block(&lb, registry);
|
||||||
|
|
||||||
|
let shapes = nu_parser::shapes(&classified.block);
|
||||||
|
let mut painter = Painter::new(line);
|
||||||
|
|
||||||
|
for shape in shapes {
|
||||||
|
painter.paint_shape(&shape);
|
||||||
|
}
|
||||||
|
|
||||||
|
Cow::Owned(painter.into_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn paint_shape(&mut self, shape: &Spanned<FlatShape>) {
|
fn paint_shape(&mut self, shape: &Spanned<FlatShape>) {
|
||||||
let style = match &shape.item {
|
let style = match &shape.item {
|
||||||
FlatShape::OpenDelimiter(_) => Color::White.normal(),
|
FlatShape::OpenDelimiter(_) => Color::White.normal(),
|
||||||
|
Loading…
Reference in New Issue
Block a user