Skip to content

Future: convention lint checks ported from assist (filename convention, import extensions) #7

Description

@robdmoore

Idea

assist ships custom lint checks for conventions that oxlint doesn't cover. We deliberately did not port these (our lint check is plain oxlint) — capturing them here as potential future built-ins.

What assist has

From staff0rd/assist:

  • oxlint-rules/filenameConvention.ts — a custom oxlint rule enforcing that a file is named after its main export (e.g. updateWorkerCapacity.ts for updateWorkerCapacity).
  • assist lint (src/commands/lint/lint/) — bespoke ts-morph checks for "conventions not enforced by oxlint":
    • checkFileNames.ts / runFileNameCheck.ts — the filename convention.
    • fixFileNameViolations.ts / renameExports.ts / applyMoves.tsauto-fix: rename the file and rewrite all imports across the project.
    • runImportExtensionCheck.ts — check import extensions (e.g. require/forbid explicit .ts/.js).
    • createLintProject.ts — ts-morph project setup.

Possible built-ins for verifyx

  • filename-convention — file name must match its primary export; with a fix mode that renames + updates imports.
  • import-extensions — enforce a consistent import-extension policy.

Notes / design

  • Would be native checks. We'd implement on the TypeScript compiler API (like our other native checks) rather than pulling in ts-morph as a dependency — though the rename-and-update-imports fix is exactly what ts-morph is good at, so that's a real dependency trade-off to weigh (a fix mode may justify ts-morph; a check-only mode probably doesn't).
  • Fits the fix/check model: check mode reports; fix mode renames/rewrites (destructive — guard accordingly).
  • filename-convention needs a config knob for the naming rule (kebab vs camel, index files, etc.).

Status

Parked. Not scheduled.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions