CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-prettier-standard

Combines Prettier formatting with ESLint Standard linting into a unified command-line tool for JavaScript code quality.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

cli.mddocs/

CLI Interface

Command-line interface providing comprehensive options for formatting, linting, and processing files. The CLI supports various processing modes including staged files, changed files, and stdin processing.

Capabilities

Basic Command Usage

The prettier-standard command processes files according to specified options and patterns.

# Basic syntax
prettier-standard [<glob>]

# Examples
prettier-standard                           # Process all files in current repository
prettier-standard '**/*.js'                # Process all JavaScript files
prettier-standard 'src/**/*.{js,ts}'       # Process JS and TS files in src directory
prettier-standard --help                   # Show help information

Command Options

Format Options

--format        # Format files without linting (default behavior without --lint)
--lint          # Additionally lint code after formatting using ESLint Standard rules
--check         # Check formatting without modifying files, exit 1 if changes needed

Usage Examples:

# Just format files
prettier-standard --format '**/*.js'

# Format and lint
prettier-standard --lint '**/*.js'

# Check if files need formatting (CI/CD usage)
prettier-standard --check '**/*.js'
if [ $? -eq 0 ]; then
  echo "All files are properly formatted"
else
  echo "Some files need formatting"
fi

Git Integration Options

--staged        # Run only on Git staged files (useful for pre-commit hooks)
--changed       # Run only on files changed since HEAD
--since <rev>   # Run only on files changed since given revision/branch
--lines         # Run only on changed lines within files (experimental)

Usage Examples:

# Process staged files (pre-commit hook)
prettier-standard --lint --staged

# Process files changed since HEAD
prettier-standard --changed --lint

# Process files changed since master branch
prettier-standard --since master --lint

# Process files changed since specific commit
prettier-standard --since abc123 --lint

# Process only changed lines (experimental)
prettier-standard --lines --changed

Stdin Processing Options

--stdin                    # Force reading input from stdin
--stdin-filepath <path>    # Specify filename for stdin (affects config resolution)
--parser <parser>          # Force parser for stdin input (default: babel)

Usage Examples:

# Format code from stdin
echo 'function hello(){return"world";}' | prettier-standard --stdin

# Format with explicit parser
echo '.foo { color: "red"; }' | prettier-standard --parser css --stdin

# Format stdin with config resolution based on fake filename
echo 'const x:number=5' | prettier-standard --stdin --stdin-filepath fake.ts

# Check stdin formatting
echo 'function hello () { return "world" }' | prettier-standard --stdin --check

Package.json Integration

Scripts Integration

Common patterns for integrating with npm scripts:

{
  "scripts": {
    "format": "prettier-standard --format",
    "format:check": "prettier-standard --check",
    "lint": "prettier-standard --lint",
    "precommit": "prettier-standard --lint --staged"
  }
}

Lint-staged Integration

Using with lint-staged for pre-commit hooks:

{
  "scripts": {
    "precommit": "lint-staged"
  },
  "lint-staged": {
    "*.{js,ts,jsx,tsx}": ["prettier-standard --lint"],
    "*.{json,css,md}": ["prettier-standard --format"]
  }
}

Husky Integration

Complete pre-commit setup with Husky:

{
  "scripts": {
    "prepare": "husky install"
  },
  "lint-staged": {
    "*": ["prettier-standard --lint"]
  }
}

Create .husky/pre-commit:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged

Exit Codes

The CLI uses standard exit codes for different outcomes:

# Exit code 0: Success
prettier-standard --check '**/*.js'    # All files properly formatted
prettier-standard --lint '**/*.js'     # No formatting changes and no lint errors

# Exit code 1: Formatting or linting issues
prettier-standard --check '**/*.js'    # Some files need formatting
prettier-standard --lint '**/*.js'     # Lint errors found

# Exit code 2: Execution errors
prettier-standard --invalid-option     # Invalid command line options
prettier-standard 'invalid-glob['      # Invalid glob pattern

CI/CD Usage:

# Fail build if formatting is needed
prettier-standard --check '**/*.js' || exit 1

# Fail build if linting errors exist
prettier-standard --lint '**/*.js' || exit 1

# Combined check
prettier-standard --check --lint '**/*.js' && echo "Code quality checks passed"

Configuration Files

Prettier Configuration

The CLI respects .prettierrc files for formatting options:

{
  "semi": true,
  "singleQuote": false,
  "tabWidth": 4
}

Supported formats:

  • .prettierrc (JSON)
  • .prettierrc.json
  • .prettierrc.js
  • prettier.config.js
  • package.json (prettier field)

ESLint Configuration

When using --lint, ESLint configuration is read from:

{
  "rules": {
    "eqeqeq": "off",
    "no-console": "warn"
  },
  "env": {
    "node": true,
    "browser": true
  }
}

Supported formats:

  • .eslintrc.json
  • .eslintrc.js
  • .eslintrc (JSON)
  • package.json (eslintConfig field)

Ignore Files

.prettierignore - Files to exclude from formatting:

dist/
build/
**/*.min.js
coverage/
node_modules/

.eslintignore - Files to format but exclude from linting:

dist/
build/
**/*.min.js
coverage/

Editor Integration

Vim Integration

Using with ALE plugin:

Plug 'w0rp/ale'
let g:ale_fixers = {'javascript': ['prettier_standard']}
let g:ale_linters = {'javascript': ['']}
let g:ale_fix_on_save = 1

Sublime Text 3 Integration

  1. Install prettier-standard globally: npm install -g prettier-standard
  2. Find installation path: which prettier-standard
  3. Install SublimeJsPrettier plugin
  4. Configure in Sublime settings:
{
  "prettier_cli_path": "/usr/local/bin/prettier-standard"
}
  1. Use Command Palette: JsPrettier: Format Code

VS Code Integration

Create .vscode/settings.json:

{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "prettier.prettierPath": "./node_modules/prettier-standard"
}

Performance Tips

Glob Pattern Optimization

# Efficient: Specific patterns
prettier-standard 'src/**/*.{js,ts}'

# Less efficient: Overly broad patterns
prettier-standard '**/*'

# Most efficient: Process only changed files
prettier-standard --changed --lint

Large Repository Handling

# For large repos, use changed files
prettier-standard --since master --lint

# For staged files in pre-commit
prettier-standard --staged --lint

# Process specific directories
prettier-standard 'apps/frontend/src/**/*.js' --lint

Error Messages and Troubleshooting

Common Error Messages

# Invalid patterns
Error: Unable to expand glob pattern: Invalid glob pattern

# Git repository required
Error: No git repository detected...

# Syntax errors in files
SyntaxError: Unexpected token

# Module not found (internal error)
Error: Module not found: eslint-config-standard

Debugging Options

While there are no explicit debug flags, you can use verbose output:

# Check which files would be processed
prettier-standard --check '**/*.js' 2>&1 | grep -E '\.(js|ts|jsx|tsx)$'

# Test with a single file first
prettier-standard --check 'path/to/single/file.js'

# Use explicit patterns instead of defaults
prettier-standard 'src/**/*.js' 'test/**/*.js' --lint

Common Issues and Solutions

Issue: Files in node_modules being processed

# Solution: Use explicit patterns or check .prettierignore
prettier-standard 'src/**/*.js' 'lib/**/*.js'

Issue: TypeScript files not being processed

# Solution: Include TypeScript patterns
prettier-standard '**/*.{js,ts,jsx,tsx}' --lint

Issue: Pre-commit hook failing

# Solution: Ensure staged files are committed after formatting
git add .
prettier-standard --staged --lint

Install with Tessl CLI

npx tessl i tessl/npm-prettier-standard

docs

cli.md

file-processing.md

formatting.md

index.md

tile.json