Skip to content

Commit

Permalink
Handle multiline snippets better
Browse files Browse the repository at this point in the history
Add support for code blocks using markdown syntax. Lines that are
part of the snippet and match the variables regex won't be interpeted as
a variable.

Additionally, add `.cheat.md` as a file extension for cheats so that it
can be rendered on GitHub with proper code formatting and syntax
highlighting.

Fixes #806
  • Loading branch information
vashirov committed Dec 19, 2022
1 parent 0c82419 commit 4b07ddf
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/filesystem.rs
Expand Up @@ -18,7 +18,7 @@ pub fn all_cheat_files(path: &Path) -> Vec<String> {
.into_iter()
.filter_map(|e| e.ok())
.map(|e| e.path().to_str().unwrap_or("").to_string())
.filter(|e| e.ends_with(".cheat"))
.filter(|e| e.ends_with(".cheat") || e.ends_with(".cheat.md"))
.collect::<Vec<String>>()
}

Expand Down
10 changes: 9 additions & 1 deletion src/parser.rs
Expand Up @@ -243,6 +243,8 @@ impl<'a> Parser<'a> {

let mut variable_cmd = String::from("");

let mut inside_snippet: bool = false;

for (line_nr, line_result) in lines.enumerate() {
let line = line_result
.with_context(|| format!("Failed to read line number {} in cheatsheet `{}`", line_nr, id))?;
Expand Down Expand Up @@ -284,7 +286,9 @@ impl<'a> Parser<'a> {
item.comment = without_prefix(&line);
}
// variable
else if !variable_cmd.is_empty() || (line.starts_with('$') && line.contains(':')) {
else if !variable_cmd.is_empty()
|| (line.starts_with('$') && line.contains(':')) && !inside_snippet
{
should_break = self.write_cmd(&item).is_err();

item.snippet = String::from("");
Expand All @@ -306,6 +310,10 @@ impl<'a> Parser<'a> {
.insert_suggestion(&item.tags, variable, (String::from(command), opts));
}
}
// markdown snippet
else if line.starts_with("```") {
inside_snippet = !inside_snippet;
}
// snippet
else {
if !(&item.snippet).is_empty() {
Expand Down

0 comments on commit 4b07ddf

Please sign in to comment.