ls-lint

Version Notice: This skill documents ls-lint v2.3 specifically. Before proceeding, verify the installed version matches:

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "ls-lint" with this command: npx skills add paulrberg/agent-skills/paulrberg-agent-skills-ls-lint

ls-lint v2.3

Version Notice: This skill documents ls-lint v2.3 specifically. Before proceeding, verify the installed version matches:

ls-lint --version

or

npx @ls-lint/ls-lint --version

If a different version is installed, stop and consult the official documentation for that version at https://ls-lint.org or the GitHub repository at https://github.com/loeffel-io/ls-lint. Configuration syntax and available rules may differ between versions.

An extremely fast directory and filename linter that enforces naming conventions across project filesystems.

Official Resources:

Key features:

  • Processes thousands of files in milliseconds

  • Minimal configuration via .ls-lint.yml

  • Cross-platform: Windows, macOS, Linux

  • Full Unicode support

  • Minimal dependencies (go-yaml, doublestar)

Installation

NPM (recommended)

npm install -D @ls-lint/ls-lint

NPX (no install)

npx @ls-lint/ls-lint

Homebrew (macOS/Linux)

brew install ls-lint

Direct download (Linux amd64)

curl -sL -o ls-lint https://github.com/loeffel-io/ls-lint/releases/download/v2.3.1/ls-lint-linux-amd64 chmod +x ls-lint

Configuration Basics

Create .ls-lint.yml in the project root with two main sections:

ls:

Rules for directories and file extensions

.js: kebab-case .ts: kebab-case

ignore:

Paths to exclude from linting

  • .git
  • node_modules

Running ls-lint

Run with default config (.ls-lint.yml)

npx @ls-lint/ls-lint

Custom config path

ls-lint --config path/to/.ls-lint.yml

Custom working directory

ls-lint --workdir /path/to/project

Built-in Rules

Six naming convention rules are available:

Rule Description Example

lowercase

All lowercase letters, ignores non-letters readme , test

camelCase

camelCase, letters and digits only myFile

PascalCase

PascalCase, letters and digits only MyComponent

snake_case

Lowercase with underscores my_file

SCREAMING_SNAKE_CASE

Uppercase with underscores MY_CONSTANT

kebab-case

Lowercase with hyphens my-file

Combining Rules

Use the pipe operator | to allow multiple conventions:

ls: .ts: camelCase | PascalCase # Either is valid .js: kebab-case | snake_case

Extensions & Sub-extensions

Standard Extensions

Apply rules to specific file types:

ls: .js: kebab-case .ts: kebab-case .json: kebab-case .md: SCREAMING_SNAKE_CASE # README.md, CHANGELOG.md

Sub-extensions

Handle compound extensions like .d.ts , .test.js , .module.css :

ls: .d.ts: kebab-case # Type definition files .test.ts: kebab-case # Test files .module.css: kebab-case # CSS modules .config.js: kebab-case # Config files

Wildcard Extension

Match all extensions with .* :

ls: .*: kebab-case # All files must be kebab-case

Directory Naming

Use .dir to enforce directory name conventions:

ls: .dir: kebab-case # All directories must be kebab-case

Path Patterns

Global Rules

Rules at the top level apply project-wide:

ls: .js: kebab-case # Applies everywhere .ts: kebab-case

ignore:

  • node_modules

Directory-Specific Rules

Override global rules for specific directories:

ls: .js: kebab-case # Global default

components: # Override for components/ .js: PascalCase

src/models: # Override for src/models/ .js: PascalCase

Directory rules apply to the specified directory and all its subdirectories.

Glob Patterns

Use wildcards for flexible path matching:

ls:

Single wildcard: matches one directory level

packages/*/src: .ts: kebab-case

Double wildcard: matches any depth

packages/**/components: .tsx: PascalCase

Alternative Patterns

Use curly braces for multiple alternatives:

ls: packages/*/{src,tests}: .ts: kebab-case

src/{components,pages}: .tsx: PascalCase

Advanced Rules

Regex Patterns

For custom naming patterns, use regex with regex:^pattern$ format:

ls:

Files must start with uppercase letter

.ts: regex:^[A-Z].*$

Allow files starting with underscore or letter

.js: regex:^[_a-z][a-zA-Z0-9]*$

Combine regex with built-in rules:

ls: .ts: PascalCase | regex:^index$ # PascalCase OR "index"

Directory Substitution

Reference parent directory names in patterns:

ls:

File must match parent directory name

components/*/: .tsx: regex:^${0}$ # ${0} = parent directory name

Exists Rule

Enforce file quantity constraints:

ls:

Exactly one index file required

src/: index.ts: exists:1

Between 1-5 test files allowed

tests/: .test.ts: exists:1-5

No image files allowed

src/: .png: exists:0 .jpg: exists:0

Combine with naming rules:

ls: .ts: kebab-case | exists:1 # Must be kebab-case AND exactly one

Common Configurations

JavaScript/TypeScript Project

ls: .dir: kebab-case .js: kebab-case .ts: kebab-case .tsx: PascalCase # React components .d.ts: kebab-case .json: kebab-case .md: SCREAMING_SNAKE_CASE

src/components: .tsx: PascalCase

ignore:

  • .git
  • node_modules
  • dist
  • coverage

Monorepo Pattern

ls: .dir: kebab-case .*: kebab-case

packages/*/src: .ts: kebab-case .tsx: PascalCase

packages/*/{src,tests}: .dir: kebab-case

ignore:

  • .git
  • node_modules
  • "**/dist"
  • "**/coverage"
  • "**/build"

GitHub Actions Integration

Basic workflow configuration:

.github/workflows/lint.yml

name: Lint on: [push, pull_request]

jobs: ls-lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ls-lint/action@v2

Action Configuration Options

  • uses: ls-lint/action@v2 with: config: .ls-lint.yml # Config file path workdir: . # Working directory error-output-format: text # text or json warn: false # Output to stdout, exit 0 debug: false # Enable debug output

Troubleshooting

Common Issues

No files matched: Verify path patterns match actual directory structure.

Rule not applying: Check for more specific rules that might override.

Ignore not working: Ensure ignore patterns use correct glob syntax.

Debug Mode

Run with verbose output to diagnose issues:

ls-lint --debug

External Resources

For features not covered in this skill, consult:

The official documentation covers additional features like:

  • Multiple configuration files

  • Bazel integration

  • Docker usage

  • Complete regex syntax

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

openclaw

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

biome-js

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

md-docs

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

bump-release

No summary provided by upstream source.

Repository SourceNeeds Review