Skip to content

Commit 7501ac1

Browse files
committed
feat: proper verbose/debug flag support and updated documentation
1 parent e127341 commit 7501ac1

4 files changed

Lines changed: 58 additions & 19 deletions

File tree

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,19 @@ cd cmd && go build -o codesleuth && cd ..
5757

5858
```bash
5959
# Analyze a COBOL file or directory (basic usage)
60-
./cmd/codesleuth analyze path/to/your/cobol/files
60+
./cmd/codesleuth.exe analyze path/to/your/cobol/files
6161

62-
# Enable verbose output
63-
./cmd/codesleuth analyze --verbose path/to/your/cobol/files
62+
# Enable verbose output (high-level extra info, logs to stderr)
63+
./cmd/codesleuth.exe analyze --verbose path/to/your/cobol/files
64+
65+
# Enable debug output (detailed trace/internal state, logs to stderr)
66+
./cmd/codesleuth.exe analyze --debug path/to/your/cobol/files
6467

6568
# Analyze a single file
66-
./cmd/codesleuth analyze program.cbl
69+
./cmd/codesleuth.exe analyze program.cbl
6770

6871
# Output analysis to a Markdown file
69-
./cmd/codesleuth analyze path/to/your/cobol/files > analysis_report.md
70-
71-
# Analyze with debug information (verbose + debug)
72-
./cmd/codesleuth analyze --verbose --debug complex-program.cbl
72+
./cmd/codesleuth.exe analyze path/to/your/cobol/files > analysis_report.md
7373
```
7474

7575
---

cmd/main.go

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ import (
1212
)
1313

1414
var verbose bool
15+
var debug bool
1516

1617
func init() {
17-
analyzeCmd.Flags().BoolVar(&verbose, "verbose", false, "Enable verbose debug output")
18+
analyzeCmd.Flags().BoolVar(&verbose, "verbose", false, "Enable verbose output")
19+
analyzeCmd.Flags().BoolVar(&debug, "debug", false, "Enable debug output")
1820
}
1921

2022
func main() {
@@ -59,8 +61,17 @@ var analyzeCmd = &cobra.Command{
5961
if verbose {
6062
parserArgs = append(parserArgs, "--verbose")
6163
}
62-
cmd := exec.Command(parserArgs[0], parserArgs[1:]...)
63-
output, err := cmd.Output()
64+
if debug {
65+
parserArgs = append(parserArgs, "--debug")
66+
}
67+
parserCmd := exec.Command(parserArgs[0], parserArgs[1:]...)
68+
var parserStdout, parserStderr strings.Builder
69+
parserCmd.Stdout = &parserStdout
70+
parserCmd.Stderr = &parserStderr
71+
err := parserCmd.Run()
72+
if (verbose || debug) && parserStderr.Len() > 0 {
73+
fmt.Fprint(os.Stderr, parserStderr.String())
74+
}
6475
if err != nil {
6576
fmt.Printf("Error running parser on %s: %v\n", f, err)
6677
continue
@@ -69,28 +80,41 @@ var analyzeCmd = &cobra.Command{
6980
ProgramName string `json:"program_name"`
7081
SourceFile string `json:"source_file"`
7182
}
72-
if err := json.Unmarshal(output, &ir); err != nil {
83+
if err := json.Unmarshal([]byte(parserStdout.String()), &ir); err != nil {
7384
fmt.Printf("Error parsing IR JSON for %s: %v\n", f, err)
7485
continue
7586
}
7687
fmt.Printf("Parsed: %s (program_name: %s)\n", ir.SourceFile, ir.ProgramName)
7788

7889
// Call Rust summarizer binary
79-
sumCmd := exec.Command("..\\summarizer\\target\\release\\summarizer.exe")
90+
sumArgs := []string{"..\\summarizer\\target\\release\\summarizer.exe"}
91+
if verbose {
92+
sumArgs = append(sumArgs, "--verbose")
93+
}
94+
if debug {
95+
sumArgs = append(sumArgs, "--debug")
96+
}
97+
sumCmd := exec.Command(sumArgs[0], sumArgs[1:]...)
98+
var sumStdout, sumStderr strings.Builder
99+
sumCmd.Stdout = &sumStdout
100+
sumCmd.Stderr = &sumStderr
80101
sumIn, err := sumCmd.StdinPipe()
81102
if err != nil {
82103
fmt.Printf("Error getting stdin pipe for Rust summarizer for %s: %v\n", f, err)
83104
continue
84105
}
85106
go func() {
86-
sumIn.Write(output)
107+
sumIn.Write([]byte(parserStdout.String()))
87108
sumIn.Close()
88109
}()
89-
summary, err := sumCmd.CombinedOutput()
110+
err = sumCmd.Run()
111+
if (verbose || debug) && sumStderr.Len() > 0 {
112+
fmt.Fprint(os.Stderr, sumStderr.String())
113+
}
90114
if err != nil {
91115
fmt.Printf("Rust summarizer failed for %s: %v\n", f, err)
92116
}
93-
fmt.Println(string(summary))
117+
fmt.Println(sumStdout.String())
94118
}
95119
// TODO: Call Rust parser and Python pipeline here
96120
},

parser/src/main.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ struct Args {
1616
/// Enable verbose debug output
1717
#[arg(long)]
1818
verbose: bool,
19+
/// Enable debug output
20+
#[arg(long)]
21+
debug: bool,
1922
}
2023

2124
// static RE_IDENT_DIV: Lazy<Regex> = Lazy::new(|| Regex::new(r"(?i)^\s*IDENTIFICATION DIVISION\s*\.?$").unwrap());
@@ -690,7 +693,10 @@ fn main() {
690693
call_graph,
691694
control_flow_graph,
692695
};
693-
if args.verbose {
696+
if args.debug {
697+
eprintln!("[DEBUG] Full IR: {}", serde_json::to_string_pretty(&ir).unwrap());
698+
// Add more detailed debug output here as needed
699+
} else if args.verbose {
694700
eprintln!("[VERBOSE] Parsed IR: {}", serde_json::to_string_pretty(&ir).unwrap());
695701
}
696702
println!("{}", serde_json::to_string_pretty(&ir).unwrap());

summarizer/src/main.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ struct Args {
2121
/// Enable verbose output
2222
#[arg(short, long)]
2323
verbose: bool,
24+
25+
/// Enable debug output
26+
#[arg(long)]
27+
debug: bool,
2428
}
2529

2630
static COBOL_KEYWORDS: Lazy<HashSet<&'static str>> = Lazy::new(|| {
@@ -211,8 +215,6 @@ fn get_str(val: &Option<serde_json::Value>) -> &str {
211215
}
212216
}
213217

214-
215-
216218
fn format_value(val: &Option<serde_json::Value>) -> String {
217219
if let Some(v) = val {
218220
match v {
@@ -740,6 +742,13 @@ fn main() -> io::Result<()> {
740742
Box::new(io::stdout())
741743
};
742744

745+
if args.debug {
746+
eprintln!("[DEBUG] IR: {:#?}", ir);
747+
// Add more detailed debug output here as needed
748+
} else if args.verbose {
749+
eprintln!("[VERBOSE] Program name: {}", ir.program_name.as_deref().unwrap_or("UNKNOWN"));
750+
}
751+
743752
print_program_info(&mut output, &ir)?;
744753

745754
if let Some(data_div) = &ir.data_division {

0 commit comments

Comments
 (0)