Skip to main content

specfold_core/config/
starter.rs

1//! The spec.toml `spec init` writes for a new project.
2
3pub struct StarterKind {
4    pub pattern: String,
5    pub id: String,
6    pub manifest: bool,
7}
8
9pub fn render(root_owner: &str, kinds: &[StarterKind]) -> String {
10    let mut s = String::new();
11    s.push_str("# specfold configuration. Run `spec explain config` for every key.\n");
12    s.push_str("[spec]\nschema = 1\n\n[owners]\n");
13    s.push_str(&format!("root = \"{root_owner}\"\n"));
14    for k in kinds {
15        s.push_str(&format!(
16            "\n[[owners.kinds]]\npattern = \"{}\"\nid = \"{}\"\nmanifest = {}\n",
17            k.pattern, k.id, k.manifest
18        ));
19    }
20    s.push_str(concat!(
21        "\n# Plain markdown outside documents whose <!-- spec:count --> markers N1 keeps current.\n",
22        "# [check]\n",
23        "# count_paths = [\"README.md\", \"docs/**/*.md\"]\n",
24    ));
25    s
26}
27
28#[cfg(test)]
29mod tests {
30    #[test]
31    fn the_starter_shows_count_paths_commented_out_and_still_parses() {
32        let s = super::render("ws", &[]);
33        assert!(s.contains("# count_paths = ["), "{s}");
34        let v: toml::Value = toml::from_str(&s).unwrap();
35        assert!(v.get("check").is_none());
36    }
37}