Skip to main content

export-matching-filename-only

Require filename-matching export to be the only export.

Targeted pattern scope​

This rule collects exports in a file and checks whether one export name matches the filename-derived expected name.

If that matching export exists and the file exports anything else, the additional exports are reported.

What this rule reports​

Expected export name is derived from filename stem using format (PascalCase by default).

When a matching export is present, all non-matching exports in that file are reported.

Supported extracted named exports include:

  • export { Name }
  • export class Name {}
  • export function name() {}

Default export is tracked as name default.

Why this rule exists​

This enforces a single-primary-export convention for modules whose main export name mirrors the file name.

❌ Incorrect​

// filename: UserService.ts
export class UserService {}
export const helper = 1;
// ❌ helper export is reported

✅ Correct​

// filename: UserService.ts
export class UserService {}

Behavior and migration notes​

This rule reports only and does not provide an autofix.

If you rely on utility side-exports, move them to dedicated modules before enabling this rule at error.

Options​

type Options = [
{
format?: "camelCase" | "kebab-case" | "PascalCase";
},
];

Default:

{
format: "PascalCase";
}

Additional examples​

// filename: user-service.ts
// config: { format: "kebab-case" }
export { userService };
// ✅ filename-matching export and no extra exports

ESLint flat config example​

import etcMisc from "eslint-plugin-etc-misc";

export default [
{
plugins: { "etc-misc": etcMisc },
rules: {
"etc-misc/export-matching-filename-only": "error",
},
},
];

When not to use it​

Disable this rule if modules are designed to export a public surface with multiple related symbols from a single file.

Package documentation​

Rule catalog ID: R015

Further reading​

Adoption resources​

  • Start at warning level in CI, then move to error after cleanup.
  • Use focused codemods/autofix batches per package or directory.