mcpField
L
ls-lint

ls-lint

github.com/paulrberg测试与质量10245 次安装今天更新
代码仓库

关于 ls-lint

ls-lint 是目录和文件名检查工具,通过 YAML 配置检查项目命名规范,适合需要统一文件系统命名的团队。它支持按扩展名和路径配置规则,并可使用 glob 模式与正则表达式。

主要功能

  1. 01检查文件与目录命名规则
  2. 02支持六种内置命名约定
  3. 03按扩展名和路径配置规则
  4. 04支持 glob 模式与正则表达式
  5. 05限制文件数量

适用场景

  1. 01检查项目命名规范
  2. 02为单体仓库路径设置不同规则
  3. 03要求目录中存在指定文件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/paulrberg/agent-skills --skill ls-lint

安装后在 Claude Code 中输入/ls-lint确认已加载。

详细介绍

ls-lint v2.3

**版本说明:**本文档专门介绍 ls-lint v2.3。继续之前,请确认已安装的版本与之匹配:

ls-lint --version
# or
npx @ls-lint/ls-lint --version

如果安装的是其他版本,请停止并查阅该版本的官方文档,网址为 https://ls-lint.org 或 GitHub 仓库 https://github.com/loeffel-io/ls-lint。不同版本的配置语法和可用规则可能有所不同。

一款速度极快的目录和文件名检查工具,可在项目文件系统中强制执行命名约定。

官方资源:

主要功能:

  • 数毫秒内处理数千个文件
  • 通过 .ls-lint.yml 进行最简配置
  • 跨平台:Windows、macOS、Linux
  • 完全支持 Unicode
  • 依赖极少(go-yaml、doublestar)

安装

# 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

配置基础

在项目根目录创建 .ls-lint.yml,其中包含两个主要部分:

ls:
  # Rules for directories and file extensions
  .js: kebab-case
  .ts: kebab-case

ignore:
  # Paths to exclude from linting
  - .git
  - node_modules
运行 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

内置规则

提供六种命名约定规则:

规则描述示例
lowercase全部使用小写字母,忽略非字母字符readme、test
camelCase驼峰命名,仅限字母和数字myFile
PascalCase帕斯卡命名,仅限字母和数字MyComponent
snake_case小写字母并使用下划线my_file
SCREAMING_SNAKE_CASE大写字母并使用下划线MY_CONSTANT
kebab-case小写字母并使用连字符my-file
组合规则

使用竖线运算符 | 允许多种命名约定:

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

扩展名和子扩展名

标准扩展名

将规则应用于特定文件类型:

ls:
  .js: kebab-case
  .ts: kebab-case
  .json: kebab-case
  .md: SCREAMING_SNAKE_CASE   # README.md, CHANGELOG.md
子扩展名

处理 .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
通配符扩展名

使用 .* 匹配所有扩展名:

ls:
  .*: kebab-case              # All files must be kebab-case
目录命名

使用 .dir 强制执行目录名称约定:

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

路径模式

全局规则

顶层规则适用于整个项目:

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

ignore:
  - node_modules
特定目录规则

为特定目录覆盖全局规则:

ls:
  .js: kebab-case             # Global default

  components:                 # Override for components/
    .js: PascalCase

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

目录规则适用于指定目录及其所有子目录。

Glob 模式

使用通配符灵活匹配路径:

ls:
  # Single wildcard: matches one directory level
  packages/*/src:
    .ts: kebab-case

  # Double wildcard: matches any depth
  packages/**/components:
    .tsx: PascalCase
备选模式

使用花括号指定多个备选项:

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

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

高级规则

正则表达式模式

对于自定义命名模式,请使用 regex:^pattern$ 格式的正则表达式:

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]*$

将正则表达式与内置规则组合使用:

ls:
  .ts: PascalCase | regex:^index$   # PascalCase OR "index"
目录替换

在模式中引用父目录名称:

ls:
  # File must match parent directory name
  components/*/:
    .tsx: regex:^${0}$   # ${0} = parent directory name
Exists 规则

强制执行文件数量限制:

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

与命名规则组合使用:

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

常见配置

JavaScript/TypeScript 项目
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 模式
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 集成

基本工作流配置:

# .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 配置选项
- 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

故障排除

常见问题

未匹配到文件:确认路径模式与实际目录结构相符。

规则未生效:检查是否有更具体的规则覆盖了它。

忽略规则未生效:确保忽略模式使用了正确的 glob 语法。

调试模式

使用详细输出运行以诊断问题:

ls-lint --debug

外部资源

对于此技能未涵盖的功能,请参阅:

官方文档还介绍了其他功能,例如:

  • 多个配置文件
  • Bazel 集成
  • Docker 用法
  • 完整的正则表达式语法

评论

支持 Markdown