or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cli-interface.mdconfiguration-management.mdcore-processing.mdindex.mdoutput-formatting.mdresult-reporting.mdrules-system.md
tile.json

tessl/npm-solhint

Solidity code linter providing security and style guide validations for smart contract development

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/solhint@6.0.x

To install, run

npx @tessl/cli install tessl/npm-solhint@6.0.0

index.mddocs/

Solhint

Solhint is a comprehensive linting tool specifically designed for Solidity smart contract development. It offers both security and style guide validations, helping developers identify potential vulnerabilities, enforce coding standards, and improve code quality in Ethereum smart contracts. The tool supports configurable rulesets with recommended defaults, inline comment-based rule configuration, automatic fixing for certain issues, caching for improved performance, and multiple output formats including JSON and SARIF.

Package Information

  • Package Name: solhint
  • Package Type: npm
  • Language: JavaScript
  • Installation: npm install -g solhint

Core Imports

const { processStr, processFile, processPath } = require('solhint');

For library modules:

const { loadConfig, applyExtends } = require('solhint/lib/config/config-file');
const Reporter = require('solhint/lib/reporter');

Basic Usage

CLI Usage

# Initialize configuration
solhint --init

# Lint all Solidity files in contracts directory
solhint 'contracts/**/*.sol'

# Lint with specific configuration
solhint -c .solhint.json contracts/MyToken.sol

# Auto-fix issues where possible
solhint --fix 'contracts/**/*.sol'

Programmatic Usage

const { processStr, processFile } = require('solhint');

// Process Solidity source code string
const sourceCode = 'contract Example { function test() public {} }';
const config = { rules: { 'func-visibility': 'error' } };
const report = processStr(sourceCode, config, 'Example.sol');

console.log('Errors:', report.errorCount);
console.log('Warnings:', report.warningCount);
console.log('Messages:', report.messages);

// Process a single file
const fileReport = processFile('./contracts/Token.sol');
console.log('File path:', fileReport.filePath);

Architecture

Solhint is built around several key components:

  • Processing Engine: Core functions (processStr, processFile, processPath) that orchestrate linting workflow
  • AST Parser: Uses @solidity-parser/parser to parse Solidity code into Abstract Syntax Trees
  • Rule System: 64+ rules organized into 7 categories (security, naming, best-practices, etc.)
  • Reporter: Collects and manages linting results with severity levels and metadata
  • Configuration System: Hierarchical configuration loading with extends support and rule customization
  • Formatter System: Multiple output formats (stylish, json, table, compact, unix, tap, sarif)
  • CLI Interface: Command-line tool with multiple commands and extensive options

Capabilities

Core Processing

Main linting functions for processing Solidity source code at different levels - from strings to files to directory patterns.

function processStr(inputStr, config = {}, fileName = '');
function processFile(file, config, rootDir = process.cwd(), explicitConfigPath);
function processPath(pattern, config, rootDir = process.cwd(), explicitConfigPath);

// Cache Management APIs
function readCache(cachePath);
function writeCache(cachePath, cacheData);  
function shouldLint(filePath, content, config, cacheData);
function updateCacheEntry(filePath, content, config, cacheData);

Core Processing

Result Reporting

Reporter system for collecting, managing, and accessing linting results with severity levels and structured output.

class Reporter {
  constructor(tokens, config);
  addReport(line, column, severity, message, ruleId, fix);
  error(ctx, ruleId, message, fix);
  warn(ctx, ruleId, message, fix);
  get errorCount();
  get warningCount();
  get messages();
}

Result Reporting

Configuration Management

Configuration loading and management system with hierarchical config resolution and rule inheritance.

function loadConfig(configFile);
function loadConfigForFile(filePath, rootDir, explicitConfigPath);
function applyExtends(config, getter);
function validate(config);

Configuration Management

Rules System

Comprehensive rule system with 64+ rules across 7 categories for security, style, and best practices validation.

function checkers(reporter, configVals, inputSrc, tokens, fileName);

Rules System

Output Formatting

Multiple formatter functions for different output formats and integration needs.

function stylish(reports);
function json(reports);
function table(reports);
function compact(reports);
function unix(reports);
function tap(reports);
function sarif(reports);

Output Formatting

CLI Interface

Command-line interface with main command and subcommands for various linting operations.

solhint [options] <file> [...other_files]
solhint stdin [--filename <name>]
solhint init-config
solhint list-rules

CLI Interface

Types

interface LintingReport {
  line: number;
  column: number;
  severity: number;
  message: string;
  ruleId: string;
  fix?: Function;
}

interface ConfigObject {
  rules?: { [ruleId: string]: string | [string, ...any[]] };
  extends?: string | string[];
  excludedFiles?: string[];
  plugins?: string[];
  cache?: boolean;
  cacheLocation?: string;
}

interface ProcessingResult {
  reports: LintingReport[];
  file?: string;
  filePath?: string;
  errorCount: number;
  warningCount: number;
  messages: LintingReport[];
  skipped?: boolean;
}

Constants

const SEVERITY = {
  ERROR: 2,
  WARN: 3
};

const EXIT_CODES = {
  OK: 0,
  REPORTED_ERRORS: 1,
  BAD_OPTIONS: 255
};