コンテンツにスキップ

classifyImpact

指定したファイルの変更で影響を受けるファイルを、直接参照(1 ホップ)と 推移的参照(2 ホップ以上)に分類して返します。直接参照には参照回数も付与されます。

getImpactSet はフラットなリストを返すため、「直接見直す必要があるファイル」と「念のため確認すべきファイル」を区別できません。classifyImpact は影響を 2 段階に分け、推移的参照には経由した直接ファイル(via)も付けるため、レビュー優先度や経路の可視化に使えます。

MCP の impact-analysis ツールはこの関数の結果をそのまま整形して返しています。

function classifyImpact(
graph: ContextGraph,
filePath: string,
): {
directlyAffected: { file: string; references: number }[];
transitivelyAffected: { file: string; via: string }[];
};
パラメータ必須説明
graphContextGraphbuildContextGraph で構築したグラフ
filePathstring影響範囲を調べたいファイルのパス

オブジェクトを返します。

  • directlyAffectedfilePath を直接参照しているファイル。references は同一ソース内の参照回数(同じファイルを複数箇所からリンクしている場合の合計)。ファイルパス順にソート
  • transitivelyAffected — 直接ではないが、間接的に到達するファイル。via は経路上で最も近い「直接影響を受けたファイル」。ファイルパス順にソート
import { buildContextGraph, classifyImpact, loadDocuments } from "@contextlint/core";
const documents = loadDocuments(["docs/**/*.md"]);
const graph = buildContextGraph(documents);
const impact = classifyImpact(graph, "docs/architecture.md");
console.log(`直接影響: ${impact.directlyAffected.length}`);
for (const item of impact.directlyAffected) {
console.log(` - ${item.file} (${item.references} 参照)`);
}
console.log(`推移的影響: ${impact.transitivelyAffected.length}`);
for (const item of impact.transitivelyAffected) {
console.log(` - ${item.file} (経由: ${item.via})`);
}