eslint-plugin-roblox-ts
Version:
A collection of ESLint rules specifically targeted for roblox-ts.
274 lines (273 loc) • 16.2 kB
text/typescript
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 };