关于 ls-lint
ls-lint 是目录和文件名检查工具,通过 YAML 配置检查项目命名规范,适合需要统一文件系统命名的团队。它支持按扩展名和路径配置规则,并可使用 glob 模式与正则表达式。
主要功能
- 01检查文件与目录命名规则
- 02支持六种内置命名约定
- 03按扩展名和路径配置规则
- 04支持 glob 模式与正则表达式
- 05限制文件数量
适用场景
- 01检查项目命名规范
- 02为单体仓库路径设置不同规则
- 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。不同版本的配置语法和可用规则可能有所不同。
一款速度极快的目录和文件名检查工具,可在项目文件系统中强制执行命名约定。
官方资源:
- GitHub:https://github.com/loeffel-io/ls-lint
- 文档:https://ls-lint.org/2.3/getting-started/introduction.html
主要功能:
- 数毫秒内处理数千个文件
- 通过
.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
外部资源
对于此技能未涵盖的功能,请参阅:
- GitHub 仓库:https://github.com/loeffel-io/ls-lint
- 官方文档:https://ls-lint.org/2.3/getting-started/introduction.html
- GitHub Action:https://github.com/ls-lint/action
官方文档还介绍了其他功能,例如:
- 多个配置文件
- Bazel 集成
- Docker 用法
- 完整的正则表达式语法