mirror of
https://github.com/denisidoro/navi
synced 2024-11-22 03:23:05 +00:00
Handle multiline snippets better
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
This commit is contained in:
parent
0c82419934
commit
4b07ddfe1a
2 changed files with 10 additions and 2 deletions
|
@ -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>>()
|
||||
}
|
||||
|
||||
|
|
|
@ -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))?;
|
||||
|
@ -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("");
|
||||
|
@ -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() {
|
||||
|
|
Loading…
Reference in a new issue