tmu 2b3ef0f721 ✨ Add oxlint-tsgolint for type-aware linting
Activates type-aware rules via oxlint --type-aware, backed by
oxlint-tsgolint (TypeScript-Go). Catches unsafe type assertions,
unnecessary type parameters, and other issues regular oxlint
cannot see.

- Add oxlint-tsgolint devDep + 6 platform-specific native bindings
  as optionalDependencies (same pattern as oxlint)
- Add --type-aware flag to check:oxlint
- Add 6 @oxlint-tsgolint/* platforms to check:outdated ignore list
- Disable 3 type-aware rules in .oxlintrc.json with rationale:
  - typescript/no-unsafe-type-assertion, typescript/no-unnecessary-type-parameters:
    fire on legitimate generic type machinery in keysMatch/MatchBuilder
    that needs type-system restructuring (deferred to a follow-up)
  - typescript/no-floating-promises in test files: expectTypeOf() is
    a sync type-assertion library that oxlint-tsgolint misidentifies

Code simplifications enabled by the new strict checks:
- src/match.ts: drop value as unknown casts (T is already assignable
  to unknown) and the redundant run(value) as R cast
- src/index.test.ts: drop unnecessary 'X' as 'X | Y' assertions in
  match<...>(...) calls (literals are already assignable to the union)

Documentation updates in project-specs.md and README.md. Add
'tsgolint' to cspell word list.
2026-09-04 23:20:02 +02:00
2026-02-02 13:38:42 +01:00
2025-04-29 13:43:07 +02:00

tiny-pattern-ts

Pattern matching for TypeScript/ESM environments (F#-style, not regex).

Development

  • Build: npm run build
  • Test: npm run test, npm run test:ci
  • Checks: npm run check, npm run fix
  • Format/Fix: npm run fix:oxfmt, npm run fix:oxlint

Tooling

  • TypeScript 7 — type checker and build (tsc).
  • node --test + --experimental-strip-types — test runner (Node 22.6+, flag dropped on Node 24).
  • c8 — code coverage for test:ci.
  • oxlint — Rust-based linter.
  • oxlint-tsgolint — type-aware linting via typescript-go (powers --type-aware in oxlint). Catches unsafe type assertions, unnecessary type parameters, and other type-system issues that regular oxlint can't see.
  • oxfmt — Rust-based formatter (Prettier-compatible). Formats JS/TS, JSON/JSONC, YAML, Markdown, MDX, and more; built-in package.json key sorting replaces sort-package-json.
  • cspell — spell checking.
  • knip — finds unused dependencies, exports, and files. Scoped via --include dependencies,exports,files to skip the noisy types category (which produces false positives for libraries whose exported types are part of the public API).
  • publint — validates package.json for ESM publishing correctness. Runs on publish only (in CI), not as part of npm run check.
  • @arethetypeswrong/cli (attw) — validates .d.ts declarations against multiple module-resolution scenarios. Runs on publish only with --profile esm-only (the package is intentionally ESM-only).
  • lefthook — git pre-commit hooks.

Requirements

  • Node.js >= 26 (engines field; pinned via .node-version).

VSCode integration

  • Recommended extensions: see .vscode/extensions.json (oxc, cspell).
  • TypeScript 7 is used via the typescriptteam.native-preview extension.
  • oxc extension provides oxlint squiggles and oxfmt format-on-save.

Workflows

  • Version updates via npm version.
  • Publishing via GitHub Actions on tagged commits (see .github/workflows/ci.yml); the publish job runs publish:publint and publish:attw before npm publish.

Script prefix convention

Script names follow a prefix convention that signals when they run:

  • check:* — read-only verification. Aggregated by npm run check. Used in pre-commit hooks and CI's build job.
  • fix:* — mutating counterpart of check:*. Run individually (no npm run fix aggregator by design — fixes should be intentional, not batched).
  • test:* — test scripts. npm run test runs the full suite; test:unit / test:ci are scope-specific variants.
  • publish:* — runs only at publish time, in the CI publish job (immediately before npm publish). There is no local npm run publish script — publishing is CI-only by policy.

Contribution guidelines

  • Commit signing (GPG).
  • Set up commit message template: npm run use:git-commit-message.
  • See commit-message-template.
  • Type-only tests use expect-type's expectTypeOf(...) inside node --test cases.
S
Description
No description provided
Readme MIT
1.5 MiB
0 Stars 1 Watchers 0 Forks
0.9.0
Latest
2026-09-29 23:57:54 +02:00
Languages
TypeScript 88.4%
Shell 9.9%
Dockerfile 1.7%