Skip to content

Commit 5e7930d

Browse files
hyperpolymathclaude
andcommitted
feat: add scan subcommand — recommends applicable isers per repo
Implements `iseriser scan [--path PATH] [--json]` which walks a repo, detects 15 signal categories, and recommends which hyperpolymath -iser tools should be applied. Output is a confidence-sorted table (high → medium → low) or JSON. Covered isers: k9iser, eclexiaiser, wokelangiser, alloyiser, tlaiser, idrisiser, typedqliser, chapeliser, ephapaxiser, verisimiser, otpiser, ponyiser, dafniser, futharkiser, lustreiser. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent baaa134 commit 5e7930d

5 files changed

Lines changed: 643 additions & 0 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ anyhow = "1"
1818
thiserror = "2"
1919
handlebars = "6"
2020
walkdir = "2"
21+
serde_json = "1"
2122

2223
[dev-dependencies]
2324
tempfile = "3"

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
pub mod abi;
2121
pub mod codegen;
2222
pub mod manifest;
23+
pub mod scan;
2324

2425
pub use abi::{
2526
CompilationTarget, GeneratedFile, GeneratedRepo, LanguageModel, Paradigm, ScaffoldResult,

src/main.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use clap::{Parser, Subcommand};
1919
mod abi;
2020
mod codegen;
2121
mod manifest;
22+
mod scan;
2223

2324
/// iseriser — Meta-framework: generate new -iser projects
2425
#[derive(Parser)]
@@ -53,6 +54,15 @@ enum Commands {
5354
#[arg(short, long, default_value = "iseriser.toml")]
5455
manifest: String,
5556
},
57+
/// Scan a repository and recommend applicable -iser tools.
58+
Scan {
59+
/// Path to the repository to scan (default: current directory).
60+
#[arg(short, long, default_value = ".")]
61+
path: String,
62+
/// Output recommendations as JSON instead of a table.
63+
#[arg(long, default_value_t = false)]
64+
json: bool,
65+
},
5666
}
5767

5868
fn main() -> Result<()> {
@@ -82,6 +92,14 @@ fn main() -> Result<()> {
8292
let m = manifest::load_manifest(&manifest)?;
8393
manifest::print_info(&m);
8494
}
95+
Commands::Scan { path, json } => {
96+
let recommendations = scan::scan_repo(&path)?;
97+
if json {
98+
println!("{}", serde_json::to_string_pretty(&recommendations)?);
99+
} else {
100+
scan::print_table(&recommendations);
101+
}
102+
}
85103
}
86104
Ok(())
87105
}

0 commit comments

Comments
 (0)