@ttsc/lint 0.13.1 → 0.14.0-dev.20260528.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +948 -69
- package/lib/defaultFormat.d.ts +9 -6
- package/lib/defaultFormat.js +9 -6
- package/lib/defaultFormat.js.map +1 -1
- package/lib/index.d.ts +46 -0
- package/lib/index.js +35 -10
- package/lib/index.js.map +1 -1
- package/lib/structures/ITtscLintConfig.d.ts +12 -6
- package/lib/structures/{ITtscLintFormatConfig.d.ts → ITtscLintFormat.d.ts} +2 -2
- package/lib/structures/{TtscLintRuleMap.js → ITtscLintFormat.js} +1 -1
- package/lib/structures/ITtscLintFormat.js.map +1 -0
- package/lib/structures/TtscLintRuleSetting.d.ts +49 -0
- package/lib/structures/{TtscLintRuleOptions.js → TtscLintRuleSetting.js} +1 -1
- package/lib/structures/TtscLintRuleSetting.js.map +1 -0
- package/lib/structures/index.d.ts +3 -4
- package/lib/structures/index.js +3 -4
- package/lib/structures/index.js.map +1 -1
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +104 -0
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +14 -0
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +79 -0
- package/lib/structures/rules/ITtscLintBoundariesRules.js +3 -0
- package/lib/structures/rules/ITtscLintBoundariesRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintContributorRules.d.ts +17 -0
- package/lib/structures/rules/ITtscLintContributorRules.js +3 -0
- package/lib/structures/rules/ITtscLintContributorRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintCoreRules.d.ts +1257 -0
- package/lib/structures/{ITtscLintFormatConfig.js → rules/ITtscLintCoreRules.js} +1 -1
- package/lib/structures/rules/ITtscLintCoreRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +17 -0
- package/lib/structures/rules/ITtscLintCypressRuleOptions.js +10 -0
- package/lib/structures/rules/ITtscLintCypressRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintCypressRules.d.ts +129 -0
- package/lib/structures/rules/ITtscLintCypressRules.js +3 -0
- package/lib/structures/rules/ITtscLintCypressRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +157 -0
- package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js +13 -0
- package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +167 -0
- package/lib/structures/rules/ITtscLintFunctionalRules.js +3 -0
- package/lib/structures/rules/ITtscLintFunctionalRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintJestRules.d.ts +201 -0
- package/lib/structures/rules/ITtscLintJestRules.js +3 -0
- package/lib/structures/rules/ITtscLintJestRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintJsdocRules.d.ts +140 -0
- package/lib/structures/rules/ITtscLintJsdocRules.js +3 -0
- package/lib/structures/rules/ITtscLintJsdocRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +302 -0
- package/lib/structures/rules/ITtscLintJsxA11yRules.js +3 -0
- package/lib/structures/rules/ITtscLintJsxA11yRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintNextjsRules.d.ts +185 -0
- package/lib/structures/rules/ITtscLintNextjsRules.js +3 -0
- package/lib/structures/rules/ITtscLintNextjsRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +330 -0
- package/lib/structures/rules/ITtscLintPlaywrightRules.js +3 -0
- package/lib/structures/rules/ITtscLintPlaywrightRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintPromiseRules.d.ts +188 -0
- package/lib/structures/rules/ITtscLintPromiseRules.js +3 -0
- package/lib/structures/rules/ITtscLintPromiseRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +18 -0
- package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js +8 -0
- package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +51 -0
- package/lib/structures/rules/ITtscLintReactPerfRules.js +3 -0
- package/lib/structures/rules/ITtscLintReactPerfRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +39 -0
- package/lib/structures/rules/ITtscLintReactRuleOptions.js +12 -0
- package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintReactRules.d.ts +289 -0
- package/lib/structures/rules/ITtscLintReactRules.js +3 -0
- package/lib/structures/rules/ITtscLintReactRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintRegexpRules.d.ts +190 -0
- package/lib/structures/rules/ITtscLintRegexpRules.js +3 -0
- package/lib/structures/rules/ITtscLintRegexpRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +66 -0
- package/lib/structures/rules/ITtscLintRuleOptionsMap.js +3 -0
- package/lib/structures/rules/ITtscLintRuleOptionsMap.js.map +1 -0
- package/lib/structures/rules/ITtscLintRules.d.ts +55 -0
- package/lib/structures/{TtscLintRule.js → rules/ITtscLintRules.js} +1 -1
- package/lib/structures/rules/ITtscLintRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintSecurityRules.d.ts +148 -0
- package/lib/structures/rules/ITtscLintSecurityRules.js +3 -0
- package/lib/structures/rules/ITtscLintSecurityRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintSolidRules.d.ts +181 -0
- package/lib/structures/rules/ITtscLintSolidRules.js +3 -0
- package/lib/structures/rules/ITtscLintSolidRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +21 -0
- package/lib/structures/rules/ITtscLintStorybookRuleOptions.js +9 -0
- package/lib/structures/rules/ITtscLintStorybookRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintStorybookRules.d.ts +174 -0
- package/lib/structures/rules/ITtscLintStorybookRules.js +3 -0
- package/lib/structures/rules/ITtscLintStorybookRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +94 -0
- package/lib/structures/rules/ITtscLintTanstackQueryRules.js +3 -0
- package/lib/structures/rules/ITtscLintTanstackQueryRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +22 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js +10 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +310 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRules.js +3 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +1132 -0
- package/lib/structures/rules/ITtscLintTypeScriptRules.js +3 -0
- package/lib/structures/rules/ITtscLintTypeScriptRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintUnicornRules.d.ts +997 -0
- package/lib/structures/rules/ITtscLintUnicornRules.js +3 -0
- package/lib/structures/rules/ITtscLintUnicornRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintVitestRules.d.ts +141 -0
- package/lib/structures/rules/ITtscLintVitestRules.js +3 -0
- package/lib/structures/rules/ITtscLintVitestRules.js.map +1 -0
- package/lib/structures/rules/index.d.ts +31 -0
- package/lib/structures/rules/index.js +48 -0
- package/lib/structures/rules/index.js.map +1 -0
- package/linthost/ast_helpers.go +30 -5
- package/linthost/config.go +48 -17
- package/linthost/config_format.go +9 -9
- package/linthost/directives.go +67 -25
- package/linthost/dispatch.go +14 -3
- package/linthost/engine.go +152 -31
- package/linthost/fix.go +2 -2
- package/linthost/lsp.go +747 -0
- package/linthost/print_dispatch.go +2 -2
- package/linthost/print_nodes_function.go +2 -2
- package/linthost/print_nodes_object.go +1 -1
- package/linthost/rule_names.go +14 -0
- package/linthost/rules_arrays.go +2 -2
- package/linthost/rules_boundaries.go +532 -0
- package/linthost/rules_camelcase.go +133 -0
- package/linthost/rules_complexity.go +94 -0
- package/linthost/rules_consistent_return.go +130 -0
- package/linthost/rules_console.go +1 -1
- package/linthost/rules_core_extra.go +739 -0
- package/linthost/rules_curly.go +70 -0
- package/linthost/rules_cypress.go +608 -0
- package/linthost/rules_debugger.go +2 -2
- package/linthost/rules_default_case.go +39 -0
- package/linthost/rules_default_case_last.go +46 -0
- package/linthost/rules_dupes.go +3 -3
- package/linthost/rules_empty.go +3 -3
- package/linthost/rules_escape.go +44 -24
- package/linthost/rules_eval.go +2 -2
- package/linthost/rules_finally.go +2 -2
- package/linthost/rules_format_jsdoc.go +1 -1
- package/linthost/rules_format_print_width.go +9 -9
- package/linthost/rules_format_quotes.go +1 -1
- package/linthost/rules_format_semi.go +1 -1
- package/linthost/rules_format_sort_imports.go +1 -1
- package/linthost/rules_format_trailing_comma.go +1 -1
- package/linthost/rules_functional.go +967 -0
- package/linthost/rules_gap.go +24 -45
- package/linthost/rules_grouped_accessor_pairs.go +87 -0
- package/linthost/rules_guard_for_in.go +198 -0
- package/linthost/rules_id_length.go +77 -0
- package/linthost/rules_imports.go +70 -2
- package/linthost/rules_init_declarations.go +53 -0
- package/linthost/rules_jest.go +618 -0
- package/linthost/rules_jsdoc.go +502 -0
- package/linthost/rules_jsx_a11y.go +1264 -0
- package/linthost/rules_logic.go +12 -12
- package/linthost/rules_loops.go +1 -1
- package/linthost/rules_max_classes_per_file.go +58 -0
- package/linthost/rules_max_depth.go +83 -0
- package/linthost/rules_max_lines.go +101 -0
- package/linthost/rules_max_lines_per_function.go +57 -0
- package/linthost/rules_max_nested_callbacks.go +61 -0
- package/linthost/rules_max_params.go +49 -0
- package/linthost/rules_max_statements.go +59 -0
- package/linthost/rules_misc.go +1 -1
- package/linthost/rules_nextjs.go +697 -0
- package/linthost/rules_no_else_return.go +75 -0
- package/linthost/rules_no_empty_named_blocks.go +91 -0
- package/linthost/rules_no_extend_native.go +51 -0
- package/linthost/rules_no_import_assign.go +140 -0
- package/linthost/rules_no_invalid_this.go +52 -0
- package/linthost/rules_no_loop_func.go +85 -0
- package/linthost/rules_no_magic_numbers.go +123 -0
- package/linthost/rules_no_mixed_operators.go +80 -0
- package/linthost/rules_no_param_reassign.go +98 -0
- package/linthost/rules_no_redeclare.go +270 -0
- package/linthost/rules_no_restricted_imports.go +105 -0
- package/linthost/rules_no_restricted_syntax.go +49 -0
- package/linthost/rules_no_shadow.go +147 -0
- package/linthost/rules_no_unreachable.go +77 -0
- package/linthost/rules_no_useless_assignment.go +120 -0
- package/linthost/rules_no_useless_constructor.go +245 -0
- package/linthost/rules_no_useless_return.go +51 -0
- package/linthost/rules_params.go +1 -1
- package/linthost/rules_playwright.go +788 -0
- package/linthost/rules_prefer_arrow_callback.go +124 -0
- package/linthost/rules_prefer_destructuring.go +98 -0
- package/linthost/rules_prefer_named_capture_group.go +129 -0
- package/linthost/rules_prefer_rest_params.go +94 -0
- package/linthost/rules_problems.go +41 -30
- package/linthost/rules_promise.go +1128 -73
- package/linthost/rules_protos.go +2 -2
- package/linthost/rules_react.go +773 -0
- package/linthost/rules_react_extras.go +227 -0
- package/linthost/rules_react_hooks.go +848 -0
- package/linthost/rules_react_perf.go +293 -0
- package/linthost/rules_react_refresh.go +583 -0
- package/linthost/rules_regexp.go +410 -0
- package/linthost/rules_security.go +830 -0
- package/linthost/rules_self.go +2 -2
- package/linthost/rules_solid.go +1073 -0
- package/linthost/rules_sort_imports.go +69 -0
- package/linthost/rules_sort_keys.go +134 -0
- package/linthost/rules_storybook.go +1176 -0
- package/linthost/rules_strings.go +4 -4
- package/linthost/rules_suggestions.go +38 -38
- package/linthost/rules_tanstack_query.go +844 -0
- package/linthost/rules_testing_library.go +1204 -0
- package/linthost/rules_throw.go +1 -1
- package/linthost/rules_ts.go +19 -19
- package/linthost/rules_ts_async.go +399 -0
- package/linthost/rules_ts_class_literal_property_style.go +115 -0
- package/linthost/rules_ts_consistent_type_exports.go +256 -0
- package/linthost/rules_ts_explicit_function_return_type.go +67 -0
- package/linthost/rules_ts_extra.go +155 -36
- package/linthost/rules_ts_no_base_to_string.go +218 -0
- package/linthost/rules_ts_no_confusing_void.go +72 -0
- package/linthost/rules_ts_no_deprecated.go +195 -0
- package/linthost/rules_ts_no_for_in_array.go +84 -0
- package/linthost/rules_ts_no_magic_numbers.go +124 -0
- package/linthost/rules_ts_no_meaningless_void_operator.go +84 -0
- package/linthost/rules_ts_no_misused_spread.go +104 -0
- package/linthost/rules_ts_no_redundant_type_constituents.go +113 -0
- package/linthost/rules_ts_no_restricted_types.go +62 -0
- package/linthost/rules_ts_no_unnecessary_boolean_literal_compare.go +129 -0
- package/linthost/rules_ts_no_unnecessary_condition.go +250 -0
- package/linthost/rules_ts_no_unnecessary_qualifier.go +118 -0
- package/linthost/rules_ts_no_unnecessary_template_expression.go +178 -0
- package/linthost/rules_ts_no_unnecessary_type_arguments.go +234 -0
- package/linthost/rules_ts_no_unnecessary_type_assertion.go +157 -0
- package/linthost/rules_ts_no_unsafe_argument.go +82 -0
- package/linthost/rules_ts_no_unsafe_assignment.go +102 -0
- package/linthost/rules_ts_no_unsafe_call.go +82 -0
- package/linthost/rules_ts_no_unsafe_enum_comparison.go +235 -0
- package/linthost/rules_ts_no_unsafe_member_access.go +58 -0
- package/linthost/rules_ts_no_unsafe_return.go +126 -0
- package/linthost/rules_ts_no_unsafe_unary_minus.go +81 -0
- package/linthost/rules_ts_no_useless_constructor.go +52 -0
- package/linthost/rules_ts_non_nullable_type_assertion_style.go +108 -0
- package/linthost/rules_ts_parameter_properties.go +38 -0
- package/linthost/rules_ts_prefer_find.go +178 -0
- package/linthost/rules_ts_prefer_includes.go +255 -0
- package/linthost/rules_ts_prefer_nullish_coalescing.go +104 -0
- package/linthost/rules_ts_prefer_optional_chain.go +228 -0
- package/linthost/rules_ts_prefer_promise_reject_errors.go +176 -0
- package/linthost/rules_ts_prefer_readonly.go +73 -0
- package/linthost/rules_ts_prefer_reduce_type_parameter.go +116 -0
- package/linthost/rules_ts_prefer_regexp_exec.go +122 -0
- package/linthost/rules_ts_prefer_return_this_type.go +135 -0
- package/linthost/rules_ts_prefer_string_starts_ends_with.go +360 -0
- package/linthost/rules_ts_promise_function_async.go +77 -0
- package/linthost/rules_ts_related_getter_setter_pairs.go +113 -0
- package/linthost/rules_ts_require_array_sort_compare.go +96 -0
- package/linthost/rules_ts_restrict_plus_operands.go +127 -0
- package/linthost/rules_ts_restrict_template_expressions.go +95 -0
- package/linthost/rules_ts_simple.go +387 -0
- package/linthost/rules_ts_sort_type_constituents.go +144 -0
- package/linthost/rules_ts_strict_boolean_expressions.go +157 -0
- package/linthost/rules_ts_switch_exhaustiveness_check.go +147 -0
- package/linthost/rules_ts_unbound_method.go +126 -0
- package/linthost/rules_tsdoc.go +136 -0
- package/linthost/rules_unicorn_better_regex.go +27 -0
- package/linthost/rules_unicorn_catch_error_name.go +46 -0
- package/linthost/rules_unicorn_consistent_assert.go +47 -0
- package/linthost/rules_unicorn_consistent_date_clone.go +54 -0
- package/linthost/rules_unicorn_consistent_destructuring.go +25 -0
- package/linthost/rules_unicorn_consistent_empty_array_spread.go +62 -0
- package/linthost/rules_unicorn_consistent_existence_index_check.go +80 -0
- package/linthost/rules_unicorn_consistent_function_scoping.go +25 -0
- package/linthost/rules_unicorn_consistent_template_literal_escape.go +25 -0
- package/linthost/rules_unicorn_custom_error_definition.go +138 -0
- package/linthost/rules_unicorn_empty_brace_spaces.go +73 -0
- package/linthost/rules_unicorn_error_message.go +64 -0
- package/linthost/rules_unicorn_escape_case.go +51 -0
- package/linthost/rules_unicorn_expiring_todo_comments.go +78 -0
- package/linthost/rules_unicorn_explicit_length_check.go +88 -0
- package/linthost/rules_unicorn_filename_case.go +29 -0
- package/linthost/rules_unicorn_import_style.go +28 -0
- package/linthost/rules_unicorn_isolated_functions.go +29 -0
- package/linthost/rules_unicorn_new_for_builtins.go +87 -0
- package/linthost/rules_unicorn_no_abusive_eslint_disable.go +63 -0
- package/linthost/rules_unicorn_no_accessor_recursion.go +115 -0
- package/linthost/rules_unicorn_no_anonymous_default_export.go +74 -0
- package/linthost/rules_unicorn_no_array_callback_reference.go +65 -0
- package/linthost/rules_unicorn_no_array_for_each.go +40 -0
- package/linthost/rules_unicorn_no_array_method_this_argument.go +61 -0
- package/linthost/rules_unicorn_no_array_reduce.go +41 -0
- package/linthost/rules_unicorn_no_array_reverse.go +44 -0
- package/linthost/rules_unicorn_no_array_sort.go +43 -0
- package/linthost/rules_unicorn_no_await_expression_member.go +40 -0
- package/linthost/rules_unicorn_no_await_in_promise_methods.go +69 -0
- package/linthost/rules_unicorn_no_console_spaces.go +61 -0
- package/linthost/rules_unicorn_no_document_cookie.go +41 -0
- package/linthost/rules_unicorn_no_empty_file.go +44 -0
- package/linthost/rules_unicorn_no_for_loop.go +102 -0
- package/linthost/rules_unicorn_no_hex_escape.go +42 -0
- package/linthost/rules_unicorn_no_immediate_mutation.go +90 -0
- package/linthost/rules_unicorn_no_instanceof_builtins.go +66 -0
- package/linthost/rules_unicorn_no_invalid_fetch_options.go +79 -0
- package/linthost/rules_unicorn_no_invalid_remove_event_listener.go +51 -0
- package/linthost/rules_unicorn_no_keyword_prefix.go +101 -0
- package/linthost/rules_unicorn_no_lonely_if.go +44 -0
- package/linthost/rules_unicorn_no_magic_array_flat_depth.go +51 -0
- package/linthost/rules_unicorn_no_named_default.go +54 -0
- package/linthost/rules_unicorn_no_negated_condition.go +85 -0
- package/linthost/rules_unicorn_no_negation_in_equality_check.go +50 -0
- package/linthost/rules_unicorn_no_nested_ternary.go +43 -0
- package/linthost/rules_unicorn_no_new_array.go +30 -0
- package/linthost/rules_unicorn_no_new_buffer.go +31 -0
- package/linthost/rules_unicorn_no_null.go +24 -0
- package/linthost/rules_unicorn_no_object_as_default_parameter.go +48 -0
- package/linthost/rules_unicorn_no_process_exit.go +43 -0
- package/linthost/rules_unicorn_no_single_promise_in_promise_methods.go +59 -0
- package/linthost/rules_unicorn_no_static_only_class.go +56 -0
- package/linthost/rules_unicorn_no_thenable.go +74 -0
- package/linthost/rules_unicorn_no_this_assignment.go +35 -0
- package/linthost/rules_unicorn_no_typeof_undefined.go +58 -0
- package/linthost/rules_unicorn_no_unnecessary_array_flat_depth.go +49 -0
- package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +70 -0
- package/linthost/rules_unicorn_no_unnecessary_await.go +51 -0
- package/linthost/rules_unicorn_no_unnecessary_polyfills.go +32 -0
- package/linthost/rules_unicorn_no_unnecessary_slice_end.go +48 -0
- package/linthost/rules_unicorn_no_unreadable_array_destructuring.go +115 -0
- package/linthost/rules_unicorn_no_unreadable_iife.go +50 -0
- package/linthost/rules_unicorn_no_unused_properties.go +30 -0
- package/linthost/rules_unicorn_no_useless_collection_argument.go +63 -0
- package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +46 -0
- package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +81 -0
- package/linthost/rules_unicorn_no_useless_iterator_to_array.go +72 -0
- package/linthost/rules_unicorn_no_useless_length_check.go +144 -0
- package/linthost/rules_unicorn_no_useless_promise_resolve_reject.go +81 -0
- package/linthost/rules_unicorn_no_useless_spread.go +67 -0
- package/linthost/rules_unicorn_no_useless_switch_case.go +55 -0
- package/linthost/rules_unicorn_no_useless_undefined.go +55 -0
- package/linthost/rules_unicorn_no_zero_fractions.go +52 -0
- package/linthost/rules_unicorn_number_literal_case.go +69 -0
- package/linthost/rules_unicorn_numeric_separators_style.go +75 -0
- package/linthost/rules_unicorn_prefer_add_event_listener.go +66 -0
- package/linthost/rules_unicorn_prefer_array_find.go +51 -0
- package/linthost/rules_unicorn_prefer_array_flat.go +52 -0
- package/linthost/rules_unicorn_prefer_array_flat_map.go +63 -0
- package/linthost/rules_unicorn_prefer_array_index_of.go +147 -0
- package/linthost/rules_unicorn_prefer_array_some.go +67 -0
- package/linthost/rules_unicorn_prefer_at.go +77 -0
- package/linthost/rules_unicorn_prefer_bigint_literals.go +77 -0
- package/linthost/rules_unicorn_prefer_blob_reading_methods.go +44 -0
- package/linthost/rules_unicorn_prefer_class_fields.go +93 -0
- package/linthost/rules_unicorn_prefer_classlist_toggle.go +120 -0
- package/linthost/rules_unicorn_prefer_code_point.go +49 -0
- package/linthost/rules_unicorn_prefer_date_now.go +78 -0
- package/linthost/rules_unicorn_prefer_default_parameters.go +144 -0
- package/linthost/rules_unicorn_prefer_dom_node_append.go +40 -0
- package/linthost/rules_unicorn_prefer_dom_node_dataset.go +55 -0
- package/linthost/rules_unicorn_prefer_dom_node_remove.go +41 -0
- package/linthost/rules_unicorn_prefer_dom_node_text_content.go +37 -0
- package/linthost/rules_unicorn_prefer_event_target.go +36 -0
- package/linthost/rules_unicorn_prefer_export_from.go +129 -0
- package/linthost/rules_unicorn_prefer_global_this.go +127 -0
- package/linthost/rules_unicorn_prefer_import_meta_properties.go +66 -0
- package/linthost/rules_unicorn_prefer_includes.go +149 -0
- package/linthost/rules_unicorn_prefer_json_parse_buffer.go +65 -0
- package/linthost/rules_unicorn_prefer_keyboard_event_key.go +38 -0
- package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +48 -0
- package/linthost/rules_unicorn_prefer_math_min_max.go +60 -0
- package/linthost/rules_unicorn_prefer_math_trunc.go +62 -0
- package/linthost/rules_unicorn_prefer_modern_dom_apis.go +47 -0
- package/linthost/rules_unicorn_prefer_modern_math_apis.go +70 -0
- package/linthost/rules_unicorn_prefer_module.go +50 -0
- package/linthost/rules_unicorn_prefer_native_coercion_functions.go +114 -0
- package/linthost/rules_unicorn_prefer_negative_index.go +74 -0
- package/linthost/rules_unicorn_prefer_node_protocol.go +122 -0
- package/linthost/rules_unicorn_prefer_number_properties.go +88 -0
- package/linthost/rules_unicorn_prefer_object_from_entries.go +55 -0
- package/linthost/rules_unicorn_prefer_optional_catch_binding.go +62 -0
- package/linthost/rules_unicorn_prefer_prototype_methods.go +54 -0
- package/linthost/rules_unicorn_prefer_query_selector.go +56 -0
- package/linthost/rules_unicorn_prefer_reflect_apply.go +36 -0
- package/linthost/rules_unicorn_prefer_regexp_test_rule.go +80 -0
- package/linthost/rules_unicorn_prefer_response_static_json.go +53 -0
- package/linthost/rules_unicorn_prefer_set_has.go +42 -0
- package/linthost/rules_unicorn_prefer_set_size.go +48 -0
- package/linthost/rules_unicorn_prefer_simple_condition_first.go +34 -0
- package/linthost/rules_unicorn_prefer_single_call.go +96 -0
- package/linthost/rules_unicorn_prefer_spread.go +51 -0
- package/linthost/rules_unicorn_prefer_string_raw.go +43 -0
- package/linthost/rules_unicorn_prefer_string_replace_all.go +95 -0
- package/linthost/rules_unicorn_prefer_string_slice.go +43 -0
- package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +148 -0
- package/linthost/rules_unicorn_prefer_string_trim_start_end.go +48 -0
- package/linthost/rules_unicorn_prefer_structured_clone.go +71 -0
- package/linthost/rules_unicorn_prefer_switch.go +103 -0
- package/linthost/rules_unicorn_prefer_ternary.go +71 -0
- package/linthost/rules_unicorn_prefer_top_level_await.go +72 -0
- package/linthost/rules_unicorn_prefer_type_error.go +127 -0
- package/linthost/rules_unicorn_prevent_abbreviations.go +127 -0
- package/linthost/rules_unicorn_relative_url_style.go +49 -0
- package/linthost/rules_unicorn_require_array_join_separator.go +45 -0
- package/linthost/rules_unicorn_require_module_attributes.go +54 -0
- package/linthost/rules_unicorn_require_module_specifiers.go +55 -0
- package/linthost/rules_unicorn_require_number_to_fixed_digits_argument.go +43 -0
- package/linthost/rules_unicorn_require_post_message_target_origin.go +44 -0
- package/linthost/rules_unicorn_string_content.go +27 -0
- package/linthost/rules_unicorn_switch_case_braces.go +42 -0
- package/linthost/rules_unicorn_switch_case_break_position.go +31 -0
- package/linthost/rules_unicorn_template_indent.go +28 -0
- package/linthost/rules_unicorn_text_encoding_identifier_case.go +72 -0
- package/linthost/rules_unicorn_throw_new_error.go +61 -0
- package/linthost/rules_var.go +4 -4
- package/linthost/rules_vitest.go +568 -0
- package/package.json +3 -3
- package/plugin/main.go +49 -3
- package/rule/astutil/astutil.go +10 -3
- package/rule/rule.go +12 -10
- package/src/defaultFormat.ts +11 -8
- package/src/index.ts +40 -16
- package/src/structures/ITtscLintConfig.ts +12 -6
- package/src/structures/{ITtscLintFormatConfig.ts → ITtscLintFormat.ts} +2 -2
- package/src/structures/TtscLintRuleSetting.ts +55 -0
- package/src/structures/index.ts +3 -4
- package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +128 -0
- package/src/structures/rules/ITtscLintBoundariesRules.ts +95 -0
- package/src/structures/rules/ITtscLintContributorRules.ts +21 -0
- package/src/structures/rules/ITtscLintCoreRules.ts +1406 -0
- package/src/structures/rules/ITtscLintCypressRuleOptions.ts +18 -0
- package/src/structures/rules/ITtscLintCypressRules.ts +145 -0
- package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +213 -0
- package/src/structures/rules/ITtscLintFunctionalRules.ts +202 -0
- package/src/structures/rules/ITtscLintJestRules.ts +220 -0
- package/src/structures/rules/ITtscLintJsdocRules.ts +153 -0
- package/src/structures/rules/ITtscLintJsxA11yRules.ts +339 -0
- package/src/structures/rules/ITtscLintNextjsRules.ts +206 -0
- package/src/structures/rules/ITtscLintPlaywrightRules.ts +361 -0
- package/src/structures/rules/ITtscLintPromiseRules.ts +205 -0
- package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +19 -0
- package/src/structures/rules/ITtscLintReactPerfRules.ts +55 -0
- package/src/structures/rules/ITtscLintReactRuleOptions.ts +43 -0
- package/src/structures/rules/ITtscLintReactRules.ts +321 -0
- package/src/structures/rules/ITtscLintRegexpRules.ts +212 -0
- package/src/structures/rules/ITtscLintRuleOptionsMap.ts +89 -0
- package/src/structures/rules/ITtscLintRules.ts +77 -0
- package/src/structures/rules/ITtscLintSecurityRules.ts +162 -0
- package/src/structures/rules/ITtscLintSolidRules.ts +202 -0
- package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +23 -0
- package/src/structures/rules/ITtscLintStorybookRules.ts +193 -0
- package/src/structures/rules/ITtscLintTanstackQueryRules.ts +102 -0
- package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +24 -0
- package/src/structures/rules/ITtscLintTestingLibraryRules.ts +342 -0
- package/src/structures/rules/ITtscLintTypeScriptRules.ts +1230 -0
- package/src/structures/rules/ITtscLintUnicornRules.ts +1143 -0
- package/src/structures/rules/ITtscLintVitestRules.ts +154 -0
- package/src/structures/rules/index.ts +31 -0
- package/lib/structures/ITtscLintFormatConfig.js.map +0 -1
- package/lib/structures/TtscLintRule.d.ts +0 -17
- package/lib/structures/TtscLintRule.js.map +0 -1
- package/lib/structures/TtscLintRuleMap.d.ts +0 -46
- package/lib/structures/TtscLintRuleMap.js.map +0 -1
- package/lib/structures/TtscLintRuleOptions.d.ts +0 -137
- package/lib/structures/TtscLintRuleOptions.js.map +0 -1
- package/src/structures/TtscLintRule.ts +0 -160
- package/src/structures/TtscLintRuleMap.ts +0 -55
- package/src/structures/TtscLintRuleOptions.ts +0 -151
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import type { ITtscLintReactOnlyExportComponentsRuleOptions } from "./ITtscLintReactRuleOptions";
|
|
2
|
+
import type {
|
|
3
|
+
TtscLintRuleOptionsSetting,
|
|
4
|
+
TtscLintRuleSetting,
|
|
5
|
+
} from "../TtscLintRuleSetting";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* React TSX rules.
|
|
9
|
+
*
|
|
10
|
+
* Bundles rules from `eslint-plugin-react`, `eslint-plugin-react-hooks`,
|
|
11
|
+
* and `eslint-plugin-react-refresh` under one namespace, matching
|
|
12
|
+
* Oxlint's `react/*` plugin layout. Performance-only rules live in a
|
|
13
|
+
* separate {@link ITtscLintReactPerfRules} family because they are
|
|
14
|
+
* opt-in toggles rather than correctness checks.
|
|
15
|
+
*
|
|
16
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react
|
|
17
|
+
*/
|
|
18
|
+
export interface ITtscLintReactRules {
|
|
19
|
+
/**
|
|
20
|
+
* Require explicit, valid `type` values on JSX `<button>` elements
|
|
21
|
+
* (`"button"`, `"submit"`, `"reset"`) — the HTML default of
|
|
22
|
+
* `"submit"` causes accidental form submissions.
|
|
23
|
+
*
|
|
24
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/button-has-type.md
|
|
25
|
+
*/
|
|
26
|
+
"react/button-has-type"?: TtscLintRuleSetting;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Require components wrapped in `React.memo(...)` or
|
|
30
|
+
* `React.forwardRef(...)` to be named — either by passing a named
|
|
31
|
+
* function, assigning the call to a named binding, or setting an
|
|
32
|
+
* explicit `displayName`.
|
|
33
|
+
*
|
|
34
|
+
* Anonymous wrappers leave the resulting component nameless in
|
|
35
|
+
* React DevTools and runtime stack frames.
|
|
36
|
+
*
|
|
37
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/display-name.md
|
|
38
|
+
*/
|
|
39
|
+
"react/display-name"?: TtscLintRuleSetting;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Detect high-confidence missing identifiers in React Hook
|
|
43
|
+
* dependency arrays (`useEffect`, `useLayoutEffect`,
|
|
44
|
+
* `useInsertionEffect`, `useMemo`, `useCallback`).
|
|
45
|
+
*
|
|
46
|
+
* @reference https://react.dev/reference/react/useEffect#specifying-reactive-dependencies
|
|
47
|
+
*/
|
|
48
|
+
"react/exhaustive-deps"?: TtscLintRuleSetting;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Reject declaring a component or custom Hook inside another
|
|
52
|
+
* component or Hook body.
|
|
53
|
+
*
|
|
54
|
+
* Each render rebuilds the inner function, giving it a new
|
|
55
|
+
* identity that discards its state and breaks memoization.
|
|
56
|
+
*
|
|
57
|
+
* @reference https://react.dev/reference/rules/components-and-hooks-must-be-pure
|
|
58
|
+
*/
|
|
59
|
+
"react/component-hook-factories"?: TtscLintRuleSetting;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Require JSX `<iframe>` elements to declare a `sandbox` attribute,
|
|
63
|
+
* which restricts what embedded content can do (scripts, forms,
|
|
64
|
+
* navigation).
|
|
65
|
+
*
|
|
66
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/iframe-missing-sandbox.md
|
|
67
|
+
*/
|
|
68
|
+
"react/iframe-missing-sandbox"?: TtscLintRuleSetting;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Reject mutating props, state, or Hook return values inside a
|
|
72
|
+
* component or Hook.
|
|
73
|
+
*
|
|
74
|
+
* React treats these as read-only; mutating a memoized value can
|
|
75
|
+
* desync renders from the dependencies React tracked it under.
|
|
76
|
+
*
|
|
77
|
+
* @reference https://react.dev/reference/rules/components-and-hooks-must-be-pure
|
|
78
|
+
*/
|
|
79
|
+
"react/immutability"?: TtscLintRuleSetting;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Require `key` props on JSX elements produced from arrays or
|
|
83
|
+
* `.map(...)` calls — React uses the key to track list identity
|
|
84
|
+
* across renders.
|
|
85
|
+
*
|
|
86
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-key.md
|
|
87
|
+
*/
|
|
88
|
+
"react/jsx-key"?: TtscLintRuleSetting;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Reject duplicate JSX prop names on the same element — later
|
|
92
|
+
* occurrences silently overwrite earlier ones.
|
|
93
|
+
*
|
|
94
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
|
|
95
|
+
*/
|
|
96
|
+
"react/jsx-no-duplicate-props"?: TtscLintRuleSetting;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Reject `javascript:` URLs in JSX URL-like props such as `href`
|
|
100
|
+
* and `src`.
|
|
101
|
+
*
|
|
102
|
+
* Such URLs evaluate the URL body as script — the same
|
|
103
|
+
* code-execution surface as `eval`, and a common XSS vector when
|
|
104
|
+
* the value is user-controlled.
|
|
105
|
+
*
|
|
106
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-script-url.md
|
|
107
|
+
*/
|
|
108
|
+
"react/jsx-no-script-url"?: TtscLintRuleSetting;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Reject `<a target="_blank">` (or any JSX element with
|
|
112
|
+
* `target="_blank"`) that does not also carry `rel="noreferrer"`
|
|
113
|
+
* (or `rel="noopener noreferrer"`).
|
|
114
|
+
*
|
|
115
|
+
* Without those tokens the opened page can navigate the originating
|
|
116
|
+
* window through `window.opener`, a phishing and tab-nabbing vector.
|
|
117
|
+
*
|
|
118
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md
|
|
119
|
+
*/
|
|
120
|
+
"react/jsx-no-target-blank"?: TtscLintRuleSetting;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Reject JSX elements whose tag is an uppercase identifier with no
|
|
124
|
+
* value-level declaration anywhere in the source file.
|
|
125
|
+
*
|
|
126
|
+
* Lowercase tags are intrinsic HTML; qualified `<Foo.Bar>` forms are
|
|
127
|
+
* skipped because resolving the outer name requires module-level
|
|
128
|
+
* information that belongs to the type checker.
|
|
129
|
+
*
|
|
130
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
|
|
131
|
+
*/
|
|
132
|
+
"react/jsx-no-undef"?: TtscLintRuleSetting;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Reject JSX fragments that wrap exactly one element child or have
|
|
136
|
+
* no meaningful content — the child (or nothing) can be returned
|
|
137
|
+
* directly.
|
|
138
|
+
*
|
|
139
|
+
* Covers both the short `<>...</>` form and explicit
|
|
140
|
+
* `<Fragment>` / `<React.Fragment>` elements.
|
|
141
|
+
*
|
|
142
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-useless-fragment.md
|
|
143
|
+
*/
|
|
144
|
+
"react/jsx-no-useless-fragment"?: TtscLintRuleSetting;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Reject `key={index}` patterns inside JSX lists — array index
|
|
148
|
+
* keys reorder incorrectly on insertion.
|
|
149
|
+
*
|
|
150
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md
|
|
151
|
+
*/
|
|
152
|
+
"react/no-array-index-key"?: TtscLintRuleSetting;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Reject passing children through an explicit `children` JSX prop.
|
|
156
|
+
*
|
|
157
|
+
* The nested-tag form is shorter, mirrors HTML, and avoids the
|
|
158
|
+
* double-children footgun where a `children` prop and nested JSX
|
|
159
|
+
* both target the same slot.
|
|
160
|
+
*
|
|
161
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-children-prop.md
|
|
162
|
+
*/
|
|
163
|
+
"react/no-children-prop"?: TtscLintRuleSetting;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Reject `dangerouslySetInnerHTML` altogether.
|
|
167
|
+
*
|
|
168
|
+
* The prop bypasses React's escaping and injects raw HTML into the
|
|
169
|
+
* DOM — a common XSS vector when the input is not sanitized
|
|
170
|
+
* upstream.
|
|
171
|
+
*
|
|
172
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-danger.md
|
|
173
|
+
*/
|
|
174
|
+
"react/no-danger"?: TtscLintRuleSetting;
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Reject combining `dangerouslySetInnerHTML` with JSX children
|
|
178
|
+
* — React throws at runtime in this case.
|
|
179
|
+
*
|
|
180
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md
|
|
181
|
+
*/
|
|
182
|
+
"react/no-danger-with-children"?: TtscLintRuleSetting;
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Reject direct writes to `this.state` outside constructor
|
|
186
|
+
* initialization. Use `this.setState(...)` instead.
|
|
187
|
+
*
|
|
188
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md
|
|
189
|
+
*/
|
|
190
|
+
"react/no-direct-mutation-state"?: TtscLintRuleSetting;
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Reject `findDOMNode(...)` calls.
|
|
194
|
+
*
|
|
195
|
+
* The API is deprecated, blocks future React internals work, and
|
|
196
|
+
* breaks component abstraction by reaching across composition
|
|
197
|
+
* boundaries; attach a `ref` to the target element instead.
|
|
198
|
+
*
|
|
199
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md
|
|
200
|
+
*/
|
|
201
|
+
"react/no-find-dom-node"?: TtscLintRuleSetting;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Reject `this.isMounted()` calls on class components.
|
|
205
|
+
*
|
|
206
|
+
* The API is deprecated, and anti-patterns around it usually hide
|
|
207
|
+
* a memory leak in async callbacks; cancel the work in
|
|
208
|
+
* `componentWillUnmount` instead.
|
|
209
|
+
*
|
|
210
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
|
|
211
|
+
*/
|
|
212
|
+
"react/no-is-mounted"?: TtscLintRuleSetting;
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Reject string-form JSX refs (`ref="myInput"`).
|
|
216
|
+
*
|
|
217
|
+
* The API is legacy, slated for removal, and has well-known issues
|
|
218
|
+
* with static typing, owner tracking, and stale references; use
|
|
219
|
+
* `useRef` or a callback ref instead.
|
|
220
|
+
*
|
|
221
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md
|
|
222
|
+
*/
|
|
223
|
+
"react/no-string-refs"?: TtscLintRuleSetting;
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Reject unescaped `>`, `"`, `'`, and `}` characters in JSX
|
|
227
|
+
* text content — they render literally and almost always come
|
|
228
|
+
* from forgotten HTML escaping.
|
|
229
|
+
*
|
|
230
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unescaped-entities.md
|
|
231
|
+
*/
|
|
232
|
+
"react/no-unescaped-entities"?: TtscLintRuleSetting;
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Keep React Fast Refresh component modules from exporting
|
|
236
|
+
* non-component values. Mixing a component export with a
|
|
237
|
+
* constant or hook in the same file invalidates HMR.
|
|
238
|
+
*
|
|
239
|
+
* @reference https://github.com/ArnaudBarre/eslint-plugin-react-refresh/blob/main/README.md
|
|
240
|
+
*/
|
|
241
|
+
"react/only-export-components"?: TtscLintRuleOptionsSetting<ITtscLintReactOnlyExportComponentsRuleOptions>;
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Reject reading or writing `ref.current` during render.
|
|
245
|
+
*
|
|
246
|
+
* Refs persist mutably across renders without re-rendering, so
|
|
247
|
+
* touching them in render breaks the pure-render contract and
|
|
248
|
+
* produces inconsistent output between render passes.
|
|
249
|
+
*
|
|
250
|
+
* @reference https://react.dev/reference/rules/components-and-hooks-must-be-pure
|
|
251
|
+
*/
|
|
252
|
+
"react/refs"?: TtscLintRuleSetting;
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Enforce the Rules of Hooks: only call Hooks at the top level
|
|
256
|
+
* of a component or custom Hook, never inside conditionals,
|
|
257
|
+
* loops, or nested functions.
|
|
258
|
+
*
|
|
259
|
+
* @reference https://react.dev/reference/rules/rules-of-hooks
|
|
260
|
+
*/
|
|
261
|
+
"react/rules-of-hooks"?: TtscLintRuleSetting;
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Reject unconditional `setState` calls in `useEffect` bodies.
|
|
265
|
+
*
|
|
266
|
+
* The state update schedules another render and re-runs the
|
|
267
|
+
* effect, which usually loops forever; the value almost always
|
|
268
|
+
* belongs in `useMemo` or derived state instead.
|
|
269
|
+
*
|
|
270
|
+
* @reference https://react.dev/learn/you-might-not-need-an-effect
|
|
271
|
+
*/
|
|
272
|
+
"react/set-state-in-effect"?: TtscLintRuleSetting;
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Reject calling `setState` during render.
|
|
276
|
+
*
|
|
277
|
+
* Render must stay pure; queuing an update from the render body
|
|
278
|
+
* schedules another render that queues another update, producing
|
|
279
|
+
* an infinite render loop unless guarded by an explicit equality
|
|
280
|
+
* check.
|
|
281
|
+
*
|
|
282
|
+
* @reference https://react.dev/reference/rules/components-and-hooks-must-be-pure
|
|
283
|
+
*/
|
|
284
|
+
"react/set-state-in-render"?: TtscLintRuleSetting;
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Reject string-form `style` values such as `style="color: red"` or
|
|
288
|
+
* `style={\`...\`}`.
|
|
289
|
+
*
|
|
290
|
+
* React expects a `{ camelCaseProp: value }` object, not the
|
|
291
|
+
* HTML-style CSS string, and the latter is silently coerced and
|
|
292
|
+
* never applied.
|
|
293
|
+
*
|
|
294
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/style-prop-object.md
|
|
295
|
+
*/
|
|
296
|
+
"react/style-prop-object"?: TtscLintRuleSetting;
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Reject `useMemo` calculation callbacks that do not return a
|
|
300
|
+
* value.
|
|
301
|
+
*
|
|
302
|
+
* A block-bodied callback without `return` memoizes `undefined`,
|
|
303
|
+
* silently discarding the intended computation — a common mistake
|
|
304
|
+
* when wrapping an object literal in `{ ... }` instead of
|
|
305
|
+
* `({ ... })`.
|
|
306
|
+
*
|
|
307
|
+
* @reference https://react.dev/reference/react/useMemo
|
|
308
|
+
*/
|
|
309
|
+
"react/use-memo"?: TtscLintRuleSetting;
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Reject `children` or `dangerouslySetInnerHTML` on void DOM
|
|
313
|
+
* elements (`<img>`, `<br>`, `<input>`, etc.).
|
|
314
|
+
*
|
|
315
|
+
* Void elements have no content model, so React throws at render
|
|
316
|
+
* time when you try to give them any.
|
|
317
|
+
*
|
|
318
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md
|
|
319
|
+
*/
|
|
320
|
+
"react/void-dom-elements-no-children"?: TtscLintRuleSetting;
|
|
321
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Regular-expression rules from `eslint-plugin-regexp`.
|
|
5
|
+
*
|
|
6
|
+
* These rules check the structure of regex literals — emptiness,
|
|
7
|
+
* uselessness, flag ordering, shorthand classes, Unicode support.
|
|
8
|
+
*
|
|
9
|
+
* Some rules duplicate (and supersede) the regex-related rules in
|
|
10
|
+
* {@link ITtscLintCoreRules}; both ids exist so projects can keep
|
|
11
|
+
* the legacy ESLint names alongside the regexp-plugin variants.
|
|
12
|
+
*
|
|
13
|
+
* @reference https://github.com/ota-meshi/eslint-plugin-regexp
|
|
14
|
+
*/
|
|
15
|
+
export interface ITtscLintRegexpRules {
|
|
16
|
+
/**
|
|
17
|
+
* Reject ASCII control characters in regex literals. Alias of
|
|
18
|
+
* the bare core check.
|
|
19
|
+
*
|
|
20
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-control-character.html
|
|
21
|
+
*/
|
|
22
|
+
"regexp/no-control-character"?: TtscLintRuleSetting;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Reject duplicate literal characters inside simple regex
|
|
26
|
+
* character classes (`/[aa]/`).
|
|
27
|
+
*
|
|
28
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-dupe-characters-character-class.html
|
|
29
|
+
*/
|
|
30
|
+
"regexp/no-dupe-characters-character-class"?: TtscLintRuleSetting;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Reject empty alternatives in a disjunction (`/a||b/`), which
|
|
34
|
+
* silently match the empty string.
|
|
35
|
+
*
|
|
36
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-alternative.html
|
|
37
|
+
*/
|
|
38
|
+
"regexp/no-empty-alternative"?: TtscLintRuleSetting;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Reject empty capturing groups such as `/()/`.
|
|
42
|
+
*
|
|
43
|
+
* The group shifts the numbering of every later backreference and
|
|
44
|
+
* capture slot while only ever capturing the empty string — almost
|
|
45
|
+
* always a leftover from an unfinished edit.
|
|
46
|
+
*
|
|
47
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-capturing-group.html
|
|
48
|
+
*/
|
|
49
|
+
"regexp/no-empty-capturing-group"?: TtscLintRuleSetting;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Reject empty regex character classes (`[]`). Alias of the
|
|
53
|
+
* bare core check.
|
|
54
|
+
*
|
|
55
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-character-class.html
|
|
56
|
+
*/
|
|
57
|
+
"regexp/no-empty-character-class"?: TtscLintRuleSetting;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Reject empty non-capturing groups such as `/(?:)/`.
|
|
61
|
+
*
|
|
62
|
+
* The group contributes nothing to the match and is virtually always
|
|
63
|
+
* a leftover from a deleted inner pattern.
|
|
64
|
+
*
|
|
65
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-group.html
|
|
66
|
+
*/
|
|
67
|
+
"regexp/no-empty-group"?: TtscLintRuleSetting;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Reject empty lookaround assertions such as `/(?=)/` or `/(?!)/`.
|
|
71
|
+
*
|
|
72
|
+
* An empty positive lookaround always matches; an empty negative
|
|
73
|
+
* lookaround never matches. The assertion either collapses to a
|
|
74
|
+
* no-op or breaks the surrounding pattern.
|
|
75
|
+
*
|
|
76
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-lookarounds-assertion.html
|
|
77
|
+
*/
|
|
78
|
+
"regexp/no-empty-lookarounds-assertion"?: TtscLintRuleSetting;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Reject misleading Unicode characters in regex classes. Alias
|
|
82
|
+
* of the bare misleading-character check.
|
|
83
|
+
*
|
|
84
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-misleading-unicode-character.html
|
|
85
|
+
*/
|
|
86
|
+
"regexp/no-misleading-unicode-character"?: TtscLintRuleSetting;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Reject single-character character classes such as `/[x]/`
|
|
90
|
+
* — `/x/` is equivalent.
|
|
91
|
+
*
|
|
92
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-character-class.html
|
|
93
|
+
*/
|
|
94
|
+
"regexp/no-useless-character-class"?: TtscLintRuleSetting;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Reject unnecessary escapes inside regex literals. Alias of
|
|
98
|
+
* core `no-useless-escape` for regex contexts.
|
|
99
|
+
*
|
|
100
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-escape.html
|
|
101
|
+
*/
|
|
102
|
+
"regexp/no-useless-escape"?: TtscLintRuleSetting;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Reject regex flags that the literal does not exercise — `i` on
|
|
106
|
+
* a pattern without case-variable characters, `m` without `^`/`$`,
|
|
107
|
+
* `s` without `.`, and similar dead flags on `g`/`y`.
|
|
108
|
+
*
|
|
109
|
+
* Cleans up flag combos that suggest behavior the pattern can never
|
|
110
|
+
* trigger.
|
|
111
|
+
*
|
|
112
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-flag.html
|
|
113
|
+
*/
|
|
114
|
+
"regexp/no-useless-flag"?: TtscLintRuleSetting;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Reject quantifiers that do not change the match — constant-one
|
|
118
|
+
* counts (`/a{1}/`), `?` on patterns already matching the empty
|
|
119
|
+
* string (`/(?:a+|b*)?/`), and quantifiers on non-consuming
|
|
120
|
+
* atoms (`/(?:\b)+/`).
|
|
121
|
+
*
|
|
122
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-quantifier.html
|
|
123
|
+
*/
|
|
124
|
+
"regexp/no-useless-quantifier"?: TtscLintRuleSetting;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Reject equal min/max quantifiers (`/a{2,2}/`) in favor of
|
|
128
|
+
* `/a{2}/`.
|
|
129
|
+
*
|
|
130
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-two-nums-quantifier.html
|
|
131
|
+
*/
|
|
132
|
+
"regexp/no-useless-two-nums-quantifier"?: TtscLintRuleSetting;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Reject zero-repeat quantifiers (`/a{0}/`, `/a{0,0}/`) — the atom
|
|
136
|
+
* never matches, so the quantifier is either dead code or a typo
|
|
137
|
+
* for `{1,…}`.
|
|
138
|
+
*
|
|
139
|
+
* The fix is normally to delete the atom or correct the upper
|
|
140
|
+
* bound.
|
|
141
|
+
*
|
|
142
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-zero-quantifier.html
|
|
143
|
+
*/
|
|
144
|
+
"regexp/no-zero-quantifier"?: TtscLintRuleSetting;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Prefer `\d` over `[0-9]` in regex literals.
|
|
148
|
+
*
|
|
149
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-d.html
|
|
150
|
+
*/
|
|
151
|
+
"regexp/prefer-d"?: TtscLintRuleSetting;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Prefer `+` over `{1,}` in regex literals.
|
|
155
|
+
*
|
|
156
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-plus-quantifier.html
|
|
157
|
+
*/
|
|
158
|
+
"regexp/prefer-plus-quantifier"?: TtscLintRuleSetting;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Prefer `?` over `{0,1}` in regex literals.
|
|
162
|
+
*
|
|
163
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-question-quantifier.html
|
|
164
|
+
*/
|
|
165
|
+
"regexp/prefer-question-quantifier"?: TtscLintRuleSetting;
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Prefer `*` over `{0,}` in regex literals.
|
|
169
|
+
*
|
|
170
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-star-quantifier.html
|
|
171
|
+
*/
|
|
172
|
+
"regexp/prefer-star-quantifier"?: TtscLintRuleSetting;
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Prefer `\w` over `[A-Za-z0-9_]` in regex literals.
|
|
176
|
+
*
|
|
177
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-w.html
|
|
178
|
+
*/
|
|
179
|
+
"regexp/prefer-w"?: TtscLintRuleSetting;
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Require regex literals to use the `u` or `v` flag, so
|
|
183
|
+
* Unicode-property escapes and surrogate-pair handling stay
|
|
184
|
+
* predictable.
|
|
185
|
+
*
|
|
186
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/require-unicode-regexp.html
|
|
187
|
+
*/
|
|
188
|
+
"regexp/require-unicode-regexp"?: TtscLintRuleSetting;
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Require regex literals to use the `v` flag specifically — the
|
|
192
|
+
* stricter Unicode-sets mode that enables set notation, string
|
|
193
|
+
* properties, and stricter escape rules on top of `u`.
|
|
194
|
+
*
|
|
195
|
+
* Choose this over `require-unicode-regexp` only on engines that
|
|
196
|
+
* ship ES2024-era regex.
|
|
197
|
+
*
|
|
198
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/require-unicode-sets-regexp.html
|
|
199
|
+
*/
|
|
200
|
+
"regexp/require-unicode-sets-regexp"?: TtscLintRuleSetting;
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Require regex flags to appear in canonical alphabetical order
|
|
204
|
+
* (`dgimsuvy`).
|
|
205
|
+
*
|
|
206
|
+
* Stable ordering keeps diffs small and lets readers compare flag
|
|
207
|
+
* sets at a glance.
|
|
208
|
+
*
|
|
209
|
+
* @reference https://ota-meshi.github.io/eslint-plugin-regexp/rules/sort-flags.html
|
|
210
|
+
*/
|
|
211
|
+
"regexp/sort-flags"?: TtscLintRuleSetting;
|
|
212
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ITtscLintBoundariesDependenciesRuleOptions,
|
|
3
|
+
ITtscLintBoundariesElementTypesRuleOptions,
|
|
4
|
+
ITtscLintBoundariesEntryPointRuleOptions,
|
|
5
|
+
ITtscLintBoundariesExternalRuleOptions,
|
|
6
|
+
ITtscLintBoundariesNoPrivateRuleOptions,
|
|
7
|
+
ITtscLintBoundariesNoUnknownRuleOptions,
|
|
8
|
+
} from "./ITtscLintBoundariesRuleOptions";
|
|
9
|
+
import type { ITtscLintCypressUnsafeToChainCommandRuleOptions } from "./ITtscLintCypressRuleOptions";
|
|
10
|
+
import type {
|
|
11
|
+
ITtscLintFunctionalEmptyRuleOptions,
|
|
12
|
+
ITtscLintFunctionalImmutableDataRuleOptions,
|
|
13
|
+
ITtscLintFunctionalNoConditionalStatementsRuleOptions,
|
|
14
|
+
ITtscLintFunctionalNoLetRuleOptions,
|
|
15
|
+
ITtscLintFunctionalNoMixedTypesRuleOptions,
|
|
16
|
+
ITtscLintFunctionalNoReturnVoidRuleOptions,
|
|
17
|
+
ITtscLintFunctionalNoThrowStatementsRuleOptions,
|
|
18
|
+
ITtscLintFunctionalNoTryStatementsRuleOptions,
|
|
19
|
+
ITtscLintFunctionalParametersRuleOptions,
|
|
20
|
+
ITtscLintFunctionalPreferImmutableTypesRuleOptions,
|
|
21
|
+
ITtscLintFunctionalPreferReadonlyTypeRuleOptions,
|
|
22
|
+
ITtscLintFunctionalPreferTacitRuleOptions,
|
|
23
|
+
ITtscLintFunctionalReadonlyTypeRuleOptions,
|
|
24
|
+
ITtscLintFunctionalTypeDeclarationImmutabilityRuleOptions,
|
|
25
|
+
} from "./ITtscLintFunctionalRuleOptions";
|
|
26
|
+
import type { ITtscLintReactPerfRuleOptions } from "./ITtscLintReactPerfRuleOptions";
|
|
27
|
+
import type { ITtscLintReactOnlyExportComponentsRuleOptions } from "./ITtscLintReactRuleOptions";
|
|
28
|
+
import type { ITtscLintStorybookNoUninstalledAddonsRuleOptions } from "./ITtscLintStorybookRuleOptions";
|
|
29
|
+
import type { ITtscLintTestingLibraryConsistentDataTestIdRuleOptions } from "./ITtscLintTestingLibraryRuleOptions";
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Index from typed rule name to its options object.
|
|
33
|
+
*
|
|
34
|
+
* Built-in rule families with configurable options are listed here.
|
|
35
|
+
* Contributor plugins extend the map by augmenting it from their own
|
|
36
|
+
* package:
|
|
37
|
+
*
|
|
38
|
+
* ```ts
|
|
39
|
+
* declare module "@ttsc/lint" {
|
|
40
|
+
* interface ITtscLintRuleOptionsMap {
|
|
41
|
+
* "demo/no-marker-comment": { marker: string };
|
|
42
|
+
* }
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* After augmentation, `{@link TtscLintRuleOptionsSetting}` tuples and the
|
|
47
|
+
* `defineConfig`-style helpers in plugin packages can type-check the
|
|
48
|
+
* options object against the contributor's declared shape.
|
|
49
|
+
*
|
|
50
|
+
* `format/*` is **not** listed: formatter behavior is configured through
|
|
51
|
+
* the top-level `format` block ({@link ITtscLintFormat}), not through the
|
|
52
|
+
* `rules` surface.
|
|
53
|
+
*/
|
|
54
|
+
export interface ITtscLintRuleOptionsMap {
|
|
55
|
+
"testing-library/consistent-data-testid": ITtscLintTestingLibraryConsistentDataTestIdRuleOptions;
|
|
56
|
+
"functional/functional-parameters": ITtscLintFunctionalParametersRuleOptions;
|
|
57
|
+
"functional/immutable-data": ITtscLintFunctionalImmutableDataRuleOptions;
|
|
58
|
+
"functional/no-class-inheritance": ITtscLintFunctionalEmptyRuleOptions;
|
|
59
|
+
"functional/no-classes": ITtscLintFunctionalEmptyRuleOptions;
|
|
60
|
+
"functional/no-conditional-statements": ITtscLintFunctionalNoConditionalStatementsRuleOptions;
|
|
61
|
+
"functional/no-expression-statements": ITtscLintFunctionalEmptyRuleOptions;
|
|
62
|
+
"functional/no-let": ITtscLintFunctionalNoLetRuleOptions;
|
|
63
|
+
"functional/no-loop-statements": ITtscLintFunctionalEmptyRuleOptions;
|
|
64
|
+
"functional/no-mixed-types": ITtscLintFunctionalNoMixedTypesRuleOptions;
|
|
65
|
+
"functional/no-promise-reject": ITtscLintFunctionalEmptyRuleOptions;
|
|
66
|
+
"functional/no-return-void": ITtscLintFunctionalNoReturnVoidRuleOptions;
|
|
67
|
+
"functional/no-this-expressions": ITtscLintFunctionalEmptyRuleOptions;
|
|
68
|
+
"functional/no-throw-statements": ITtscLintFunctionalNoThrowStatementsRuleOptions;
|
|
69
|
+
"functional/no-try-statements": ITtscLintFunctionalNoTryStatementsRuleOptions;
|
|
70
|
+
"functional/prefer-immutable-types": ITtscLintFunctionalPreferImmutableTypesRuleOptions;
|
|
71
|
+
"functional/prefer-property-signatures": ITtscLintFunctionalEmptyRuleOptions;
|
|
72
|
+
"functional/prefer-readonly-type": ITtscLintFunctionalPreferReadonlyTypeRuleOptions;
|
|
73
|
+
"functional/prefer-tacit": ITtscLintFunctionalPreferTacitRuleOptions;
|
|
74
|
+
"functional/readonly-type": ITtscLintFunctionalReadonlyTypeRuleOptions;
|
|
75
|
+
"functional/type-declaration-immutability": ITtscLintFunctionalTypeDeclarationImmutabilityRuleOptions;
|
|
76
|
+
"cypress/unsafe-to-chain-command": ITtscLintCypressUnsafeToChainCommandRuleOptions;
|
|
77
|
+
"boundaries/dependencies": ITtscLintBoundariesDependenciesRuleOptions;
|
|
78
|
+
"boundaries/element-types": ITtscLintBoundariesElementTypesRuleOptions;
|
|
79
|
+
"boundaries/entry-point": ITtscLintBoundariesEntryPointRuleOptions;
|
|
80
|
+
"boundaries/external": ITtscLintBoundariesExternalRuleOptions;
|
|
81
|
+
"boundaries/no-private": ITtscLintBoundariesNoPrivateRuleOptions;
|
|
82
|
+
"boundaries/no-unknown": ITtscLintBoundariesNoUnknownRuleOptions;
|
|
83
|
+
"react-perf/jsx-no-new-array-as-prop": ITtscLintReactPerfRuleOptions;
|
|
84
|
+
"react-perf/jsx-no-new-function-as-prop": ITtscLintReactPerfRuleOptions;
|
|
85
|
+
"react-perf/jsx-no-new-object-as-prop": ITtscLintReactPerfRuleOptions;
|
|
86
|
+
"react-perf/jsx-no-jsx-as-prop": ITtscLintReactPerfRuleOptions;
|
|
87
|
+
"storybook/no-uninstalled-addons": ITtscLintStorybookNoUninstalledAddonsRuleOptions;
|
|
88
|
+
"react/only-export-components": ITtscLintReactOnlyExportComponentsRuleOptions;
|
|
89
|
+
}
|