rec/import/
bash_script.rs1#[must_use]
9pub fn parse_bash_script(content: &str) -> Vec<String> {
10 content
11 .lines()
12 .map(str::trim)
13 .filter(|line| !line.is_empty() && !line.starts_with('#'))
14 .map(std::string::ToString::to_string)
15 .collect()
16}
17
18#[cfg(test)]
19mod tests {
20 use super::*;
21
22 #[test]
23 fn test_basic_script() {
24 let content = "#!/bin/bash\n# comment\nls -la\n\ngit status";
25 let result = parse_bash_script(content);
26 assert_eq!(result, vec!["ls -la", "git status"]);
27 }
28
29 #[test]
30 fn test_only_comments_and_blanks() {
31 let content = "#!/bin/bash\n# just a comment\n\n# another\n";
32 let result = parse_bash_script(content);
33 assert!(result.is_empty());
34 }
35
36 #[test]
37 fn test_trims_whitespace() {
38 let content = " echo hello \n\tls ";
39 let result = parse_bash_script(content);
40 assert_eq!(result, vec!["echo hello", "ls"]);
41 }
42
43 #[test]
44 fn test_shebang_variants_skipped() {
45 let content = "#!/usr/bin/env bash\necho hi";
46 let result = parse_bash_script(content);
47 assert_eq!(result, vec!["echo hi"]);
48 }
49
50 #[test]
51 fn test_empty_content() {
52 let result = parse_bash_script("");
53 assert!(result.is_empty());
54 }
55}