Skip to content

Commit

Permalink
Add style() function
Browse files Browse the repository at this point in the history
  • Loading branch information
casey committed Nov 17, 2024
1 parent eb6e374 commit 9ee1c9e
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 1 deletion.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1851,6 +1851,17 @@ for details.
`requirement`, e.g., `">=0.1.0"`, returning `"true"` if so and `"false"`
otherwise.

#### Style

- `style(name)`<sup>master</sup> - Return terminal display attribute escape
sequence used by `just`. Unlike terminal display attribute escape sequence
constants, which contain standard colors and styles, `style(name)` returns an
escape sequence used by `just` itself, and can be used to make recipe output
match `just`'s own output.

Recognized values for `name` are `'command'`, for echoed recipe lines,
`error`, for errors, and `warning`, for warnings.

##### XDG Directories<sup>1.23.0</sup>

These functions return paths to user-specific directories for things like
Expand Down
1 change: 0 additions & 1 deletion src/color.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ impl Color {
Self::default()
}

#[cfg(test)]
pub(crate) fn always() -> Self {
Self {
use_color: UseColor::Always,
Expand Down
15 changes: 15 additions & 0 deletions src/function.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ pub(crate) fn get(name: &str) -> Option<Function> {
"snakecase" => Unary(snakecase),
"source_directory" => Nullary(source_directory),
"source_file" => Nullary(source_file),
"style" => Unary(style),
"titlecase" => Unary(titlecase),
"trim" => Unary(trim),
"trim_end" => Unary(trim_end),
Expand Down Expand Up @@ -623,6 +624,20 @@ fn source_file(context: Context) -> FunctionResult {
})
}

fn style(context: Context, s: &str) -> FunctionResult {
match s {
"command" => Ok(
Color::always()
.command(context.evaluator.context.config.command_color)
.prefix()
.to_string(),
),
"error" => Ok(Color::always().error().prefix().to_string()),
"warning" => Ok(Color::always().warning().prefix().to_string()),
_ => Err(format!("Unknown style: `{s}`")),
}
}

fn titlecase(_context: Context, s: &str) -> FunctionResult {
Ok(s.to_title_case())
}
Expand Down
53 changes: 53 additions & 0 deletions tests/functions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1183,3 +1183,56 @@ bar:
.args(["foo", "bar"])
.run();
}

#[test]
fn style_command_default() {
Test::new()
.justfile(
r#"
foo:
@echo '{{ style("command") }}foo{{NORMAL}}'
"#,
)
.stdout("\x1b[1mfoo\x1b[0m\n")
.run();
}

#[test]
fn style_command_non_default() {
Test::new()
.justfile(
r#"
foo:
@echo '{{ style("command") }}foo{{NORMAL}}'
"#,
)
.args(["--command-color", "red"])
.stdout("\x1b[1;31mfoo\x1b[0m\n")
.run();
}

#[test]
fn style_error() {
Test::new()
.justfile(
r#"
foo:
@echo '{{ style("error") }}foo{{NORMAL}}'
"#,
)
.stdout("\x1b[1;31mfoo\x1b[0m\n")
.run();
}

#[test]
fn style_warning() {
Test::new()
.justfile(
r#"
foo:
@echo '{{ style("warning") }}foo{{NORMAL}}'
"#,
)
.stdout("\x1b[1;33mfoo\x1b[0m\n")
.run();
}

0 comments on commit 9ee1c9e

Please sign in to comment.