1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
[]
= "string-le"
= "0.3.1"
= "2024"
= "1.88"
= "MIT"
= "README.md"
= "Extract every string in a codebase, with its position, so a person can read them"
= ["Nolin D Naidoo"]
= "https://letools.dev/tools/string-le"
= "https://github.com/nolindnaidoo/string-le"
= ["i18n", "hardcoded", "strings", "localization", "extract"]
= ["command-line-utilities", "development-tools", "internationalization", "text-processing", "parsing"]
# What a consumer gets, and why.
#
# Ships: src/, Cargo.toml, Cargo.lock, LICENSE, README.md — needed to
# build the binary. SPEC.md and CHANGELOG.md — the behavioural contract
# someone scripting against the exit codes needs. tests/ and fixtures/ —
# not needed to *build* (verified: the crate compiles without them), but
# needed to *verify*: `cargo test` on the unpacked tarball runs the full
# corpus, so the parity claims in the README are checkable by whoever
# installed it rather than taken on trust.
#
# Excluded: AGENTS.md and CLAUDE.md are how this repo is worked on, not
# how the tool is used. rust-toolchain.toml is a convenience for
# contributors to *this* checkout; shipped, it would pin the toolchain
# of anyone who unpacks or vendors the crate, which is not this crate's
# business.
= ["AGENTS.md", "CLAUDE.md", "rust-toolchain.toml"]
[]
= { = "1", = ["derive"] }
= "1"
# One regex engine. The fallback extractor's quoted-run pattern needs no
# backreferences and no lookaround, so `regex` expresses it exactly and
# its matching cannot fail — no backtracking engine, no error path.
= "1"
# The format parsers, each chosen against what the extension uses:
# jsonc-parser for JSON.parse, toml for @iarna/toml, csv for csv-parse,
# saphyr for js-yaml. dotenv is hand-written in the extension and here.
= "0.33"
# `preserve_order` for the same reason paths-le needs it: without it a
# TOML table iterates alphabetically and extraction stops following the
# document, which is the order this tool's whole output contract is.
= { = "1", = ["preserve_order"] }
# INI, which the extension reads with `ini`.
= "0.21"
# YAML. js-yaml is YAML 1.2 with the core schema, and so is this — the
# `yes`/`no`-are-booleans behaviour that would change which values are
# strings belongs to YAML 1.1 and is in neither.
= "0.0.11"
# CSV, matching csv-parse's options: no headers of its own, flexible
# record length, relaxed quoting.
= "1"
# The walker. `ignore` is ripgrep's, so "what this tool walks" and "what
# ripgrep walks" are the same answer — which is the answer a person
# auditing a repository already has in their head.
= "0.4"
[]
= true
= true
= 1
= "abort"
[]
= "forbid"
[]
= "warn"