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.
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
- escapeTableCell
- markdown.ts
- minimatch
- sdk
Source
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