cc_audit/engine/scanners/skill/
frontmatter.rs1pub struct FrontmatterParser;
3
4impl FrontmatterParser {
5 pub fn extract(content: &str) -> Option<&str> {
17 content.strip_prefix("---").and_then(|after_start| {
18 after_start
19 .find("---")
20 .map(|end_idx| &after_start[..end_idx])
21 })
22 }
23}
24
25#[cfg(test)]
26mod tests {
27 use super::*;
28
29 #[test]
30 fn test_valid_frontmatter() {
31 let content = "---\nname: test\ndescription: A test\n---\n# Content";
32 let result = FrontmatterParser::extract(content);
33 assert_eq!(result, Some("\nname: test\ndescription: A test\n"));
34 }
35
36 #[test]
37 fn test_frontmatter_with_allowed_tools() {
38 let content = "---\nname: skill\nallowed-tools: Read, Write\n---\n# Skill";
39 let result = FrontmatterParser::extract(content);
40 assert!(result.is_some());
41 assert!(result.unwrap().contains("allowed-tools"));
42 }
43
44 #[test]
45 fn test_no_frontmatter() {
46 let content = "# Just Markdown\nNo frontmatter here.";
47 assert!(FrontmatterParser::extract(content).is_none());
48 }
49
50 #[test]
51 fn test_incomplete_frontmatter() {
52 let content = "---\nname: test\nNo closing dashes";
53 assert!(FrontmatterParser::extract(content).is_none());
54 }
55
56 #[test]
57 fn test_empty_frontmatter() {
58 let content = "------\n# Content";
59 let result = FrontmatterParser::extract(content);
60 assert_eq!(result, Some(""));
61 }
62
63 #[test]
64 fn test_frontmatter_with_nested_dashes() {
65 let content = "---\nname: test\ndata: \"some---thing\"\n---\n# Content";
66 let result = FrontmatterParser::extract(content);
67 assert!(result.is_some());
69 }
70
71 #[test]
72 fn test_content_not_starting_with_dashes() {
73 let content = "# Title\n---\nname: test\n---";
74 assert!(FrontmatterParser::extract(content).is_none());
75 }
76}