JavaScript source analysis and visualizer that generates detailed complexity reports
npx @tessl/cli install tessl/npm-plato@1.7.0Plato is a JavaScript source analysis and visualizer that generates detailed complexity reports for JavaScript projects. It analyzes JavaScript files to calculate cyclomatic complexity, Halstead metrics, maintainability indices, and other code quality measurements, then produces interactive HTML reports with visualizations including charts and graphs.
npm install platoconst plato = require('plato');For individual functions:
const { inspect, getOverviewReport } = require('plato');const plato = require('plato');
// Analyze JavaScript files and generate HTML reports
plato.inspect(['src/**/*.js'], 'reports', {
title: 'My Project Analysis',
recurse: true,
jshint: {
node: true,
browser: true
}
}, function(reports) {
console.log('Analysis complete!');
console.log(`Analyzed ${reports.length} files`);
// Generate overview report
const overview = plato.getOverviewReport(reports);
console.log('Overall maintainability:', overview.summary.average.maintainability);
});Plato is built around several key components:
inspect() function orchestrates file analysis and report generationCore analysis functions for integrating Plato into custom workflows and applications.
function inspect(files, outputDir, options, done);
function getOverviewReport(reports);Complete CLI for batch analysis, CI/CD integration, and automated reporting workflows.
function exec(options, done);Helper functions for file operations, JSON processing, and output formatting.
function findCommonBase(files);
function formatJSON(report);
function readJSON(file, options);
function stripComments(str);
function escapeHTML(html);Data models for tracking code quality metrics over time and maintaining historical analysis data.
class History
class OverviewHistory extends History
class FileHistory extends HistorySpecialized analysis modules for different code quality metrics and linting integration.
// Complexity Reporter
function process(source, options, reportInfo);
// JSHint Reporter
function process(source, options);
// ESLint Reporter
function process(source, options);interface AnalysisOptions {
/** Recursively search directories */
recurse?: boolean;
/** Quiet mode (errors only) */
q?: boolean;
/** Report title */
title?: string;
/** File exclusion regex */
exclude?: RegExp;
/** Custom report date */
date?: Date;
/** JSHint configuration */
jshint?: Object;
/** ESLint configuration */
eslint?: Object;
/** Skip empty lines from line count */
noempty?: boolean;
}class Logger {
constructor(level: number);
static TRACE: 0;
static DEBUG: 1;
static INFO: 2;
static WARNING: 3;
static ERROR: 4;
trace(...args: any[]): void;
debug(...args: any[]): void;
info(...args: any[]): void;
warning(...args: any[]): void;
error(...args: any[]): void;
}