Regression: scan.Run is a 248-line function in the engine's most-changed file
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
Start with Run in internal/scan/runner.go (lines 556-803) and the deferred "done not sent" closure at lines 596-601, then trace each early return. Before moving any code, add or confirm tests in go test ./internal/scan/ that each early exit (scope refusal, recursion ceiling, preflight failure, wildcard without force, cancellation during preflight) emits exactly one done event. Done means those tests pass and the preflight extraction is a pure move with no behaviour change.
索引モデルが issue の本文から書いたものです。
説明
Summary
scan.Run is a 248-line function in the engine's most-changed file. A few other functions are past 100 lines. The configured linters (no funlen or gocyclo) do not flag any of them.
Where
internal/scan/runner.go:556-803(Run): it does limiter setup, scope refusal, recursion ceiling, resolver preflight, wildcard detection, wiring for the ticker, dispatcher and workers, retry pass, and the final snapshot. Every early return depends on the deferred "done not sent" closure at:596-601.runner.gohas 1,064 lines (the largest Go file), and 44 of the last 500 commits touched it.- Counters mix raw
*int64withatomic.LoadInt64(processed, found, total) andatomic.Int64(queriesSent). - Other hotspots:
internal/tui/form.go:366validate: 116 linespkg/subenum/subenum.go:563options: 114 linesmain_session.go:602scanOneTarget: 95 lines
Why it hurts now
Every new preflight feature (AXFR, pools, auto-rate, deadline) landed inside Run. The phase order and the "exactly one done event" contract (#99, #23) are easy to break with each edit.
Plan
- Tests first: confirm that each early exit (scope refusal, ceiling refusal, preflight failure, wildcard without force, cancellation during preflight) emits exactly one done event. Add any that are missing.
- Extract
preflight(ctx, &cfg, events) (wildcardRoot bool, fp *fingerprint, ok bool)as a pure move. - Extract
startTickerandstartWorkers. - Move
processed,foundandtotaltoatomic.Int64fields onscanState. - Consider enabling
funlenwith a generous limit, to stop new 200-line functions.
#159 lifted the dispatcher out of scan.Run and was closed. Since then, preflight, wildcard, retry, pool and deadline work has grown Run back to 248 lines.
Getting started
- Relevant files:
internal/scan/runner.go - How to run tests:
go test ./internal/scan/(lint withgolangci-lint run ./...) - Related docs:
docs/ARCHITECTURE.md
Filed by repo-audit/full-audit at 3f671b2. Severity: medium. Effort: M. audit-key: tech-debt|internal/scan/runner.go|Run
- 主要言語
- Go
- スター
- 1
- フォーク
- 1
- 平均マージ
- 7時間 48分
- マージ済み PR(30日)
- 6
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
TMHSDigital/subenum のほかの issue
-
enhancement good first issue severity: low
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
TMHSDigital/subenum#275 ·
メンテナーはふだん 1 日以内に返信
-
good first issue severity: low testing
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
TMHSDigital/subenum#260 ·
メンテナーはふだん 1 日以内に返信
-
community documentation good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
TMHSDigital/subenum#135 ·
メンテナーはふだん 1 日以内に返信
-
enhancement help wanted severity: medium
難易度 3/5 1〜2日 初心者へのやさしさ 55/100
TMHSDigital/subenum#274 ·
メンテナーはふだん 1 日以内に返信
-
enhancement help wanted severity: medium
難易度 3/5 1〜2日 初心者へのやさしさ 55/100
TMHSDigital/subenum#273 ·
メンテナーはふだん 1 日以内に返信
TMHSDigital/subenum の issue をすべて見る
似ている issue
-
area: interop area: sip-core v3
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
fonoster/routr#705 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
deadfin-org/deadfin#35 ·
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
-
enhancement priority: low
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
labmonkeys-space/nl6#1037 ·
メンテナーはふだん 1 日以内に返信
-
Setup Guide Go tab: say it needs Go 1.26 (the unversioned go get pulls OpenTelemetry Go v1.47.0)オープンenhancement follow-up
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
メンテナーはふだん 1 日以内に返信