diff --git a/tools/hako_check.sh b/tools/hako_check.sh index 42ae11eb..03acd87a 100644 --- a/tools/hako_check.sh +++ b/tools/hako_check.sh @@ -17,10 +17,24 @@ fi fail=0 FORMAT="text" +EXTRA_ARGS="" -if [ "${1:-}" = "--format" ] && [ -n "${2:-}" ]; then - FORMAT="$2"; shift 2 || true -fi +# Parse optional flags (--format, --dead-code, --rules, etc.) +while [ $# -gt 0 ]; do + case "${1:-}" in + --format) + FORMAT="$2" + shift 2 || true + ;; + --dead-code|--rules|--no-ast|--debug) + EXTRA_ARGS="$EXTRA_ARGS $1" + shift + ;; + *) + break + ;; + esac +done list_targets() { local p="$1" if [ -d "$p" ]; then @@ -64,7 +78,7 @@ run_one() { HAKO_ENABLE_USING=1 \ NYASH_USING_AST=1 \ NYASH_NY_COMPILER_TIMEOUT_MS="${NYASH_NY_COMPILER_TIMEOUT_MS:-8000}" \ - "$BIN" --backend vm "$ROOT/tools/hako_check/cli.hako" -- "${args_arr[@]}" \ + "$BIN" --backend vm "$ROOT/tools/hako_check/cli.hako" -- "${args_arr[@]}" --format "$FORMAT" $EXTRA_ARGS \ >"/tmp/hako_lint_out_$$.log" 2>&1 || true local out rc out="$(cat "/tmp/hako_lint_out_$$.log")"; rc=0 diff --git a/tools/hako_check/cli.hako b/tools/hako_check/cli.hako index 46a1de72..6531aff9 100644 --- a/tools/hako_check/cli.hako +++ b/tools/hako_check/cli.hako @@ -132,6 +132,15 @@ static box HakoAnalyzerBox { local no_ast_eff = no_ast if want_ast == 1 { no_ast_eff = 0 } ir = HakoAnalysisBuilderBox.build_from_source_flags(text, p, no_ast_eff) + // Fail-Fast: Guard against void return from builder + if ir == null || ir == void { + ir = new MapBox() + ir.set("path", p) + ir.set("methods", new ArrayBox()) + ir.set("calls", new ArrayBox()) + ir.set("boxes", new ArrayBox()) + ir.set("entrypoints", new ArrayBox()) + } // Phase 156: Integrate MIR CFG if available if mir_json_content != null { ir.set("_mir_json_text", mir_json_content) } } else {