source

package
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 6, 2026 License: MIT Imports: 21 Imported by: 0

Documentation

Overview

Package source は走査対象(ファイルツリー・git diff)の列挙を提供する。

Index

Constants

View Source
const MaxFileSize = 5 * 1024 * 1024

MaxFileSize を超えるファイルは走査しない。

Variables

This section is empty.

Functions

func DecodeEscapedView

func DecodeEscapedView(text string) (string, bool)

DecodeEscapedView は decodeEscapedViews(JSON \uXXXX エスケープ → HTML 数値文字参照 → URL パーセントエンコードの直列デコードチェーン)の薄い エクスポートラッパ。

用途: scan --stdin 経路(外部連携用、cmd/jp-pii-detect/main.go)から呼ぶ ためにエクスポートしている。フルスキャン(scanFiles)は同一パッケージ内 なので decodeEscapedViews を直接呼ぶが、cmd パッケージから package 外の 非公開関数は呼べない。stdin はまさに JSON をそのままパイプで流し込む 用途(json.dumps(ensure_ascii=True) の出力や CI/エージェント連携)や、 URL・HTML を経由したログの貼り付けが多く、これらのエスケープ表記に 隠れた氏名・住所等の PII を検出できる価値が高いため、フルスキャン専用 だったこの復号ビューを stdin 経路にも広げる。

位置セマンティクス: decodeJSONUnicodeEscapes の doc comment を参照 (decodeHTMLNumericEntities・decodePercentEncoding も同じ性質を持つ)。 ok == true の場合、呼び出し側は以後の走査・オフセット計算(例: detect.ScanContent と detect.ComputeOffsets)を必ず戻り値の text(復号後 テキスト)に対して行うこと。行番号は元テキストと一致するが、エスケープを 含む行の列・オフセットは復号後テキスト上の位置になり、元テキスト(stdin の生バイト列)上の位置とは対応しない。ok == false の場合は 1 箇所も 復号できなかったことを意味し、呼び出し側は元の text をそのまま使ってよい (decodeUTF16 と同じ「置き換え」方式で、変更なしを表す)。

復号を無効にする opt-out フラグは現時点では設けない(フルスキャン側にも 無く、両経路の対称性を保つため)。将来的に必要になれば、呼び出し側で フラグを追加し本関数の呼び出し自体を条件分岐でスキップさせる形で拡張 できる。

func RepoRoot added in v0.5.0

func RepoRoot() string

RepoRoot はリポジトリルートの絶対パスを返す(リポジトリ外なら空文字列)。 cmd/jp-pii-detect が baseline の fingerprint 用パス正規化(ルート相対化)に 使う公開ラッパ。

func ScanDiff

func ScanDiff(d *detect.Detector, cfg *config.Config, diffRange string) ([]detect.Finding, error)

ScanDiff は指定リビジョン範囲(例: origin/main...HEAD)の追加行を走査する(CI 用)。 CSV/TSV 列コンテキストの post-image ヘッダ・JSON/YAML オブジェクトスコープの post-image 全文は diffRange の右辺(post-image を指すリビジョン)から取得する。 diffRangePostRevision で解決できない場合(裸のリビジョンなど)は postImageRevOK=false となり、scanGitDiff はいずれの取得も試みず、列 コンテキストなし・オブジェクトスコープなしにフォールバックする。

func ScanPaths

func ScanPaths(d *detect.Detector, cfg *config.Config, paths []string) ([]detect.Finding, []error, error)

ScanPaths は指定パス配下のテキストファイルを走査する。 allowlist.paths は検出結果に報告するパス(走査ルートを含むスラッシュ 区切りパス)に加え、リポジトリルートからの相対パスに対しても評価する。 サブディレクトリから実行しても、ルートの設定に書いたルート相対の 正規表現(^testdata/ 等)が機能する。

個々のファイルの読み取りエラー(権限拒否・走査中の削除等)は致命的として 扱わない。該当ファイルをスキップして戻り値の warnings に集約し、他ファイルの 収集済み findings は失わずに返す。err は listFiles 自体の失敗(走査対象の ルートが存在しない等)のみを表す。

func ScanStaged

func ScanStaged(d *detect.Detector, cfg *config.Config) ([]detect.Finding, error)

ScanStaged は git のステージ済み変更の追加行を走査する(pre-commit 用)。 CSV/TSV 列コンテキストの post-image ヘッダ・JSON/YAML オブジェクトスコープの post-image 全文は `git show :<path>`(インデックスの stage 0 = ステージ済み 内容)で取得するため、postImageRevSpec は空文字を渡す(fetchCSVHeader 参照。 "" + ":path" = ":path")。

Types

type AddedLine

type AddedLine struct {
	File string
	Line int // 新ファイルでの行番号(1 始まり)
	Text string
}

AddedLine は diff 内の追加行。

func ParseDiff

func ParseDiff(diff string) []AddedLine

ParseDiff は unified diff から追加行(+ で始まる行)のみを抽出する。 hunk 単位の解析(parseDiffHunks)から追加行を平坦化した薄いラッパで、 既存の利用箇所・テストとの互換のために残している。

type ScanStats added in v0.4.3

type ScanStats struct {
	FilesDiscovered     int
	FilesScanned        int
	SkippedBinary       int
	SkippedTooLarge     int
	ExcludedPaths       int
	ExcludedDefaultDirs int
}

ScanStats はフルスキャンの完全性を利用者へ説明するための匿名集計。 パスや検出値は保持せず、走査・除外理由ごとの件数だけを返す。

func ScanPathsWithStats added in v0.4.3

func ScanPathsWithStats(d *detect.Detector, cfg *config.Config, paths []string) ([]detect.Finding, []error, ScanStats, error)

ScanPathsWithStats は ScanPaths と同じ走査を行い、走査完全性の匿名集計も返す。 既存 API の呼び出し元を壊さないため、ScanPaths はこの関数への薄い委譲として残す。

func (ScanStats) SkippedFiles added in v0.4.3

func (s ScanStats) SkippedFiles() int

SkippedFiles は列挙後に内容判定で走査しなかったファイル数を返す。 allowlist と既定除外ディレクトリは配下を列挙しないため含めない。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL