关于 Dates-LE
Dates-LE 面向开发者,可从日志、数据文件和代码中提取日期与时间戳,并标出格式及位置。它支持多种日期模式、时间解析和工作区扫描,也可通过 MCP 调用。
主要功能
- 01识别多种日期和时间戳格式
- 02报告原始写法及行列位置
- 03可解析时返回时间戳值
- 04按日期顺序汇总工作区结果
- 05筛选日期类型并设置歧义日期顺序
适用场景
- 01从服务器日志中提取时间戳
- 02审查 JSON、CSV 等数据中的日期
- 03检查代码中的日期字面量和解析调用
- 04汇总项目文件中的日期
MCP 相关
MCP 服务提供 extract_dates 工具,接收文本并返回日期写法、可解析时的 epoch 值以及行列位置。服务通过 stdio 通信,不读取文件,也不自行发起网络请求。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| kinds | array | 否 | 要返回的日期类型,按答案中作为 `format` 返回的名称指定。默认返回除 "unix" 外的所有类型:只有在列出 "unix" 时,才会将 1705314645 这样的纯数字读取为日期。 |
| dedupe | boolean | 否 | 重复日期仅保留首次出现的日期。 |
| format | enum | 否 | 文档格式。接受常见扩展名和别名。可选:未指定此项和 `filename` 时,将使用通用模式扫描文档。json | yaml | csv | xml | log | plaintext | javascript | typescript | html | toml | markdown |
| content | string | 是 | 要扫描的文档文本。 |
| filename | string | 否 | 当 `format` 未指定时,用于推断格式的文件名,例如 "app.log"。 |
| dateOrder | enum | 否 | 如何解读日和月可能互换的数字日期,例如 05/01/2024:"mdy" 表示 5 月 1 日,"dmy" 表示 1 月 5 日。像 15/01/2024 这样只能按一种方式解读的日期,无论设置如何都会按该方式读取;像 05.01.2024 这样的点分隔日期始终按日优先解读。mdy | dmy |
| maxResults | integer | 否 | 返回日期数量上限(默认值为 500)。meta.truncated 会报告是否有日期被省略。 |
详细介绍
Dates-LE:轻松提取日期
只需按下一次快捷键,即可从当前文件中提取所有日期和时间戳
支持任何文本文件——JSON、YAML、CSV、XML、TOML、Markdown、日志、HTML、JavaScript、TypeScript、Python、Go 等
觉得有用? 点赞或评分能帮助其他开发者发现它—— ★ GitHub · ★ Open VSX · ★ Marketplace
功能介绍
打开文件,运行 Dates-LE: Extract Dates,文档中的所有日期就会被提取到新的编辑器中——随后可对其去重、排序、分析、转换、筛选或验证。可在 VS Code 以及基于 VS Code 的编辑器(如 Cursor 和 VSCodium)中使用(可从 Open VSX 安装)。
- 日志分析 — 提取服务器日志中的时间戳:ISO、syslog 和 Apache 访问日志格式
- 数据审查 — 提取 JSON、YAML、CSV 和 XML 中的日期和纪元时间
- 代码审计 — 提取 JS/TS 中的日期字面量,以及
new Date()/Date.parse()/moment()/dayjs()/DateTime.fromISO()的参数,包括跨多行格式化的调用
安装
| 渠道 | 可获得的功能 | 安装 |
|---|---|---|
| VS Code | 在编辑器中通过快捷键提取日期 | Marketplace |
| Cursor、VSCodium、Windsurf | 同一扩展 | Open VSX |
| 终端或 CI 步骤 | 对整个目录树执行同样的操作,并返回退出码 | cargo install dates-le · crates.io |
| 通过 Node 使用的终端 | 同一命令行,与 Rust 版本逐字节保持一致 | npx dates-le · npm |
| 通过 Node 使用的任何 MCP Agent | 通过 stdio 调用 extract_dates | npx dates-le-mcp · npm |
在 AI Agent 中使用
同一引擎也可作为 MCP 服务运行,因此 Agent 可以直接调用它,而无需你运行命令。
| 编辑器 | 方法 |
|---|---|
| VS Code 1.101+ | 无需安装任何内容 — 此扩展会在 Agent 模式下注册 extract_dates |
| Claude Code | claude mcp add dates-le -- npx -y dates-le-mcp |
| Cursor、Windsurf 及其他工具 | 将其指向 npx dates-le-mcp |
extract_dates(content, format?, filename?, dedupe?, dateOrder?, kinds?, maxResults?)
返回每个日期及其表示法、可解析时的纪元值,以及从 1 开始计数的行号和列号;默认上限为 500,并通过 meta.truncated 标明是否截断。dateOrder(mdy 或 dmy,默认值为 mdy)决定如何解析可能有两种读法的数字日期,例如 05/01/2024。kinds 用于选择要返回的日期类型;除非明确列出,否则不会包含 unix。
服务接收内容并返回数据 — 不读取文件,也不会自行发起网络请求。该项目以 dates-le-mcp 发布在 npm 上,并以 io.github.nolindnaidoo/dates-le 收录于 MCP 注册表。
手动配置 — 适用于任何带有 MCP 配置文件的宿主
大多数宿主都会读取 JSON 配置。添加一条配置:
{
"mcpServers": {
"dates-le": {
"command": "npx",
"args": ["-y", "dates-le-mcp"]
}
}
}
-y 会跳过首次运行时的安装提示。如果不想跟踪版本更新,可以固定版本 — [email protected]。
不想每次启动时都通过 npx 运行?可以安装一次,然后指向二进制文件:
npm install -g dates-le-mcp
{
"mcpServers": {
"dates-le": { "command": "dates-le-mcp" }
}
}
它通过 stdio 使用 MCP 通信,无需环境变量、API 密钥,也不需要自行配置。将它接入任何应用前,可以先进行检查:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y dates-le-mcp
这会输出工具列表并退出 — 如果看到 extract_dates,说明服务运行正常。
| 格式 | 语言 ID | 提取内容 |
|---|---|---|
| JSON | json | 内容中所有可识别的日期模式 |
| YAML | yaml、yml | 内容中所有可识别的日期模式 |
| CSV | csv | 逐个单元格提取所有可识别的日期模式 |
| XML | xml | 注释之外的日期模式(跳过行内和多行注释) |
| 日志 / 纯文本 | log、plaintext | 以上所有内容,外加 YYYY-MM-DD HH:mm:ss 格式的日志行、syslog(Mon DD HH:mm:ss)以及 Apache 访问日志时间戳 |
| JavaScript / TypeScript | javascript、javascriptreact、typescript、typescriptreact | 以上所有内容,外加 new Date()、Date.parse()、moment()、dayjs()、DateTime.fromISO() 的字符串参数 |
| HTML | html | 以上所有内容,外加 datetime 属性、包含日期的 <meta> 标签,以及 JSON-LD datePublished/dateModified |
| TOML / Markdown | toml、markdown、md | 内容中所有可识别的日期模式 |
| INI / properties | ini、cfg、conf、properties | 内容中所有可识别的日期模式 |
| 其他格式 | 其他所有语言 ID | 内容中所有可识别的日期模式 |
每份文档都会被读取。 格式只会在共享模式的基础上增加模式,因此,未列出的语言 ID(Python、Go、Rust、shell、SQL)不会被拒绝,而是使用共享模式进行扫描。它们不会获得格式专属的额外模式:Jan 15 10:30:47 在日志文件中是日期,在 Python 文件中则是三个单词。
可识别的日期模式:扩展形式的 ISO 8601(2024-01-15T10:30:00Z,毫秒和时区偏移可选)、基本形式(20240115、20240115T103045Z)、周形式(2024-W03、2024-W03-1)和序数形式(2024-015);RFC 2822(Mon, 15 Jan 2024 10:30:00 GMT);秒、毫秒、微秒和纳秒格式的 Unix 时间戳,前提是 dates-le.kinds 包含 unix(恰好 10、13、16 或 19 位,且时间落在 2001-09-09 至 2100 年之间,因此,电话号码、请求 ID 或卡号不会被误认为是 2100 年或 2200 年的日期;嵌在更长数字、更长单词(如提交哈希)或浮点数小数部分中的数字完全不会匹配);UTC 字符串;单独的 YYYY-MM-DD;日或月在前、以 /、. 或 - 分隔的数字日期(15/01/2024、1/15/2024、15.01.2024 14:00、15-01-2024 3:30 PM),时间可选;以及以文字写出月份的日期(15 January 2024、3rd Feb. 2024、Jan 15, 2024、15-JAN-2024)。数字日期中,只要某个数字大于 12,就按唯一可能的方式解读;只有当两个数字都可能是月份时,才由 dates-le.dateOrder 决定;带点的日期始终按日优先解读。每个数字日期或文字日期都会经过日历校验,因此 31/02/2024 不算日期;数字年份必须在 1900–2099 范围内。每个匹配项都会报告其实际行号和列号。无法解析为时间戳的值不会被提取。
时区名称包括固定偏移量 GMT/UT/UTC/Z、8 个美国时区缩写,以及 CEST、CET、BST、JST、AEST、IST。这些时区是固定偏移量,不会根据时区规则调整。
已知限制:有歧义的数字日期遵循 dates-le.dateOrder;除非更改该设置,否则默认月优先;文字月份仅支持英文;syslog 行不带年份,因此会假定为当前年份;IST 代表 3 个不同的时区,这里按印度的 +05:30 解读;独立的 8 位数字只有在年份为 1900–2099 时才会被识别为日期;处于时间戳范围内的 10 位数字无法与 Unix 时间区分,因此除非启用,否则不会识别这一类型。
扫描文件夹或工作区
Extract 会读取当前打开的文档。扫描会从磁盘读取多个文件,并生成一份按时间排序的项目日期报告。
- 整个工作区:从命令面板运行
Dates-LE: Extract Dates from Workspace。 - 单个文件夹:在资源管理器中右键单击该文件夹并选择
Extract Dates from Folder,或运行Dates-LE: Extract Dates from Folder后选择一个文件夹。 每个日期只列出一次,不论其拼写方式如何,按时间从早到晚排列,并显示其各种写法、出现次数和位置:
# Dates-LE workspace report
`my-project` · 3 file(s) read · 3 distinct date(s), 5 occurrence(s) in 3 file(s)
| Date | Written as | Occurrences | Files | Where |
|---|---|---|---|---|
| `2024-01-15` | `2024-01-15`, `2024-01-15T00:00:00Z`, `January 15, 2024` | 3 | 2 | |
| `2024-03-01T08:30:00Z` | `2024-03-01T10:30:00+02:00` | 1 | 1 | `data/events.json` · **2:13** |
| `2025-12-31` | `2025-12-31` | 1 | 1 | `docs/release.md` · **2:14** |
## `2024-01-15` (3)
- `docs/release.md` · **1:9**, **1:31**
- `src/config.ts` · **1:17**
同一个日期只占一行。 2024-01-15、2024-01-15T00:00:00Z 和 January 15, 2024 是同一个日期的三种写法,表格会明确标出。带时区的日期表示一个时刻,按 UTC 命名,并在“Written as”列中保留其原有偏移量。不带时区的日期则按原文命名,因此在每台机器上都是同一个日期。像 03/04/2024 这样的有歧义日期,会按照 dates-le.dateOrder 指定的方式读取。
所有日期都会列在表格中。只出现一次的日期会列在对应行中。重复出现的日期会在下方单独列出各个位置。
这是在启用 dates-le.showPositions 时的行为。该选项默认关闭;关闭时,每个位置会显示为文件名以及该日期在文件中的出现次数:docs/release.md (2)。剪贴板中的内容遵循 dates-le.clipboardIncludesPositions 的设置,Extract 也是如此。
扫描会读取什么。 文件从磁盘读取,因此不会看到尚未保存的编辑内容。超过安全大小的文件,或非 UTF-8 文本文件,都不会读取。扫描会在达到 5,000 个文件或 10,000 个已列出实例时停止。报告末尾会为每种未纳入的内容列出一行,避免将简短报告误认为项目中没有问题。
跳过哪些内容,以及如何更改。 以下三个开关默认启用,可在 Settings 中分别关闭:
| 开关 | 跳过的内容 |
|---|---|
scanUseDefaultExcludes | 依赖项文件夹、构建输出、工具缓存和锁文件。完整列表见下文 |
scanRespectGitignore | 项目 .gitignore 文件中排除的内容 |
scanSkipBinaryFiles | 图片、字体、归档文件及其他非文本文件 |
还有两个列表可以调整扫描结果,而无需关闭开关。要跳过更多内容,请将模式添加到 scanExcludes。要读取某个开关会跳过的内容,请将其添加到 scanAlwaysInclude:
{
// Also skip the test fixtures.
"dates-le.workspace.scanExcludes": ["**/fixtures/**"],
// Read the vendored code, though the built-in list skips it.
"dates-le.workspace.scanAlwaysInclude": ["**/vendor/**"]
}
Dates-LE: Open Settings 会在 Settings 编辑器中打开以上所有设置。
内置列表
无论出现在哪里,都会跳过以下文件夹:
.git、.hg、.svn、node_modules、bower_components、jspm_packages、.pnpm-store、.yarn、vendor、site-packages、Pods、Carthage、dist、build、out、target、_build、_site、dist-newstyle、zig-out、storybook-static、cdk.out、DerivedData、CMakeFiles、.next、.nuxt、.output、.svelte-kit、.angular、.astro、.docusaurus、.vuepress、.expo、.turbo、.parcel-cache、.cache、.sass-cache、.jekyll-cache、.dart_tool、.pub-cache、.gradle、.kotlin、.cxx、.externalNativeBuild、captures、ephemeral、.symlinks、.swiftpm、.build、.bundle、.stack-work、.zig-cache、.godot、elm-stuff、.vercel、.netlify、.serverless、.aws-sam、.terraform、.venv、venv、__pycache__、.tox、.nox、.mypy_cache、.pytest_cache、.ruff_cache、.ipynb_checkpoints、.eggs、coverage、htmlcov、.nyc_output、.vscode-test、.idea、.vs、xcuserdata、*.egg-info
无论出现在哪里,都会跳过以下文件:
*.min.js、*.min.css、*.map、*.snap、*.lock、package-lock.json、pnpm-lock.yaml、npm-shrinkwrap.json、go.sum、*.pbxproj、*.iml、local.properties、output-metadata.json、.flutter-plugins、.flutter-plugins-dependencies、.packages、Generated.xcconfig、flutter_export_environment.sh、GeneratedPluginRegistrant.*、fastlane/report.xml、fastlane/test_output/**、doc/api/**
以下内容不在列表中,因为它们在许多项目中都是普通文件夹:bin、obj、tmp、logs、public、generated。会生成这些内容的项目会在 git 中忽略它们,扫描也会读取 .gitignore。
影响扫描的设置位于 Settings 中。
CLI
相同的提取功能也可在终端或 CI 步骤中运行:Rust CLI 位于
crate/,与扩展共用同一语料库 —
crate/fixtures/ — 因此两者读取文档的方式完全一致。同一命令行工具也以
dates-le 的形式发布在 npm 上,适用于安装了 Node 但没有 Rust 的机器;CI 会在三种操作系统上逐字节验证它与 crate 的一致性。
dates-le . # every date in the tree; JSON on stdout when piped
dates-le --before 2026-01-01 . # everything already in the past
dates-le --sort --iso config/ # ordered by instant, in readable form
dates-le mcp # the same extraction over MCP on stdio
从 npm 安装 (dates-le) 或从 crates.io 安装 (dates-le)。两者都会安装相同的 dates-le 命令。
npm install -g dates-le # or run it once: npx dates-le
cargo install dates-le
关键在于时间点。 2024-01-15、1705276800 和
Mon, 15 Jan 2024 是同一时刻的三种写法,将它们各自解析为数字,才能对它们进行排序和比较,而不是把它们当作三个字符串来读取。解析结果与 V8 中的 Date.parse 完全一致 — 包括旧式解析器 — 并通过取自 V8 本身的 178 个用例进行验证。
不带时区的日期会根据机器的时区解析,因为这才是真正的结果,而且确实会因机器而异。系统会遵循 TZ。
选择要提取的日期类型
dates-le.kinds 是一份清单,列出每条命令会提取的日期类型。未勾选的类型不会被报告,无论是在 Extract、文件夹或工作区扫描中,还是在 Analyze、Convert、Filter 和 Validate 中。
| 类型 | 识别格式 | 默认值 |
|---|---|---|
iso | 2024-01-15T10:30:00Z | 开启 |
simple | 2024-01-15 | 开启 |
local | 01/15/2024、January 15, 2024 | 开启 |
rfc2822 | Mon, 15 Jan 2024 10:30:00 GMT | 开启 |
utc | Mon Jan 15 2024 10:30:00 GMT+0000 | 开启 |
week | 2024-W03 | 开启 |
ordinal | 2024-015 | 开启 |
basic | 20240115 | 开启 |
custom | 文件类型标记的日期:日志行、HTML datetime 属性、new Date("…") | 开启 |
unix | 1705314645 | 关闭 |
Unix 时间默认关闭。 这是唯一一种看起来不像日期的类型:范围合适的任意十位数字都可能是 Unix 时间,同样长度的 ID 或电话号码也可能被误认为是它。读取包含这类值的日志或数据时,可以将其开启:
{
"dates-le.kinds": ["iso", "simple", "local", "rfc2822", "utc", "week", "ordinal", "basic", "custom", "unix"]
}
MCP 工具和 CLI 接受相同的列表,分别通过 kinds 参数和 --kinds 标志指定;与扩展一样,默认不包含 unix。
命令
| 命令 | 描述 |
|---|---|
Dates-LE: Extract Dates | 从当前文档中提取所有日期 |
Dates-LE: Extract Dates from Workspace | 按时间顺序列出工作区所有文件中的每个日期:每个日期只列一次,并注明其写法和所在位置 |
Dates-LE: Extract Dates from Folder | 对一个文件夹执行相同操作。也可在 Explorer 中对文件夹使用 |
Dates-LE: Analyze Dates | 统计数据、模式、聚类、间隔和异常 |
Dates-LE: Convert Dates | 将提取的日期转换为 ISO、RFC 2822、Unix、UTC、本地、simple 或自定义格式 |
Dates-LE: Filter Dates | 按范围、格式、重复项、未来/过去进行筛选 |
Dates-LE: Validate Dates | 根据可选规则检查提取的日期 |
Dates-LE: Deduplicate Dates | 从结果中删除重复行 |
Dates-LE: Sort Dates | 按时间顺序或字母顺序对结果排序 |
Dates-LE: Open Settings | 打开 Dates-LE 设置 |
Dates-LE: Help | 内置文档 |
默认情况下,没有命令绑定快捷键。可在编辑器的 Keyboard Shortcuts 中为任意命令设置快捷键。
设置
| 设置项 | 默认值 | 描述 |
|---|---|---|
dates-le.openResultsSideBySide | true | 在当前编辑器旁打开结果 |
dates-le.showPositions | false | 显示每个日期所在的行和列 |
dates-le.copyToClipboardEnabled | false | 同时将结果复制到剪贴板 |
dates-le.clipboardIncludesPositions | false | 在复制内容中包含行和列 |
dates-le.dateOrder | mdy | 如何读取顺序可能有歧义的数字日期:mdy 将 05/01/2024 读作 5 月 1 日,dmy 将其读作 1 月 5 日 |
dates-le.kinds | iso, simple, local, rfc2822, utc, week, ordinal, basic, custom | 要提取的日期类型。添加 unix 可将 1705314645 这类纯数字读取为日期 |
dates-le.notificationsLevel | silent | all = 所有通知,important = 警告 + 错误,silent = 仅错误 |
dates-le.workspace.scanPatterns | ["**/*"] | 文件夹或工作区扫描要读取的文件 |
dates-le.workspace.scanUseDefaultExcludes | true | 跳过依赖文件夹、构建输出、缓存和锁文件 |
dates-le.workspace.scanRespectGitignore | true | 跳过项目 .gitignore 文件中指定的内容 |
dates-le.workspace.scanSkipBinaryFiles | true | 跳过图像、字体、归档文件及其他非文本文件 |
dates-le.workspace.scanExcludes | [] | 要跳过的其他文件,以 glob 模式指定 |
dates-le.workspace.scanAlwaysInclude | [] | 即使上述三项中的某项会跳过,也要读取的文件 |
dates-le.workspace.scanMaxFiles | 5000 | 单次扫描读取的最大文件数 |
dates-le.workspace.scanMaxResults | 10000 | 停止读取前单次扫描列出的最多匹配项数 |
dates-le.safety.enabled | true | 为超大文件启用防护 |
dates-le.safety.fileSizeWarnBytes | 1000000 | 文件大小超过此值时拒绝提取 |
dates-le.statusBar.enabled | true | 显示状态栏项 |
dates-le.telemetryEnabled | false | 仅记录在本地的事件日志(参见隐私) |
语言
除英语外,支持 12 种语言:
德语 · 西班牙语 · 法语 · 印度尼西亚语 · 意大利语 · 日语 · 韩语 · 巴西葡萄牙语 · 俄语 · 乌克兰语 · 越南语 · 简体中文
两部分均已本地化:清单(命令标题、设置名称和描述)以及扩展运行时显示的所有内容(通知、状态栏、快速选择项和提示词)。扩展会遵循 VS Code 的显示语言,因此会与编辑器当前设置的语言保持一致;无需单独设置。
隐私与安全
- 不访问网络。 扩展绝不会向任何地方发送数据。
telemetryEnabled设置只会将事件写入可供你检查的本地输出通道(Dates-LE Telemetry)。 - MCP 服务也遵循同样的原则。 它接收内容作为参数并返回数据:不访问文件系统、不进行网络调用、不收集遥测数据。你的 Agent 已有读取文件的工具,因此在服务内重复实现只会增加路径遍历风险,不会带来任何额外能力。若服务导入了任何可能访问上述任一资源的内容,
check:mcp-bundle就会导致构建失败。 - 错误通知会隐藏主目录和疑似凭据的片段。
- 评分提示最多显示两次。 第 3 次成功使用时,扩展会询问一次你是否愿意评分;如果你选择了 Later 或关闭提示,则会在第 20 次时再询问一次。选择 Don't Ask Again 后不会再显示。将
notificationsLevel设置为important或silent也会关闭此功能。次数记录在 VS Code 的扩展存储中,不会发送到任何地方;点击 Rate 会在浏览器中打开你安装扩展的平台页面——VS Code Marketplace 或 Open VSX。
文档
| 内容 | 位置 |
|---|---|
| 工具允许说什么——范围、输出约定、拒绝事项、非目标 | crate/SPEC.md |
| 扩展的构建与内部运作方式——架构、不变量、工具链、发布 | AGENTS.md |
| CLI 的构建与内部运作方式 | crate/AGENTS.md |
| 变更内容 | CHANGELOG.md · crate/CHANGELOG.md |
| 工具页面及另外 15 个工具 | letools.dev/tools/dates-le |
性能
| 输入 | 大小 | 找到数量 | 耗时 | 速率 | 扫描速度 |
|---|---|---|---|---|---|
| 服务器日志(ISO) | 1.74 MB | 40,000 | 139.92 ms | 285,887/sec | 12.5 MB/s |
| JSON 记录 | 1.42 MB | 25,000 | 82.75 ms | 302,132/sec | 17.2 MB/s |
| CSV 导出 | 0.64 MB | 40,000 | 39.15 ms | 1,021,610/sec | 16.3 MB/s |
在 Apple M5 Pro、24 GB RAM、Node 24.3.0 上预热后运行 7 次所得的中位数。输入由
scripts/benchmark.ts 生成,而非检入版本库,因此上方的大小就是
实际测得的大小。使用 bun run benchmark 可复现。
这些数据因机器而异,不会在 CI 中作断言——会阻止构建的基准测试 只能说明运行器当时有多忙。
测试
| 指标 | 覆盖率 |
|---|---|
| 语句 | 88.32% |
| 分支 | 78.91% |
| 函数 | 91.87% |
| 行 | 89.98% |
31 个文件中共有 396 个测试用例,此外还有一个在真实 VS Code 扩展宿主中运行的集成测试套件,以及一个将构建好的 .vsix 安装到干净配置文件中的端到端测试。
数据由 scripts/coverage-readme.js 根据真实运行结果——coverage/coverage-summary.json 和
coverage/test-results.json——生成;若本节内容发生偏差,CI 将失败。使用 bun run test:coverage 可复现,测试用例数以 vitest 打印的为准。
LE 系列的更多工具
为每个模型眼前的工作打造的 16 款单一用途工具。每款都附带一个 Rust CLI 和一个 MCP 服务。一页尽览:letools.dev
提取
- String-LE — 提取代码库中的所有字符串,方便人工阅读
- Numbers-LE — 提取代码库中所有硬编码数字,方便人工检查
- Units-LE — 提取所有带单位的数量并统一格式,遇到含义不明确的数量时会按名称拒绝处理
- Dates-LE — 提取所有日期和时间戳,并给出每个日期和时间戳解析出的确切时刻
- IDs-LE — 提取所有 UUID、ULID、NanoID、ObjectId 和 Snowflake,并解码其中的时间
- IPs-LE — 提取所有 IP 地址、CIDR 网段和 MAC 地址,统一格式并按范围分类
- URLs-LE — 提取代码库中的所有 URL,并给出协议和确切位置
- Paths-LE — 提取代码库中的所有文件路径,并说明它们是否仍指向实际内容
- Colors-LE — 提取代码库中的所有颜色,并指出哪些颜色不在你的调色板中
检查
- Regex-LE — 查找代码库中的所有正则表达式,并报告哪些可能导致灾难性回溯
- Versions-LE — 查找某个依赖项在仓库的各个清单文件中受到不同约束的位置
- i18n-LE — 识别项目使用的 i18n 库,然后依据该库的规则审查其目录
- Scrape-LE — 在编写抓取器之前检查网页能否抓取,并说明何时无法判断
防护
- Secrets-LE — 查找代码库中的硬编码凭据,绝不在报告中打印凭据
- EnvSync-LE — 比较目录树中的 dotenv 文件,并指出哪些文件缺少哪些键
- Unicode-LE — 查找那些隐藏含义的 Unicode 字符——双向控制字符、不可见字符、同形异义字符、混合文字系统
每款工具都独立运行:没有共享的 crate,也没有发布的核心库。若有两款工具得出相同结论,那是因为这个答案经得起两次验证。
联系 — nolindnaidoo.com · GitHub · LinkedIn
nolindnaidoo 的其他项目
Rust — pixelcoords 和 pixelactions 构成一个工作循环:pixelcoords 回答 位置,pixelactions 在那里执行操作。它们有各自的工具、各自的风格——不属于 LE 系列。
- pixelcoords — 冻结屏幕,标记区域,获取像素级精确的坐标和裁剪图像 pixelcoords.dev · crates.io · docs.rs
- pixelactions — 使用经过人工验证的坐标执行交互,并确认操作已生效 pixelactions.dev · crates.io · docs.rs
许可证
MIT © nolindnaidoo
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。