string-le 0.2.1

Extract every string in a codebase, with its position, so a person can read them
[package]
name = "string-le"
version = "0.2.1"
edition = "2024"
rust-version = "1.88"
license = "MIT"
readme = "README.md"
description = "Extract every string in a codebase, with its position, so a person can read them"
authors = ["Nolin D Naidoo"]
homepage = "https://letools.dev/tools/string-le"
repository = "https://github.com/nolindnaidoo/string-le"
keywords = ["i18n", "hardcoded", "strings", "localization", "extract"]
categories = ["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.
exclude = ["AGENTS.md", "CLAUDE.md", "rust-toolchain.toml"]

[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "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.
regex = "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.
jsonc-parser = "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.
toml = { version = "1", features = ["preserve_order"] }
# INI, which the extension reads with `ini`.
rust-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.
saphyr = "0.0.11"
# CSV, matching csv-parse's options: no headers of its own, flexible
# record length, relaxed quoting.
csv = "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.
ignore = "0.4"

[profile.release]
strip = true
lto = true
codegen-units = 1
panic = "abort"

[lints.rust]
unsafe_code = "forbid"

[lints.clippy]
pedantic = "warn"