Home / File/ dead-code.ts — dead-code-hunter Source File

dead-code.ts — dead-code-hunter Source File

Architecture documentation for dead-code.ts, a typescript file in the dead-code-hunter codebase. 4 imports, 3 dependents.

File typescript GitHubAction ActionEntry 4 imports 3 dependents 3 functions

Entity Profile

Dependency Diagram

graph LR
  a3eb2ced_926a_5c50_f1b5_fa2919e7f56f["dead-code.ts"]
  69dfda68_6eec_94c2_26a1_1f0c92909037["markdown.ts"]
  a3eb2ced_926a_5c50_f1b5_fa2919e7f56f --> 69dfda68_6eec_94c2_26a1_1f0c92909037
  b97956a9_58f7_affa_6ccd_bf5dd2eccf89["escapeTableCell"]
  a3eb2ced_926a_5c50_f1b5_fa2919e7f56f --> b97956a9_58f7_affa_6ccd_bf5dd2eccf89
  9adfa83d_0167_0bae_537f_b437ff945a7b["minimatch"]
  a3eb2ced_926a_5c50_f1b5_fa2919e7f56f --> 9adfa83d_0167_0bae_537f_b437ff945a7b
  6ae50d5c_b484_7217_ed63_710361d1134f["sdk"]
  a3eb2ced_926a_5c50_f1b5_fa2919e7f56f --> 6ae50d5c_b484_7217_ed63_710361d1134f
  ad094038_3d51_d844_e2ec_7f4735d9d0f1["dead-code.test.ts"]
  ad094038_3d51_d844_e2ec_7f4735d9d0f1 --> a3eb2ced_926a_5c50_f1b5_fa2919e7f56f
  e24069d3_01df_965c_4846_7b5d20bf2edd["integration.test.ts"]
  e24069d3_01df_965c_4846_7b5d20bf2edd --> a3eb2ced_926a_5c50_f1b5_fa2919e7f56f
  1916269f_4df6_c8ce_0c1a_a8a66a4fb245["index.ts"]
  1916269f_4df6_c8ce_0c1a_a8a66a4fb245 --> a3eb2ced_926a_5c50_f1b5_fa2919e7f56f
  style a3eb2ced_926a_5c50_f1b5_fa2919e7f56f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { minimatch } from 'minimatch';
import type { DeadCodeCandidate, DeadCodeAnalysisResponse, DeadCodeAnalysisMetadata } from '@supermodeltools/sdk';
import { escapeTableCell } from './markdown';

export type { DeadCodeCandidate, DeadCodeAnalysisResponse, DeadCodeAnalysisMetadata };

/**
 * Filters dead code candidates by user-provided ignore patterns.
 * The API handles all analysis server-side; this is purely for
 * client-side post-filtering on file paths.
 */
export function filterByIgnorePatterns(
  candidates: DeadCodeCandidate[],
  ignorePatterns: string[]
): DeadCodeCandidate[] {
  if (ignorePatterns.length === 0) return candidates;
  return candidates.filter(c => !ignorePatterns.some(p => minimatch(c.file, p)));
}

/**
 * Scopes dead code candidates to only files present in the changed files set.
 * Used to limit PR comments to findings relevant to the current diff.
 */
export function filterByChangedFiles(
  candidates: DeadCodeCandidate[],
  changedFiles: Set<string>
): DeadCodeCandidate[] {
  return candidates.filter(c => changedFiles.has(c.file));
}

/**
 * Formats dead code analysis results as a GitHub PR comment.
 */
export function formatPrComment(
  candidates: DeadCodeCandidate[],
  metadata?: DeadCodeAnalysisMetadata
): string {
  if (candidates.length === 0) {
    return `## Dead Code Hunter

No dead code found! Your codebase is clean.`;
  }

  const rows = candidates
    .slice(0, 50)
    .map(dc => {
      const lineInfo = dc.line ? `L${dc.line}` : '';
      const fileLink = dc.line ? `${dc.file}#L${dc.line}` : dc.file;
      const badge = dc.confidence === 'high' ? ':red_circle:' :
                    dc.confidence === 'medium' ? ':orange_circle:' : ':yellow_circle:';
      return `| \`${escapeTableCell(dc.name)}\` | ${dc.type} | ${fileLink} | ${lineInfo} | ${badge} ${dc.confidence} |`;
    })
    .join('\n');

  let comment = `## Dead Code Hunter

Found **${candidates.length}** potentially unused code element${candidates.length === 1 ? '' : 's'}:

| Name | Type | File | Line | Confidence |
|------|------|------|------|------------|
${rows}`;

  if (candidates.length > 50) {
    comment += `\n\n_...and ${candidates.length - 50} more. See action output for full list._`;
  }

  if (metadata) {
    comment += `\n\n<details><summary>Analysis summary</summary>\n\n`;
    comment += `- **Total declarations analyzed**: ${metadata.totalDeclarations}\n`;
    comment += `- **Dead code candidates**: ${metadata.deadCodeCandidates}\n`;
    comment += `- **Alive code**: ${metadata.aliveCode}\n`;
    comment += `- **Analysis method**: ${metadata.analysisMethod}\n`;
    if (metadata.transitiveDeadCount != null) {
      comment += `- **Transitive dead**: ${metadata.transitiveDeadCount}\n`;
    }
    if (metadata.symbolLevelDeadCount != null) {
      comment += `- **Symbol-level dead**: ${metadata.symbolLevelDeadCount}\n`;
    }
    comment += `\n</details>`;
  }

  comment += `\n\n---\n_Powered by [Supermodel](https://supermodeltools.com) dead code analysis_`;

  return comment;
}

Domain

Subdomains

Dependencies

Frequently Asked Questions

What does dead-code.ts do?
dead-code.ts is a source file in the dead-code-hunter codebase, written in typescript. It belongs to the GitHubAction domain, ActionEntry subdomain.
What functions are defined in dead-code.ts?
dead-code.ts defines 3 function(s): filterByChangedFiles, filterByIgnorePatterns, formatPrComment.
What does dead-code.ts depend on?
dead-code.ts imports 4 module(s): escapeTableCell, markdown.ts, minimatch, sdk.
What files import dead-code.ts?
dead-code.ts is imported by 3 file(s): dead-code.test.ts, index.ts, integration.test.ts.
Where is dead-code.ts in the architecture?
dead-code.ts is located at src/dead-code.ts (domain: GitHubAction, subdomain: ActionEntry, directory: src).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free