or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

binary-tools.mdconfigs.mdformatters.mdindex.mdplugin.mdrules.md
tile.json

formatters.mddocs/

Custom Formatters

Enhanced ESLint output formatters providing additional functionality beyond standard ESLint formatters, including fix previews and detailed error reporting.

Capabilities

Stylish Fixes Formatter

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);

Output Format Features

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)

Rule Documentation Integration

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-blurhttps://github.com/github/eslint-plugin-github/blob/main/docs/rules/no-blur.md
  • github/authenticity-tokenhttps://github.com/github/eslint-plugin-github/blob/main/docs/rules/authenticity-token.md
  • Standard ESLint rules → https://eslint.org/docs/rules/[rule-name]

Fix Preview Generation

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);
+  }
 }

Statistics and Summary

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 found

File Processing Pipeline

The 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:

  1. Initialize output buffer with newline
  2. For each file with violations:
    • Display relative file path
    • Format each violation with line:column, rule ID, and message
    • Show rule documentation URL if available
    • Generate fix preview if fixes are available
  3. Append final statistics summary
  4. Return formatted output string

Types

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;
}