summaryrefslogtreecommitdiff
path: root/src/exercise.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2025-08-21 22:43:46 +0200
committermo8it <mo8it@proton.me>2025-08-21 23:15:48 +0200
commit2d1d531550afaac36dbf4d15c383bc0e1cbf248d (patch)
tree67f030f84414a463e2e7958b1267baa3a14487e6 /src/exercise.rs
parenta712e484d09ce27a622da5e61d26bbb1004f51d2 (diff)
Fix file links in VS Code
Diffstat (limited to 'src/exercise.rs')
-rw-r--r--src/exercise.rs38
1 files changed, 25 insertions, 13 deletions
diff --git a/src/exercise.rs b/src/exercise.rs
index fdfbc4f..6f517be 100644
--- a/src/exercise.rs
+++ b/src/exercise.rs
@@ -7,22 +7,28 @@ use std::io::{self, StdoutLock, Write};
use crate::{
cmd::CmdRunner,
- term::{self, CountedWrite, terminal_file_link, write_ansi},
+ term::{self, CountedWrite, file_path, terminal_file_link, write_ansi},
};
/// The initial capacity of the output buffer.
pub const OUTPUT_CAPACITY: usize = 1 << 14;
-pub fn solution_link_line(stdout: &mut StdoutLock, solution_path: &str) -> io::Result<()> {
+pub fn solution_link_line(
+ stdout: &mut StdoutLock,
+ solution_path: &str,
+ emit_file_links: bool,
+) -> io::Result<()> {
stdout.queue(SetAttribute(Attribute::Bold))?;
stdout.write_all(b"Solution")?;
stdout.queue(ResetColor)?;
stdout.write_all(b" for comparison: ")?;
- if let Some(canonical_path) = term::canonicalize(solution_path) {
- terminal_file_link(stdout, solution_path, &canonical_path, Color::Cyan)?;
- } else {
- stdout.write_all(solution_path.as_bytes())?;
- }
+ file_path(stdout, Color::Cyan, |writer| {
+ if emit_file_links && let Some(canonical_path) = term::canonicalize(solution_path) {
+ terminal_file_link(writer, solution_path, &canonical_path)
+ } else {
+ writer.stdout().write_all(solution_path.as_bytes())
+ }
+ })?;
stdout.write_all(b"\n")
}
@@ -72,12 +78,18 @@ pub struct Exercise {
}
impl Exercise {
- pub fn terminal_file_link<'a>(&self, writer: &mut impl CountedWrite<'a>) -> io::Result<()> {
- if let Some(canonical_path) = self.canonical_path.as_deref() {
- return terminal_file_link(writer, self.path, canonical_path, Color::Blue);
- }
-
- writer.write_str(self.path)
+ pub fn terminal_file_link<'a>(
+ &self,
+ writer: &mut impl CountedWrite<'a>,
+ emit_file_links: bool,
+ ) -> io::Result<()> {
+ file_path(writer, Color::Blue, |writer| {
+ if emit_file_links && let Some(canonical_path) = self.canonical_path.as_deref() {
+ terminal_file_link(writer, self.path, canonical_path)
+ } else {
+ writer.write_str(self.path)
+ }
+ })
}
}