Skip to main content

require-syntax

Require syntax matched by configured AST selectors.

Targeted pattern scope​

This rule runs selector listeners for every configured AST selector and tracks whether each selector matched at least once in the current file.

Validation happens on Program:exit, so the rule evaluates full-file coverage rather than local statement-level checks.

What this rule reports​

This rule reports each configured selector that has zero matches.

  • If the selector is configured as a plain string, the default message is used.
  • If the selector is configured as an object with message, your custom message is emitted.

Why this rule exists​

Some code standards are existential rather than prohibitive (for example, "every module must export a default" or "every React file must declare props"). require-syntax is the inverse of no-restricted-syntax: it enforces presence, not absence.

❌ Incorrect​

const x = 1;

with options:

{
selectors: ["ExportDefaultDeclaration"];
}

✅ Correct​

export default 1;

with options:

{
selectors: ["ExportDefaultDeclaration"];
}

Behavior and migration notes​

This rule has no autofix. Missing required syntax is structural and must be added intentionally.

Avoid over-broad selectors on large codebases. Start with specific selectors that map to concrete architecture rules.

Options​

type Options = {
selectors?: Array<
| string
| {
message?: string;
selector: string;
}
>;
};

Additional examples​

const x = 1;

with options:

{
selectors: [
{
selector: "ExportNamedDeclaration[source]",
message: "Files in this folder must re-export from a source module.",
},
],
}

ESLint flat config example​

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

export default [
{
plugins: { "etc-misc": etcMisc },
rules: {
"etc-misc/require-syntax": [
"error",
{ selectors: ["ExportDefaultDeclaration"] },
],
},
},
];

When not to use it​

Disable this rule if your project prefers optional patterns and does not enforce required syntax per file.

Package documentation​

Rule catalog ID: R085

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.