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