import { TSESLint } from "@typescript-eslint/utils";
import "@typescript-eslint/utils/eslint-utils";
import { Linter } from "eslint";

//#region src/util.d.ts
interface PluginDocumentation {
  description: string;
  recommended?: boolean;
  requiresTypeChecking: boolean;
}
//#endregion
//#region src/index.d.ts
declare const PLUGIN_NAME: string;
declare const plugin: {
  meta: {
    name: string;
    version: string;
  };
  rules: {
    "lua-truthiness": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "misleading-lua-tuple-checks": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-any": TSESLint.RuleModule<"any-violation" | "suggest-unknown", [{
      fixToUnknown: boolean;
    }], PluginDocumentation, TSESLint.RuleListener>;
    "no-array-pairs": TSESLint.RuleModule<"array-ipairs-violation" | "array-pairs-violation", [], PluginDocumentation, TSESLint.RuleListener>;
    "no-enum-merging": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-export-assignment-let": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-for-in": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-function-expression-name": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-get-set": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-implicit-self": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-invalid-identifier": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-namespace-merging": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-null": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-object-math": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-post-fix-new": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-preceding-spread-element": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-private-identifier": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-unsupported-syntax": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-user-defined-lua-tuple": TSESLint.RuleModule<"lua-tuple-violation" | "tuple-macro-violation", [({
      allowTupleMacro?: boolean;
      shouldFix?: boolean;
    } | undefined)?], PluginDocumentation, TSESLint.RuleListener>;
    "no-value-typeof": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "prefer-get-players": TSESLint.RuleModule<"get-players-children-violation", [{
      validateType: boolean;
    }], PluginDocumentation, TSESLint.RuleListener>;
    "prefer-task-library": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "size-method": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  };
};
declare const configs: {
  /**
   * Recommended configuration for ESLint v9+ (flat config). Enables all
   * plugin rules.
   *
   * @example
   *
   * ```ts
   * // eslint.config.js
   * import roblox from "eslint-plugin-roblox-ts";
   *
   * export default [roblox.configs.recommended];
   * ```
   */
  recommended: {
    plugins: {
      [PLUGIN_NAME]: {
        meta: {
          name: string;
          version: string;
        };
        rules: {
          "lua-truthiness": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "misleading-lua-tuple-checks": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-any": TSESLint.RuleModule<"any-violation" | "suggest-unknown", [{
            fixToUnknown: boolean;
          }], PluginDocumentation, TSESLint.RuleListener>;
          "no-array-pairs": TSESLint.RuleModule<"array-ipairs-violation" | "array-pairs-violation", [], PluginDocumentation, TSESLint.RuleListener>;
          "no-enum-merging": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-export-assignment-let": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-for-in": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-function-expression-name": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-get-set": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-implicit-self": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-invalid-identifier": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-namespace-merging": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-null": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-object-math": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-post-fix-new": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-preceding-spread-element": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-private-identifier": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-unsupported-syntax": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "no-user-defined-lua-tuple": TSESLint.RuleModule<"lua-tuple-violation" | "tuple-macro-violation", [({
            allowTupleMacro?: boolean;
            shouldFix?: boolean;
          } | undefined)?], PluginDocumentation, TSESLint.RuleListener>;
          "no-value-typeof": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "prefer-get-players": TSESLint.RuleModule<"get-players-children-violation", [{
            validateType: boolean;
          }], PluginDocumentation, TSESLint.RuleListener>;
          "prefer-task-library": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          "size-method": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
        };
      };
    };
    rules: Linter.RulesRecord;
  };
  /**
   * Recommended configuration for legacy ESLint v8. Enables all plugin rules.
   *
   * @example
   *
   * ```ts
   * // .eslintrc.js
   * module.exports = {
   * 	extends: ["plugin:roblox-ts/recommended-legacy"],
   * };
   * ```
   */
  "recommended-legacy": {
    plugins: string[];
    rules: Linter.RulesRecord;
  };
};
declare const _default: {
  configs: {
    /**
     * Recommended configuration for ESLint v9+ (flat config). Enables all
     * plugin rules.
     *
     * @example
     *
     * ```ts
     * // eslint.config.js
     * import roblox from "eslint-plugin-roblox-ts";
     *
     * export default [roblox.configs.recommended];
     * ```
     */
    recommended: {
      plugins: {
        [PLUGIN_NAME]: {
          meta: {
            name: string;
            version: string;
          };
          rules: {
            "lua-truthiness": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "misleading-lua-tuple-checks": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-any": TSESLint.RuleModule<"any-violation" | "suggest-unknown", [{
              fixToUnknown: boolean;
            }], PluginDocumentation, TSESLint.RuleListener>;
            "no-array-pairs": TSESLint.RuleModule<"array-ipairs-violation" | "array-pairs-violation", [], PluginDocumentation, TSESLint.RuleListener>;
            "no-enum-merging": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-export-assignment-let": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-for-in": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-function-expression-name": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-get-set": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-implicit-self": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-invalid-identifier": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-namespace-merging": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-null": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-object-math": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-post-fix-new": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-preceding-spread-element": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-private-identifier": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-unsupported-syntax": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "no-user-defined-lua-tuple": TSESLint.RuleModule<"lua-tuple-violation" | "tuple-macro-violation", [({
              allowTupleMacro?: boolean;
              shouldFix?: boolean;
            } | undefined)?], PluginDocumentation, TSESLint.RuleListener>;
            "no-value-typeof": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "prefer-get-players": TSESLint.RuleModule<"get-players-children-violation", [{
              validateType: boolean;
            }], PluginDocumentation, TSESLint.RuleListener>;
            "prefer-task-library": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
            "size-method": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
          };
        };
      };
      rules: Linter.RulesRecord;
    };
    /**
     * Recommended configuration for legacy ESLint v8. Enables all plugin rules.
     *
     * @example
     *
     * ```ts
     * // .eslintrc.js
     * module.exports = {
     * 	extends: ["plugin:roblox-ts/recommended-legacy"],
     * };
     * ```
     */
    "recommended-legacy": {
      plugins: string[];
      rules: Linter.RulesRecord;
    };
  };
  meta: {
    name: string;
    version: string;
  };
  rules: {
    "lua-truthiness": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "misleading-lua-tuple-checks": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-any": TSESLint.RuleModule<"any-violation" | "suggest-unknown", [{
      fixToUnknown: boolean;
    }], PluginDocumentation, TSESLint.RuleListener>;
    "no-array-pairs": TSESLint.RuleModule<"array-ipairs-violation" | "array-pairs-violation", [], PluginDocumentation, TSESLint.RuleListener>;
    "no-enum-merging": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-export-assignment-let": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-for-in": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-function-expression-name": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-get-set": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-implicit-self": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-invalid-identifier": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-namespace-merging": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-null": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-object-math": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-post-fix-new": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-preceding-spread-element": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-private-identifier": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-unsupported-syntax": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "no-user-defined-lua-tuple": TSESLint.RuleModule<"lua-tuple-violation" | "tuple-macro-violation", [({
      allowTupleMacro?: boolean;
      shouldFix?: boolean;
    } | undefined)?], PluginDocumentation, TSESLint.RuleListener>;
    "no-value-typeof": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "prefer-get-players": TSESLint.RuleModule<"get-players-children-violation", [{
      validateType: boolean;
    }], PluginDocumentation, TSESLint.RuleListener>;
    "prefer-task-library": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
    "size-method": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  };
};
declare const rules: {
  "lua-truthiness": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "misleading-lua-tuple-checks": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-any": TSESLint.RuleModule<"any-violation" | "suggest-unknown", [{
    fixToUnknown: boolean;
  }], PluginDocumentation, TSESLint.RuleListener>;
  "no-array-pairs": TSESLint.RuleModule<"array-ipairs-violation" | "array-pairs-violation", [], PluginDocumentation, TSESLint.RuleListener>;
  "no-enum-merging": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-export-assignment-let": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-for-in": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-function-expression-name": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-get-set": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-implicit-self": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-invalid-identifier": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-namespace-merging": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-null": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-object-math": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-post-fix-new": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-preceding-spread-element": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-private-identifier": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-unsupported-syntax": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "no-user-defined-lua-tuple": TSESLint.RuleModule<"lua-tuple-violation" | "tuple-macro-violation", [({
    allowTupleMacro?: boolean;
    shouldFix?: boolean;
  } | undefined)?], PluginDocumentation, TSESLint.RuleListener>;
  "no-value-typeof": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "prefer-get-players": TSESLint.RuleModule<"get-players-children-violation", [{
    validateType: boolean;
  }], PluginDocumentation, TSESLint.RuleListener>;
  "prefer-task-library": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
  "size-method": TSESLint.RuleModule<string, [], PluginDocumentation, TSESLint.RuleListener>;
};
type RuleOptions = { [K in keyof RuleDefinitions]: RuleDefinitions[K]["defaultOptions"] };
type Rules = { [K in keyof RuleOptions]: Linter.RuleEntry<RuleOptions[K]> };
type RuleDefinitions = typeof plugin.rules;
//#endregion
export { RuleOptions, Rules, configs, _default as default, rules };