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