Skip to content

⬅️ Back to Table of Contents

πŸ“„ RuleCreator

πŸ“Š Analysis Summary

Metric Count
πŸ”§ Functions 2
πŸ“¦ Imports 6
πŸ”„ Re-exports 1
πŸ“ Interfaces 3
πŸ“‘ Type Aliases 3

πŸ“š Table of Contents

πŸ› οΈ File Location:

πŸ“‚ packages/utils/src/eslint-utils/RuleCreator.ts

πŸ“¦ Imports

Name Source
RuleContext ../ts-eslint/Rule
RuleListener ../ts-eslint/Rule
RuleMetaData ../ts-eslint/Rule
RuleMetaDataDocs ../ts-eslint/Rule
RuleModule ../ts-eslint/Rule
applyDefault ./applyDefault

Re-exports

Type Source Exported Names
named ../ts-eslint/Rule RuleListener, RuleModule

Functions

RuleCreator(urlCreator: (ruleName: string) => string): <Options extends readonly unknown[], MessageIds extends str…

Creates reusable function to create rules with default options and docs URLs.

Parameters:

  • urlCreator any: Creates a documentation URL for a given rule name.

Returns: undefined Function to create a rule with the docs URL format.

Raw JSDoc
/**
 * Creates reusable function to create rules with default options and docs URLs.
 *
 * @param urlCreator Creates a documentation URL for a given rule name.
 * @returns Function to create a rule with the docs URL format.
 */

Calls:

  • createRule
  • urlCreator

Internal Comments:

// This function will get much easier to call when this is merged https://github.com/Microsoft/TypeScript/pull/26349
// TODO - when the above PR lands; add type checking for the context.report `data` property

Code
export function RuleCreator<PluginDocs = unknown>(
  urlCreator: (ruleName: string) => string,
) {
  // This function will get much easier to call when this is merged https://github.com/Microsoft/TypeScript/pull/26349
  // TODO - when the above PR lands; add type checking for the context.report `data` property
  return function createNamedRule<
    Options extends readonly unknown[],
    MessageIds extends string,
  >({
    meta,
    name,
    ...rule
  }: Readonly<
    RuleWithMetaAndName<Options, MessageIds, PluginDocs>
  >): RuleModuleWithName<MessageIds, Options, PluginDocs> {
    const ruleWithDocs = createRule<Options, MessageIds, PluginDocs>({
      meta: {
        ...meta,
        docs: {
          ...meta.docs,
          url: urlCreator(name),
        },
      },
      name,
      ...rule,
    });

    return ruleWithDocs as RuleModuleWithName<MessageIds, Options, PluginDocs>;
  };
}

createRule({ create, // Keep accepting dep…: Readonly<RuleWithMeta<Options, MessageI…): RuleModule< MessageIds, Options, PluginDocs >

Parameters:

  • { create, // Keep accepting deprecated defaultOptions for backward compatibility. // eslint-disable-next-line @typescript-eslint/no-deprecated defaultOptions, meta, name, } Readonly<RuleWithMeta<Options, MessageIds, PluginDocs>>

Returns: `RuleModule< MessageIds, Options, PluginDocs

`

Calls:

  • applyDefault (from ./applyDefault)
  • create
Code
function createRule<
  Options extends readonly unknown[],
  MessageIds extends string,
  PluginDocs = unknown,
>({
  create,
  // Keep accepting deprecated defaultOptions for backward compatibility.
  // eslint-disable-next-line @typescript-eslint/no-deprecated
  defaultOptions,
  meta,
  name,
}: Readonly<RuleWithMeta<Options, MessageIds, PluginDocs>>): RuleModule<
  MessageIds,
  Options,
  PluginDocs
> {
  const resolvedDefaultOptions = (meta.defaultOptions ??
    defaultOptions ??
    []) as Readonly<Options>;
  return {
    create(context: Readonly<RuleContext<MessageIds, Options>>): RuleListener {
      const optionsWithDefault = applyDefault(
        resolvedDefaultOptions,
        context.options,
      );
      return create(context, optionsWithDefault);
    },
    defaultOptions,
    meta,
    name,
  };
}

Interfaces

RuleCreateAndOptions<Options extends readonly unknown[], MessageIds extends string>

Interface Code
export interface RuleCreateAndOptions<
  Options extends readonly unknown[],
  MessageIds extends string,
> {
  create: (
    context: Readonly<RuleContext<MessageIds, Options>>,
    optionsWithDefault: Readonly<Options>,
  ) => RuleListener;
  /** @deprecated Use meta.defaultOptions instead */
  defaultOptions?: Readonly<Options>;
}

Properties

Name Type Optional Description
create ( context: Readonly<RuleContext<MessageIds, Options>>, optionsWithDefault: Re... βœ— not shown
defaultOptions Readonly<Options> βœ“ not shown

RuleWithMeta<Options extends readonly unknown[], MessageIds extends string, Docs = unknown>

Interface Code
export interface RuleWithMeta<
  Options extends readonly unknown[],
  MessageIds extends string,
  Docs = unknown,
> extends RuleCreateAndOptions<Options, MessageIds> {
  meta: RuleMetaData<MessageIds, Docs, Options>;
  name?: string;
}

Properties

Name Type Optional Description
meta RuleMetaData<MessageIds, Docs, Options> βœ— not shown
name string βœ“ not shown

RuleWithMetaAndName<Options extends readonly unknown[], MessageIds extends string, Docs = unknown>

Interface Code
export interface RuleWithMetaAndName<
  Options extends readonly unknown[],
  MessageIds extends string,
  Docs = unknown,
> extends RuleCreateAndOptions<Options, MessageIds> {
  meta: NamedCreateRuleMeta<MessageIds, Docs, Options>;
  name: string;
}

Properties

Name Type Optional Description
meta NamedCreateRuleMeta<MessageIds, Docs, Options> βœ— not shown
name string βœ— not shown

Type Aliases

NamedCreateRuleMetaDocs

type NamedCreateRuleMetaDocs = Omit<RuleMetaDataDocs, 'url'>;

NamedCreateRuleMeta<MessageIds extends string, PluginDocs = unknown, Options extends readonly unknown[] = []>

type NamedCreateRuleMeta<MessageIds extends string, PluginDocs = unknown, Options extends readonly unknown[] = []> = {
  docs: PluginDocs & RuleMetaDataDocs;
} & Omit<RuleMetaData<MessageIds, PluginDocs, Options>, 'docs'>;

RuleModuleWithName<MessageIds extends string, Options extends readonly unknown[] = [], Docs = unknown, ExtendedRuleListener extends RuleListener = RuleListener>

type RuleModuleWithName<MessageIds extends string, Options extends readonly unknown[] = [], Docs = unknown, ExtendedRuleListener extends RuleListener = RuleListener> = RuleModule<MessageIds, Options, Docs, ExtendedRuleListener> & {
  name: string;
};

Generated by Syntax Scribe