@ttsc/lint 0.14.0-dev.20260529.2 → 0.14.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 +23 -25
- 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 +167 -5
- package/linthost/print_nodes_call.go +786 -77
- package/linthost/print_nodes_function.go +43 -0
- package/linthost/print_nodes_imports.go +64 -14
- package/linthost/print_nodes_list.go +214 -8
- package/linthost/print_nodes_object.go +14 -6
- package/linthost/print_nodes_ternary.go +147 -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 +213 -0
- package/linthost/rules_format_bracket_spacing.go +117 -0
- package/linthost/rules_format_clause_join.go +179 -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 +180 -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 +517 -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,78 +1,76 @@
|
|
|
1
1
|
import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* JSX accessibility rules from `eslint-plugin-jsx-a11y`, applied to
|
|
5
|
-
*
|
|
4
|
+
* JSX accessibility rules from `eslint-plugin-jsx-a11y`, applied to TSX (and
|
|
5
|
+
* JSX-in-TS) sources.
|
|
6
6
|
*
|
|
7
|
-
* Checks the static structure of JSX elements against WAI-ARIA
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
7
|
+
* Checks the static structure of JSX elements against WAI-ARIA authoring
|
|
8
|
+
* guidance — interactive controls should be focusable, labels should reference
|
|
9
|
+
* a control, ARIA properties should match the element role, and so on. Runtime
|
|
10
|
+
* accessibility issues require live audits; this family catches the
|
|
11
|
+
* statically-decidable subset.
|
|
12
12
|
*
|
|
13
13
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y
|
|
14
14
|
*/
|
|
15
15
|
export interface ITtscLintJsxA11yRules {
|
|
16
16
|
/**
|
|
17
|
-
* Require image-like JSX elements (`<img>`, `<input
|
|
18
|
-
*
|
|
19
|
-
* ARIA label.
|
|
17
|
+
* Require image-like JSX elements (`<img>`, `<input type="image">`,
|
|
18
|
+
* `<object>`, `<area>`) to expose alt text or an ARIA label.
|
|
20
19
|
*
|
|
21
20
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/alt-text.md
|
|
22
21
|
*/
|
|
23
22
|
"jsx-a11y/alt-text"?: TtscLintRuleSetting;
|
|
24
23
|
|
|
25
24
|
/**
|
|
26
|
-
* Reject `<a>` elements whose visible text is one of a small set of
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
25
|
+
* Reject `<a>` elements whose visible text is one of a small set of phrases
|
|
26
|
+
* that carry no information out of context. Screen-reader users navigate by
|
|
27
|
+
* listing links — "click here" / "more" / "read more" turn that list into
|
|
28
|
+
* noise.
|
|
30
29
|
*
|
|
31
30
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-ambiguous-text.md
|
|
32
31
|
*/
|
|
33
32
|
"jsx-a11y/anchor-ambiguous-text"?: TtscLintRuleSetting;
|
|
34
33
|
|
|
35
34
|
/**
|
|
36
|
-
* Reject empty JSX anchors with no accessible content (text,
|
|
37
|
-
*
|
|
35
|
+
* Reject empty JSX anchors with no accessible content (text, `aria-label`, or
|
|
36
|
+
* labelled child).
|
|
38
37
|
*
|
|
39
38
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-has-content.md
|
|
40
39
|
*/
|
|
41
40
|
"jsx-a11y/anchor-has-content"?: TtscLintRuleSetting;
|
|
42
41
|
|
|
43
42
|
/**
|
|
44
|
-
* Reject anchors with missing, `#`-only, empty, or `javascript:`
|
|
45
|
-
*
|
|
43
|
+
* Reject anchors with missing, `#`-only, empty, or `javascript:` `href`
|
|
44
|
+
* values, all of which break navigation semantics.
|
|
46
45
|
*
|
|
47
46
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-is-valid.md
|
|
48
47
|
*/
|
|
49
48
|
"jsx-a11y/anchor-is-valid"?: TtscLintRuleSetting;
|
|
50
49
|
|
|
51
50
|
/**
|
|
52
|
-
* Require `tabIndex` on any element carrying `aria-activedescendant`
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
51
|
+
* Require `tabIndex` on any element carrying `aria-activedescendant` unless
|
|
52
|
+
* the tag is already focusable by default (`<input>`, etc.) — the
|
|
53
|
+
* composite-widget host must keep document focus for the descendant id to do
|
|
54
|
+
* anything.
|
|
56
55
|
*
|
|
57
56
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-activedescendant-has-tabindex.md
|
|
58
57
|
*/
|
|
59
58
|
"jsx-a11y/aria-activedescendant-has-tabindex"?: TtscLintRuleSetting;
|
|
60
59
|
|
|
61
60
|
/**
|
|
62
|
-
* Reject `aria-*` JSX attribute names that are not part of the
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* assistive-tech support.
|
|
61
|
+
* Reject `aria-*` JSX attribute names that are not part of the WAI-ARIA
|
|
62
|
+
* States and Properties spec — catches typos such as `aria-labeledby`
|
|
63
|
+
* (missing second `l`) that silently disable assistive-tech support.
|
|
66
64
|
*
|
|
67
65
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-props.md
|
|
68
66
|
*/
|
|
69
67
|
"jsx-a11y/aria-props"?: TtscLintRuleSetting;
|
|
70
68
|
|
|
71
69
|
/**
|
|
72
|
-
* Validate literal values supplied to ARIA properties against the
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
70
|
+
* Validate literal values supplied to ARIA properties against the type the
|
|
71
|
+
* spec declares for them — e.g. `aria-checked` must be one of `true`,
|
|
72
|
+
* `false`, `"mixed"`, and `aria-hidden="yes"` is rejected because the type is
|
|
73
|
+
* boolean.
|
|
76
74
|
*
|
|
77
75
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-proptypes.md
|
|
78
76
|
*/
|
|
@@ -80,80 +78,78 @@ export interface ITtscLintJsxA11yRules {
|
|
|
80
78
|
|
|
81
79
|
/**
|
|
82
80
|
* Require `role` values to be a concrete, non-abstract WAI-ARIA role
|
|
83
|
-
* (`"button"`, `"checkbox"`, ...). Rejects misspellings and abstract
|
|
84
|
-
*
|
|
85
|
-
*
|
|
81
|
+
* (`"button"`, `"checkbox"`, ...). Rejects misspellings and abstract roles
|
|
82
|
+
* like `"range"`; computed values are skipped because the concrete role
|
|
83
|
+
* cannot be checked statically.
|
|
86
84
|
*
|
|
87
85
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-role.md
|
|
88
86
|
*/
|
|
89
87
|
"jsx-a11y/aria-role"?: TtscLintRuleSetting;
|
|
90
88
|
|
|
91
89
|
/**
|
|
92
|
-
* Reject ARIA roles and attributes on elements that do not
|
|
93
|
-
*
|
|
90
|
+
* Reject ARIA roles and attributes on elements that do not support them (e.g.
|
|
91
|
+
* `aria-checked` on a `<meta>` tag).
|
|
94
92
|
*
|
|
95
93
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-unsupported-elements.md
|
|
96
94
|
*/
|
|
97
95
|
"jsx-a11y/aria-unsupported-elements"?: TtscLintRuleSetting;
|
|
98
96
|
|
|
99
97
|
/**
|
|
100
|
-
* Validate the literal `autocomplete` token against the HTML spec
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* the two sets do not overlap.
|
|
98
|
+
* Validate the literal `autocomplete` token against the HTML spec vocabulary
|
|
99
|
+
* and against the `type` of the surrounding input — e.g. `autocomplete="url"`
|
|
100
|
+
* on `<input type="email">` is rejected because the two sets do not overlap.
|
|
104
101
|
*
|
|
105
102
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/autocomplete-valid.md
|
|
106
103
|
*/
|
|
107
104
|
"jsx-a11y/autocomplete-valid"?: TtscLintRuleSetting;
|
|
108
105
|
|
|
109
106
|
/**
|
|
110
|
-
* Require keyboard handlers alongside `onClick` on non-interactive
|
|
111
|
-
*
|
|
107
|
+
* Require keyboard handlers alongside `onClick` on non-interactive JSX
|
|
108
|
+
* elements so the element is also reachable by keyboard.
|
|
112
109
|
*
|
|
113
110
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/click-events-have-key-events.md
|
|
114
111
|
*/
|
|
115
112
|
"jsx-a11y/click-events-have-key-events"?: TtscLintRuleSetting;
|
|
116
113
|
|
|
117
114
|
/**
|
|
118
|
-
* Require interactive controls to have an accessible label
|
|
119
|
-
*
|
|
115
|
+
* Require interactive controls to have an accessible label (visible text,
|
|
116
|
+
* `aria-label`, or `aria-labelledby`).
|
|
120
117
|
*
|
|
121
118
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/control-has-associated-label.md
|
|
122
119
|
*/
|
|
123
120
|
"jsx-a11y/control-has-associated-label"?: TtscLintRuleSetting;
|
|
124
121
|
|
|
125
122
|
/**
|
|
126
|
-
* Reject empty JSX headings (`<h1>{}</h1>`) — assistive
|
|
127
|
-
*
|
|
123
|
+
* Reject empty JSX headings (`<h1>{}</h1>`) — assistive technology cannot
|
|
124
|
+
* announce content that does not exist.
|
|
128
125
|
*
|
|
129
126
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/heading-has-content.md
|
|
130
127
|
*/
|
|
131
128
|
"jsx-a11y/heading-has-content"?: TtscLintRuleSetting;
|
|
132
129
|
|
|
133
130
|
/**
|
|
134
|
-
* Require `<html>` JSX elements to declare a non-empty `lang`
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* tag value.
|
|
131
|
+
* Require `<html>` JSX elements to declare a non-empty `lang` attribute so
|
|
132
|
+
* screen readers can pick the correct pronunciation. Largely superseded by
|
|
133
|
+
* `jsx-a11y/lang`, which also validates the tag value.
|
|
138
134
|
*
|
|
139
135
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/html-has-lang.md
|
|
140
136
|
*/
|
|
141
137
|
"jsx-a11y/html-has-lang"?: TtscLintRuleSetting;
|
|
142
138
|
|
|
143
139
|
/**
|
|
144
|
-
* Require every `<iframe>` JSX element to declare a non-empty,
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
140
|
+
* Require every `<iframe>` JSX element to declare a non-empty, unique `title`
|
|
141
|
+
* so assistive tech can announce the embedded content. Empty strings,
|
|
142
|
+
* booleans, numbers, and `{...spread}` without a literal title are all
|
|
143
|
+
* flagged.
|
|
148
144
|
*
|
|
149
145
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/iframe-has-title.md
|
|
150
146
|
*/
|
|
151
147
|
"jsx-a11y/iframe-has-title"?: TtscLintRuleSetting;
|
|
152
148
|
|
|
153
149
|
/**
|
|
154
|
-
* Reject redundant words such as
|
|
155
|
-
*
|
|
156
|
-
*
|
|
150
|
+
* Reject redundant words such as _image_, _photo_, or _picture_ inside the
|
|
151
|
+
* `alt` attribute of an `<img>` — the role already conveys "this is an
|
|
152
|
+
* image".
|
|
157
153
|
*
|
|
158
154
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/img-redundant-alt.md
|
|
159
155
|
*/
|
|
@@ -168,27 +164,27 @@ export interface ITtscLintJsxA11yRules {
|
|
|
168
164
|
"jsx-a11y/interactive-supports-focus"?: TtscLintRuleSetting;
|
|
169
165
|
|
|
170
166
|
/**
|
|
171
|
-
* Require `<label>` elements to either wrap a form control or
|
|
172
|
-
*
|
|
167
|
+
* Require `<label>` elements to either wrap a form control or reference one
|
|
168
|
+
* via `htmlFor`.
|
|
173
169
|
*
|
|
174
170
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/label-has-associated-control.md
|
|
175
171
|
*/
|
|
176
172
|
"jsx-a11y/label-has-associated-control"?: TtscLintRuleSetting;
|
|
177
173
|
|
|
178
174
|
/**
|
|
179
|
-
* Deprecated predecessor of `label-has-associated-control`. Checks
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
175
|
+
* Deprecated predecessor of `label-has-associated-control`. Checks the same
|
|
176
|
+
* nesting / `htmlFor` association requirement and supports configuring which
|
|
177
|
+
* custom components count as labels. Off in `recommended`; kept only for
|
|
178
|
+
* legacy configs.
|
|
183
179
|
*
|
|
184
180
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/label-has-for.md
|
|
185
181
|
*/
|
|
186
182
|
"jsx-a11y/label-has-for"?: TtscLintRuleSetting;
|
|
187
183
|
|
|
188
184
|
/**
|
|
189
|
-
* Require the `<html lang>` value to be a valid IETF BCP-47 tag
|
|
190
|
-
*
|
|
191
|
-
*
|
|
185
|
+
* Require the `<html lang>` value to be a valid IETF BCP-47 tag (`"en"`,
|
|
186
|
+
* `"en-US"`, ...). Superset of `html-has-lang`, since it also catches
|
|
187
|
+
* present-but-invalid tags like `lang="foo"`.
|
|
192
188
|
*
|
|
193
189
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/lang.md
|
|
194
190
|
*/
|
|
@@ -203,9 +199,8 @@ export interface ITtscLintJsxA11yRules {
|
|
|
203
199
|
"jsx-a11y/media-has-caption"?: TtscLintRuleSetting;
|
|
204
200
|
|
|
205
201
|
/**
|
|
206
|
-
* Require `onMouseOver` / `onMouseOut` handlers to have
|
|
207
|
-
*
|
|
208
|
-
* interaction.
|
|
202
|
+
* Require `onMouseOver` / `onMouseOut` handlers to have `onFocus` / `onBlur`
|
|
203
|
+
* parity so keyboard users get the same interaction.
|
|
209
204
|
*
|
|
210
205
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/mouse-events-have-key-events.md
|
|
211
206
|
*/
|
|
@@ -220,118 +215,115 @@ export interface ITtscLintJsxA11yRules {
|
|
|
220
215
|
"jsx-a11y/no-access-key"?: TtscLintRuleSetting;
|
|
221
216
|
|
|
222
217
|
/**
|
|
223
|
-
* Reject `aria-hidden` on focusable JSX elements — focus would
|
|
224
|
-
*
|
|
218
|
+
* Reject `aria-hidden` on focusable JSX elements — focus would land on an
|
|
219
|
+
* element hidden from assistive tech.
|
|
225
220
|
*
|
|
226
221
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-aria-hidden-on-focusable.md
|
|
227
222
|
*/
|
|
228
223
|
"jsx-a11y/no-aria-hidden-on-focusable"?: TtscLintRuleSetting;
|
|
229
224
|
|
|
230
225
|
/**
|
|
231
|
-
* Reject `autoFocus` / `autofocus` JSX attributes — they steal
|
|
232
|
-
*
|
|
226
|
+
* Reject `autoFocus` / `autofocus` JSX attributes — they steal focus on page
|
|
227
|
+
* load and disorient keyboard users.
|
|
233
228
|
*
|
|
234
229
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-autofocus.md
|
|
235
230
|
*/
|
|
236
231
|
"jsx-a11y/no-autofocus"?: TtscLintRuleSetting;
|
|
237
232
|
|
|
238
233
|
/**
|
|
239
|
-
* Reject `<blink>` and `<marquee>` — moving content cannot be
|
|
240
|
-
*
|
|
241
|
-
*
|
|
234
|
+
* Reject `<blink>` and `<marquee>` — moving content cannot be paused and
|
|
235
|
+
* harms users with cognitive or visual impairments (WCAG 2.2.2). The list is
|
|
236
|
+
* closed: extra elements cannot be added.
|
|
242
237
|
*
|
|
243
238
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-distracting-elements.md
|
|
244
239
|
*/
|
|
245
240
|
"jsx-a11y/no-distracting-elements"?: TtscLintRuleSetting;
|
|
246
241
|
|
|
247
242
|
/**
|
|
248
|
-
* Reject non-interactive ARIA roles applied to natively
|
|
249
|
-
*
|
|
243
|
+
* Reject non-interactive ARIA roles applied to natively interactive elements
|
|
244
|
+
* (e.g. `<button role="presentation">`).
|
|
250
245
|
*
|
|
251
246
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-interactive-element-to-noninteractive-role.md
|
|
252
247
|
*/
|
|
253
248
|
"jsx-a11y/no-interactive-element-to-noninteractive-role"?: TtscLintRuleSetting;
|
|
254
249
|
|
|
255
250
|
/**
|
|
256
|
-
* Reject interaction event handlers (`onClick`, `onKeyDown`)
|
|
257
|
-
*
|
|
258
|
-
* override.
|
|
251
|
+
* Reject interaction event handlers (`onClick`, `onKeyDown`) placed on known
|
|
252
|
+
* non-interactive elements without a role override.
|
|
259
253
|
*
|
|
260
254
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-element-interactions.md
|
|
261
255
|
*/
|
|
262
256
|
"jsx-a11y/no-noninteractive-element-interactions"?: TtscLintRuleSetting;
|
|
263
257
|
|
|
264
258
|
/**
|
|
265
|
-
* Reject interactive ARIA roles applied to non-interactive
|
|
266
|
-
*
|
|
267
|
-
* interactive tag.
|
|
259
|
+
* Reject interactive ARIA roles applied to non-interactive elements (e.g.
|
|
260
|
+
* `<li role="button">`); use the matching interactive tag.
|
|
268
261
|
*
|
|
269
262
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-element-to-interactive-role.md
|
|
270
263
|
*/
|
|
271
264
|
"jsx-a11y/no-noninteractive-element-to-interactive-role"?: TtscLintRuleSetting;
|
|
272
265
|
|
|
273
266
|
/**
|
|
274
|
-
* Reject `tabIndex` on non-interactive JSX elements that have
|
|
275
|
-
*
|
|
267
|
+
* Reject `tabIndex` on non-interactive JSX elements that have no interactive
|
|
268
|
+
* role.
|
|
276
269
|
*
|
|
277
270
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-tabindex.md
|
|
278
271
|
*/
|
|
279
272
|
"jsx-a11y/no-noninteractive-tabindex"?: TtscLintRuleSetting;
|
|
280
273
|
|
|
281
274
|
/**
|
|
282
|
-
* Reject explicit `role` attributes that duplicate the
|
|
283
|
-
*
|
|
284
|
-
* role="button">`).
|
|
275
|
+
* Reject explicit `role` attributes that duplicate the native semantics of
|
|
276
|
+
* the element (e.g. `<button role="button">`).
|
|
285
277
|
*
|
|
286
278
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-redundant-roles.md
|
|
287
279
|
*/
|
|
288
280
|
"jsx-a11y/no-redundant-roles"?: TtscLintRuleSetting;
|
|
289
281
|
|
|
290
282
|
/**
|
|
291
|
-
* Require static elements with interaction handlers to declare
|
|
292
|
-
*
|
|
283
|
+
* Require static elements with interaction handlers to declare an interactive
|
|
284
|
+
* `role`.
|
|
293
285
|
*
|
|
294
286
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-static-element-interactions.md
|
|
295
287
|
*/
|
|
296
288
|
"jsx-a11y/no-static-element-interactions"?: TtscLintRuleSetting;
|
|
297
289
|
|
|
298
290
|
/**
|
|
299
|
-
* Prefer native JSX tags over `div` / `span` plus an equivalent
|
|
300
|
-
*
|
|
291
|
+
* Prefer native JSX tags over `div` / `span` plus an equivalent `role` (e.g.
|
|
292
|
+
* `<button>` over `<div role="button">`).
|
|
301
293
|
*
|
|
302
294
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/prefer-tag-over-role.md
|
|
303
295
|
*/
|
|
304
296
|
"jsx-a11y/prefer-tag-over-role"?: TtscLintRuleSetting;
|
|
305
297
|
|
|
306
298
|
/**
|
|
307
|
-
* Require ARIA properties that the chosen role mandates (e.g.
|
|
308
|
-
*
|
|
299
|
+
* Require ARIA properties that the chosen role mandates (e.g. `aria-checked`
|
|
300
|
+
* on `role="checkbox"`).
|
|
309
301
|
*
|
|
310
302
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-has-required-aria-props.md
|
|
311
303
|
*/
|
|
312
304
|
"jsx-a11y/role-has-required-aria-props"?: TtscLintRuleSetting;
|
|
313
305
|
|
|
314
306
|
/**
|
|
315
|
-
* Reject ARIA properties that the role does not support (e.g.
|
|
316
|
-
*
|
|
307
|
+
* Reject ARIA properties that the role does not support (e.g. `aria-checked`
|
|
308
|
+
* on `role="link"`).
|
|
317
309
|
*
|
|
318
310
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-supports-aria-props.md
|
|
319
311
|
*/
|
|
320
312
|
"jsx-a11y/role-supports-aria-props"?: TtscLintRuleSetting;
|
|
321
313
|
|
|
322
314
|
/**
|
|
323
|
-
* Restrict the `scope` attribute to `<th>` cells. On any other tag
|
|
324
|
-
*
|
|
325
|
-
*
|
|
315
|
+
* Restrict the `scope` attribute to `<th>` cells. On any other tag (`<div
|
|
316
|
+
* scope="col">`, `<td scope="row">`) the attribute is ignored by browsers and
|
|
317
|
+
* confuses table-aware assistive tech.
|
|
326
318
|
*
|
|
327
319
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/scope.md
|
|
328
320
|
*/
|
|
329
321
|
"jsx-a11y/scope"?: TtscLintRuleSetting;
|
|
330
322
|
|
|
331
323
|
/**
|
|
332
|
-
* Reject `tabIndex` values greater than zero. Positive indices jump
|
|
333
|
-
*
|
|
334
|
-
*
|
|
324
|
+
* Reject `tabIndex` values greater than zero. Positive indices jump the
|
|
325
|
+
* keyboard focus order out of document order and almost always desynchronize
|
|
326
|
+
* from later DOM changes; `0` and `-1` remain allowed.
|
|
335
327
|
*
|
|
336
328
|
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/tabindex-no-positive.md
|
|
337
329
|
*/
|
|
@@ -4,26 +4,25 @@ import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
|
|
|
4
4
|
* Next.js framework rules from `@next/eslint-plugin-next`, applied to
|
|
5
5
|
* TypeScript and TSX sources inside Next.js apps.
|
|
6
6
|
*
|
|
7
|
-
* Checks Next.js-specific conventions — pages/app routing, `<Head>`
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* Checks Next.js-specific conventions — pages/app routing, `<Head>` placement,
|
|
8
|
+
* font and script loading, image and link components — that the framework's
|
|
9
|
+
* runtime treats as load-bearing.
|
|
10
10
|
*
|
|
11
11
|
* @reference https://nextjs.org/docs/app/api-reference/config/eslint
|
|
12
12
|
*/
|
|
13
13
|
export interface ITtscLintNextjsRules {
|
|
14
14
|
/**
|
|
15
|
-
* Require a non-blocking `display=` value on Google Fonts
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* `optional` or `swap`.
|
|
15
|
+
* Require a non-blocking `display=` value on Google Fonts stylesheet links;
|
|
16
|
+
* reject `auto`, `block`, and `fallback`, which keep text invisible while the
|
|
17
|
+
* font loads and hurt LCP. Prefer `optional` or `swap`.
|
|
19
18
|
*
|
|
20
19
|
* @reference https://nextjs.org/docs/messages/google-font-display
|
|
21
20
|
*/
|
|
22
21
|
"nextjs/google-font-display"?: TtscLintRuleSetting;
|
|
23
22
|
|
|
24
23
|
/**
|
|
25
|
-
* Require `rel="preconnect"` for `fonts.gstatic.com` links to
|
|
26
|
-
*
|
|
24
|
+
* Require `rel="preconnect"` for `fonts.gstatic.com` links to shave latency
|
|
25
|
+
* off Google Font fetches.
|
|
27
26
|
*
|
|
28
27
|
* @reference https://nextjs.org/docs/messages/google-font-preconnect
|
|
29
28
|
*/
|
|
@@ -33,26 +32,25 @@ export interface ITtscLintNextjsRules {
|
|
|
33
32
|
* Require an `id` attribute on inline `<Script>` components from
|
|
34
33
|
* `next/script`.
|
|
35
34
|
*
|
|
36
|
-
* Next.js uses the id to track the script across client
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* renders.
|
|
35
|
+
* Next.js uses the id to track the script across client navigations and to
|
|
36
|
+
* satisfy its loading-strategy budget; an inline script without one is
|
|
37
|
+
* silently dropped on subsequent renders.
|
|
40
38
|
*
|
|
41
39
|
* @reference https://nextjs.org/docs/messages/inline-script-id
|
|
42
40
|
*/
|
|
43
41
|
"nextjs/inline-script-id"?: TtscLintRuleSetting;
|
|
44
42
|
|
|
45
43
|
/**
|
|
46
|
-
* Prefer the Next.js Google Analytics integration over
|
|
47
|
-
*
|
|
44
|
+
* Prefer the Next.js Google Analytics integration over hand-written `gtag`
|
|
45
|
+
* script tags.
|
|
48
46
|
*
|
|
49
47
|
* @reference https://nextjs.org/docs/messages/next-script-for-ga
|
|
50
48
|
*/
|
|
51
49
|
"nextjs/next-script-for-ga"?: TtscLintRuleSetting;
|
|
52
50
|
|
|
53
51
|
/**
|
|
54
|
-
* Reject local declarations named `module`, which shadow the
|
|
55
|
-
*
|
|
52
|
+
* Reject local declarations named `module`, which shadow the CommonJS
|
|
53
|
+
* `module` binding Next.js relies on.
|
|
56
54
|
*
|
|
57
55
|
* @reference https://nextjs.org/docs/messages/no-assign-module-variable
|
|
58
56
|
*/
|
|
@@ -61,19 +59,19 @@ export interface ITtscLintNextjsRules {
|
|
|
61
59
|
/**
|
|
62
60
|
* Reject `async` function bodies on React Client Components.
|
|
63
61
|
*
|
|
64
|
-
* The client-side React runtime can't await a component's render,
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
62
|
+
* The client-side React runtime can't await a component's render, so an
|
|
63
|
+
* `async` `"use client"` component returns a pending promise that crashes
|
|
64
|
+
* hydration; do data fetching in a Server Component or in `useEffect`
|
|
65
|
+
* instead.
|
|
68
66
|
*
|
|
69
67
|
* @reference https://nextjs.org/docs/messages/no-async-client-component
|
|
70
68
|
*/
|
|
71
69
|
"nextjs/no-async-client-component"?: TtscLintRuleSetting;
|
|
72
70
|
|
|
73
71
|
/**
|
|
74
|
-
* Restrict the `next/script` `strategy="beforeInteractive"` option
|
|
75
|
-
*
|
|
76
|
-
*
|
|
72
|
+
* Restrict the `next/script` `strategy="beforeInteractive"` option to
|
|
73
|
+
* `pages/_document.tsx` — anywhere else, the strategy is downgraded
|
|
74
|
+
* silently.
|
|
77
75
|
*
|
|
78
76
|
* @reference https://nextjs.org/docs/messages/no-before-interactive-script-outside-document
|
|
79
77
|
*/
|
|
@@ -82,18 +80,17 @@ export interface ITtscLintNextjsRules {
|
|
|
82
80
|
/**
|
|
83
81
|
* Reject raw `<link rel="stylesheet">` tags.
|
|
84
82
|
*
|
|
85
|
-
* Next.js handles CSS through its bundler — imported stylesheets,
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* heuristics.
|
|
83
|
+
* Next.js handles CSS through its bundler — imported stylesheets, CSS
|
|
84
|
+
* Modules, or `next/font` — and manual stylesheet links skip the runtime's
|
|
85
|
+
* critical-CSS extraction and render-blocking heuristics.
|
|
89
86
|
*
|
|
90
87
|
* @reference https://nextjs.org/docs/messages/no-css-tags
|
|
91
88
|
*/
|
|
92
89
|
"nextjs/no-css-tags"?: TtscLintRuleSetting;
|
|
93
90
|
|
|
94
91
|
/**
|
|
95
|
-
* Restrict `next/document` imports to `pages/_document.tsx` —
|
|
96
|
-
*
|
|
92
|
+
* Restrict `next/document` imports to `pages/_document.tsx` — `Document`
|
|
93
|
+
* cannot be used in a regular page.
|
|
97
94
|
*
|
|
98
95
|
* @reference https://nextjs.org/docs/messages/no-document-import-in-page
|
|
99
96
|
*/
|
|
@@ -103,17 +100,17 @@ export interface ITtscLintNextjsRules {
|
|
|
103
100
|
* Reject more than one `<Head>` element from `next/document` in
|
|
104
101
|
* `pages/_document.tsx`.
|
|
105
102
|
*
|
|
106
|
-
* Next.js merges metadata into the single `<Head>` it renders into
|
|
107
|
-
*
|
|
108
|
-
*
|
|
103
|
+
* Next.js merges metadata into the single `<Head>` it renders into the HTML
|
|
104
|
+
* shell; additional instances are dropped silently and any tags inside them
|
|
105
|
+
* never reach the page.
|
|
109
106
|
*
|
|
110
107
|
* @reference https://nextjs.org/docs/messages/no-duplicate-head
|
|
111
108
|
*/
|
|
112
109
|
"nextjs/no-duplicate-head"?: TtscLintRuleSetting;
|
|
113
110
|
|
|
114
111
|
/**
|
|
115
|
-
* Reject raw `<head>` elements outside the `app/` directory —
|
|
116
|
-
*
|
|
112
|
+
* Reject raw `<head>` elements outside the `app/` directory — use `next/head`
|
|
113
|
+
* or the metadata exports.
|
|
117
114
|
*
|
|
118
115
|
* @reference https://nextjs.org/docs/messages/no-head-element
|
|
119
116
|
*/
|
|
@@ -128,57 +125,56 @@ export interface ITtscLintNextjsRules {
|
|
|
128
125
|
"nextjs/no-head-import-in-document"?: TtscLintRuleSetting;
|
|
129
126
|
|
|
130
127
|
/**
|
|
131
|
-
* Prefer `next/link` for internal anchors with a static `href`,
|
|
132
|
-
*
|
|
128
|
+
* Prefer `next/link` for internal anchors with a static `href`, since `Link`
|
|
129
|
+
* performs client-side routing.
|
|
133
130
|
*
|
|
134
131
|
* @reference https://nextjs.org/docs/messages/no-html-link-for-pages
|
|
135
132
|
*/
|
|
136
133
|
"nextjs/no-html-link-for-pages"?: TtscLintRuleSetting;
|
|
137
134
|
|
|
138
135
|
/**
|
|
139
|
-
* Prefer `next/image` over raw `<img>` elements so the framework
|
|
140
|
-
*
|
|
136
|
+
* Prefer `next/image` over raw `<img>` elements so the framework can optimize
|
|
137
|
+
* the asset.
|
|
141
138
|
*
|
|
142
139
|
* @reference https://nextjs.org/docs/messages/no-img-element
|
|
143
140
|
*/
|
|
144
141
|
"nextjs/no-img-element"?: TtscLintRuleSetting;
|
|
145
142
|
|
|
146
143
|
/**
|
|
147
|
-
* Reject Google font `<link>` tags inside regular pages files —
|
|
148
|
-
*
|
|
149
|
-
* `next/font` (app router).
|
|
144
|
+
* Reject Google font `<link>` tags inside regular pages files — load fonts in
|
|
145
|
+
* `_document.tsx` (pages router) or via `next/font` (app router).
|
|
150
146
|
*
|
|
151
147
|
* @reference https://nextjs.org/docs/messages/no-page-custom-font
|
|
152
148
|
*/
|
|
153
149
|
"nextjs/no-page-custom-font"?: TtscLintRuleSetting;
|
|
154
150
|
|
|
155
151
|
/**
|
|
156
|
-
* Reject `next/script` inside `next/head` — `<Script>` must
|
|
157
|
-
*
|
|
152
|
+
* Reject `next/script` inside `next/head` — `<Script>` must appear in the JSX
|
|
153
|
+
* tree, not in `<Head>`.
|
|
158
154
|
*
|
|
159
155
|
* @reference https://nextjs.org/docs/messages/no-script-component-in-head
|
|
160
156
|
*/
|
|
161
157
|
"nextjs/no-script-component-in-head"?: TtscLintRuleSetting;
|
|
162
158
|
|
|
163
159
|
/**
|
|
164
|
-
* Reject styled-jsx tags inside `pages/_document.tsx`, which the
|
|
165
|
-
*
|
|
160
|
+
* Reject styled-jsx tags inside `pages/_document.tsx`, which the server
|
|
161
|
+
* renders incorrectly.
|
|
166
162
|
*
|
|
167
163
|
* @reference https://nextjs.org/docs/messages/no-styled-jsx-in-document
|
|
168
164
|
*/
|
|
169
165
|
"nextjs/no-styled-jsx-in-document"?: TtscLintRuleSetting;
|
|
170
166
|
|
|
171
167
|
/**
|
|
172
|
-
* Require `async` or `defer` on external raw `<script>` tags so
|
|
173
|
-
*
|
|
168
|
+
* Require `async` or `defer` on external raw `<script>` tags so loading does
|
|
169
|
+
* not block render.
|
|
174
170
|
*
|
|
175
171
|
* @reference https://nextjs.org/docs/messages/no-sync-scripts
|
|
176
172
|
*/
|
|
177
173
|
"nextjs/no-sync-scripts"?: TtscLintRuleSetting;
|
|
178
174
|
|
|
179
175
|
/**
|
|
180
|
-
* Reject `<title>` inside `Head` from `next/document`. Set the
|
|
181
|
-
*
|
|
176
|
+
* Reject `<title>` inside `Head` from `next/document`. Set the title from the
|
|
177
|
+
* metadata exports instead.
|
|
182
178
|
*
|
|
183
179
|
* @reference https://nextjs.org/docs/messages/no-title-in-document-head
|
|
184
180
|
*/
|
|
@@ -188,17 +184,16 @@ export interface ITtscLintNextjsRules {
|
|
|
188
184
|
* Catch near-miss typos in Next.js data-fetching export names
|
|
189
185
|
* (`getStaticProps`, `getStaticPaths`, `getServerSideProps`).
|
|
190
186
|
*
|
|
191
|
-
* A misspelled export is treated as ordinary module state, so the
|
|
192
|
-
*
|
|
193
|
-
* build-time warning.
|
|
187
|
+
* A misspelled export is treated as ordinary module state, so the page
|
|
188
|
+
* silently falls back to client-side rendering with no build-time warning.
|
|
194
189
|
*
|
|
195
190
|
* @reference https://nextjs.org/docs/messages/no-typos
|
|
196
191
|
*/
|
|
197
192
|
"nextjs/no-typos"?: TtscLintRuleSetting;
|
|
198
193
|
|
|
199
194
|
/**
|
|
200
|
-
* Reject Polyfill.io script URLs — Next.js already polyfills
|
|
201
|
-
*
|
|
195
|
+
* Reject Polyfill.io script URLs — Next.js already polyfills modern browsers,
|
|
196
|
+
* and Polyfill.io has a checkered history.
|
|
202
197
|
*
|
|
203
198
|
* @reference https://nextjs.org/docs/messages/no-unwanted-polyfillio
|
|
204
199
|
*/
|