Enhanced ESLint output formatters providing additional functionality beyond standard ESLint formatters, including fix previews and detailed error reporting.
Enhanced ESLint formatter that displays violations with fix previews and detailed output formatting.
/**
* Enhanced ESLint formatter with fix previews and rule documentation
* @param results - Array of ESLint results from linting process
* @returns Formatted string output for display
*/
function stylishFixesFormatter(results: ESLintResult[]): string;
interface ESLintResult {
/** Path to the file that was linted */
filePath: string;
/** Array of ESLint messages (violations) */
messages: ESLintMessage[];
/** Number of error-level violations */
errorCount: number;
/** Number of warning-level violations */
warningCount: number;
/** Source code of the file (if available) */
source?: string;
}
interface ESLintMessage {
/** Line number of the violation */
line: number;
/** Column number of the violation */
column: number;
/** ESLint rule ID that was violated */
ruleId: string;
/** Human-readable violation message */
message: string;
/** Severity level (1 = warning, 2 = error) */
severity: 1 | 2;
/** Automatic fix information (if available) */
fix?: ESLintFix;
}
interface ESLintFix {
/** Character range to replace [start, end] */
range: [number, number];
/** Text to insert at the specified range */
text: string;
}Usage Examples:
// Using with ESLint CLI
npx eslint --format node_modules/eslint-plugin-github/lib/formatters/stylish-fixes.js src/
// Using in package.json entry point
import stylishFixesFormatter from "eslint-plugin-github/lib/formatters/stylish-fixes.js";
// Process ESLint results
const formattedOutput = stylishFixesFormatter(eslintResults);
console.log(formattedOutput);The formatter provides several enhanced display features beyond standard ESLint output.
/**
* Formatter output features and capabilities
*/
interface FormatterFeatures {
/** Display relative file paths from project root */
relativeFilePaths: boolean;
/** Show rule documentation URLs when available */
ruleDocumentationLinks: boolean;
/** Display diff previews for fixable violations */
fixPreviews: boolean;
/** Show fix commands for automated repairs */
fixCommands: boolean;
/** Provide violation statistics summary */
statisticsSummary: boolean;
/** Use Unicode symbols for enhanced display */
unicodeSymbols: boolean;
}Example Output:
src/components/Button.js
23:15 github/no-blur (https://github.com/github/eslint-plugin-github/blob/main/docs/rules/no-blur.md)
Do not use element.blur(), instead restore the focus of a previous element.
45:8 github/no-inner-html (https://github.com/github/eslint-plugin-github/blob/main/docs/rules/no-inner-html.md)
innerHTML usage can lead to XSS vulnerabilities.
$ eslint --fix src/components/Button.js
--- src/components/Button.js
+++ src/components/Button.js
@@ -42,7 +42,7 @@
handleClick() {
this.processAction();
- element.innerHTML = '<span>Processing...</span>';
+ element.textContent = 'Processing...';
}
✖ 2 problems (2 errors, 0 warnings)The formatter integrates with ESLint rule documentation to provide helpful links.
/**
* Rule documentation integration functionality
*/
interface RuleDocumentationIntegration {
/** Get documentation URL for a specific rule */
getRuleDocumentationURL(ruleId: string): {
found: boolean;
url?: string;
};
/** Display rule links in formatted output */
displayRuleLinks: boolean;
/** Support for custom rule documentation URLs */
customRuleURLs?: Record<string, string>;
}Documentation URL Examples:
github/no-blur → https://github.com/github/eslint-plugin-github/blob/main/docs/rules/no-blur.mdgithub/authenticity-token → https://github.com/github/eslint-plugin-github/blob/main/docs/rules/authenticity-token.mdhttps://eslint.org/docs/rules/[rule-name]The formatter generates diff previews for violations that have automatic fixes available.
/**
* Fix preview and diff generation
*/
interface FixPreviewGeneration {
/** Generate diff preview for fixable violations */
generateDiffPreview(
originalSource: string,
fixedSource: string
): string;
/** Apply ESLint fixes to source code */
applyFixes(source: string, messages: ESLintMessage[]): {
output: string;
fixed: boolean;
};
/** Create temporary files for diff comparison */
createDiffFiles(original: string, fixed: string): {
originalPath: string;
fixedPath: string;
};
/** Execute system diff command */
executeDiffCommand(fileA: string, fileB: string): string;
}Diff Preview Example:
$ eslint --fix src/utils/helpers.js
--- a/src/utils/helpers.js
+++ b/src/utils/helpers.js
@@ -15,8 +15,8 @@
function processItems(items) {
- items.forEach(item => {
- processItem(item);
- });
+ for (const item of items) {
+ processItem(item);
+ }
}The formatter provides comprehensive statistics about linting results.
/**
* Statistics and summary generation
*/
interface StatisticsGeneration {
/** Calculate total violations across all files */
calculateTotalViolations(results: ESLintResult[]): {
totalProblems: number;
totalErrors: number;
totalWarnings: number;
};
/** Generate summary line with Unicode symbols */
generateSummaryLine(errors: number, warnings: number): string;
/** Handle pluralization for summary text */
pluralize(word: string, count: number): string;
/** Format final statistics output */
formatStatistics(
total: number,
errors: number,
warnings: number
): string;
}Statistics Examples:
✖ 1 problem (1 error, 0 warnings)
✖ 15 problems (8 errors, 7 warnings)
✓ No problems foundThe formatter processes ESLint results through a systematic pipeline.
/**
* File processing pipeline for formatter
*/
interface ProcessingPipeline {
/** Initialize output buffer */
initializeOutput(): string;
/** Process each file's results */
processFileResults(result: ESLintResult): string;
/** Format individual violation messages */
formatViolationMessage(message: ESLintMessage): string;
/** Generate fix previews for fixable violations */
generateFixSection(result: ESLintResult): string;
/** Append final statistics */
appendStatistics(
totalErrors: number,
totalWarnings: number
): string;
}Processing Flow:
interface FormatterConfiguration {
/** Project root path for relative file paths */
rootPath?: string;
/** Whether to show rule documentation URLs */
showRuleURLs?: boolean;
/** Whether to show fix previews */
showFixPreviews?: boolean;
/** Custom diff command (defaults to 'diff') */
diffCommand?: string;
/** Diff context lines (defaults to 5) */
diffContext?: number;
}
interface DiffResult {
/** Diff output string */
output: string;
/** Whether diff was successful */
success: boolean;
/** Any error message */
error?: string;
}
interface FormatterOutput {
/** Total formatted output string */
output: string;
/** Number of files processed */
filesProcessed: number;
/** Total violations found */
totalViolations: number;
/** Whether any fixes were available */
hasFixableViolations: boolean;
}