@ttsc/lint 0.13.1 → 0.14.0-dev.20260528
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +948 -69
- package/lib/defaultFormat.d.ts +9 -6
- package/lib/defaultFormat.js +9 -6
- package/lib/defaultFormat.js.map +1 -1
- package/lib/index.d.ts +46 -0
- package/lib/index.js +35 -10
- package/lib/index.js.map +1 -1
- package/lib/structures/ITtscLintConfig.d.ts +12 -6
- package/lib/structures/{ITtscLintFormatConfig.d.ts → ITtscLintFormat.d.ts} +2 -2
- package/lib/structures/{TtscLintRuleMap.js → ITtscLintFormat.js} +1 -1
- package/lib/structures/ITtscLintFormat.js.map +1 -0
- package/lib/structures/TtscLintRuleSetting.d.ts +49 -0
- package/lib/structures/{TtscLintRuleOptions.js → TtscLintRuleSetting.js} +1 -1
- package/lib/structures/TtscLintRuleSetting.js.map +1 -0
- package/lib/structures/index.d.ts +3 -4
- package/lib/structures/index.js +3 -4
- package/lib/structures/index.js.map +1 -1
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +104 -0
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +14 -0
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +79 -0
- package/lib/structures/rules/ITtscLintBoundariesRules.js +3 -0
- package/lib/structures/rules/ITtscLintBoundariesRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintContributorRules.d.ts +17 -0
- package/lib/structures/rules/ITtscLintContributorRules.js +3 -0
- package/lib/structures/rules/ITtscLintContributorRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintCoreRules.d.ts +1257 -0
- package/lib/structures/{ITtscLintFormatConfig.js → rules/ITtscLintCoreRules.js} +1 -1
- package/lib/structures/rules/ITtscLintCoreRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +17 -0
- package/lib/structures/rules/ITtscLintCypressRuleOptions.js +10 -0
- package/lib/structures/rules/ITtscLintCypressRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintCypressRules.d.ts +129 -0
- package/lib/structures/rules/ITtscLintCypressRules.js +3 -0
- package/lib/structures/rules/ITtscLintCypressRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +157 -0
- package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js +13 -0
- package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +167 -0
- package/lib/structures/rules/ITtscLintFunctionalRules.js +3 -0
- package/lib/structures/rules/ITtscLintFunctionalRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintJestRules.d.ts +201 -0
- package/lib/structures/rules/ITtscLintJestRules.js +3 -0
- package/lib/structures/rules/ITtscLintJestRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintJsdocRules.d.ts +140 -0
- package/lib/structures/rules/ITtscLintJsdocRules.js +3 -0
- package/lib/structures/rules/ITtscLintJsdocRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +302 -0
- package/lib/structures/rules/ITtscLintJsxA11yRules.js +3 -0
- package/lib/structures/rules/ITtscLintJsxA11yRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintNextjsRules.d.ts +185 -0
- package/lib/structures/rules/ITtscLintNextjsRules.js +3 -0
- package/lib/structures/rules/ITtscLintNextjsRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +330 -0
- package/lib/structures/rules/ITtscLintPlaywrightRules.js +3 -0
- package/lib/structures/rules/ITtscLintPlaywrightRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintPromiseRules.d.ts +188 -0
- package/lib/structures/rules/ITtscLintPromiseRules.js +3 -0
- package/lib/structures/rules/ITtscLintPromiseRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +18 -0
- package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js +8 -0
- package/lib/structures/rules/ITtscLintReactPerfRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +51 -0
- package/lib/structures/rules/ITtscLintReactPerfRules.js +3 -0
- package/lib/structures/rules/ITtscLintReactPerfRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +39 -0
- package/lib/structures/rules/ITtscLintReactRuleOptions.js +12 -0
- package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintReactRules.d.ts +289 -0
- package/lib/structures/rules/ITtscLintReactRules.js +3 -0
- package/lib/structures/rules/ITtscLintReactRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintRegexpRules.d.ts +190 -0
- package/lib/structures/rules/ITtscLintRegexpRules.js +3 -0
- package/lib/structures/rules/ITtscLintRegexpRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +66 -0
- package/lib/structures/rules/ITtscLintRuleOptionsMap.js +3 -0
- package/lib/structures/rules/ITtscLintRuleOptionsMap.js.map +1 -0
- package/lib/structures/rules/ITtscLintRules.d.ts +55 -0
- package/lib/structures/{TtscLintRule.js → rules/ITtscLintRules.js} +1 -1
- package/lib/structures/rules/ITtscLintRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintSecurityRules.d.ts +148 -0
- package/lib/structures/rules/ITtscLintSecurityRules.js +3 -0
- package/lib/structures/rules/ITtscLintSecurityRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintSolidRules.d.ts +181 -0
- package/lib/structures/rules/ITtscLintSolidRules.js +3 -0
- package/lib/structures/rules/ITtscLintSolidRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +21 -0
- package/lib/structures/rules/ITtscLintStorybookRuleOptions.js +9 -0
- package/lib/structures/rules/ITtscLintStorybookRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintStorybookRules.d.ts +174 -0
- package/lib/structures/rules/ITtscLintStorybookRules.js +3 -0
- package/lib/structures/rules/ITtscLintStorybookRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +94 -0
- package/lib/structures/rules/ITtscLintTanstackQueryRules.js +3 -0
- package/lib/structures/rules/ITtscLintTanstackQueryRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +22 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js +10 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +310 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRules.js +3 -0
- package/lib/structures/rules/ITtscLintTestingLibraryRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +1132 -0
- package/lib/structures/rules/ITtscLintTypeScriptRules.js +3 -0
- package/lib/structures/rules/ITtscLintTypeScriptRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintUnicornRules.d.ts +997 -0
- package/lib/structures/rules/ITtscLintUnicornRules.js +3 -0
- package/lib/structures/rules/ITtscLintUnicornRules.js.map +1 -0
- package/lib/structures/rules/ITtscLintVitestRules.d.ts +141 -0
- package/lib/structures/rules/ITtscLintVitestRules.js +3 -0
- package/lib/structures/rules/ITtscLintVitestRules.js.map +1 -0
- package/lib/structures/rules/index.d.ts +31 -0
- package/lib/structures/rules/index.js +48 -0
- package/lib/structures/rules/index.js.map +1 -0
- package/linthost/ast_helpers.go +30 -5
- package/linthost/config.go +48 -17
- package/linthost/config_format.go +9 -9
- package/linthost/directives.go +67 -25
- package/linthost/dispatch.go +14 -3
- package/linthost/engine.go +152 -31
- package/linthost/fix.go +2 -2
- package/linthost/lsp.go +747 -0
- package/linthost/print_dispatch.go +2 -2
- package/linthost/print_nodes_function.go +2 -2
- package/linthost/print_nodes_object.go +1 -1
- package/linthost/rule_names.go +14 -0
- package/linthost/rules_arrays.go +2 -2
- package/linthost/rules_boundaries.go +532 -0
- package/linthost/rules_camelcase.go +133 -0
- package/linthost/rules_complexity.go +94 -0
- package/linthost/rules_consistent_return.go +130 -0
- package/linthost/rules_console.go +1 -1
- package/linthost/rules_core_extra.go +739 -0
- package/linthost/rules_curly.go +70 -0
- package/linthost/rules_cypress.go +608 -0
- package/linthost/rules_debugger.go +2 -2
- package/linthost/rules_default_case.go +39 -0
- package/linthost/rules_default_case_last.go +46 -0
- package/linthost/rules_dupes.go +3 -3
- package/linthost/rules_empty.go +3 -3
- package/linthost/rules_escape.go +44 -24
- package/linthost/rules_eval.go +2 -2
- package/linthost/rules_finally.go +2 -2
- package/linthost/rules_format_jsdoc.go +1 -1
- package/linthost/rules_format_print_width.go +9 -9
- package/linthost/rules_format_quotes.go +1 -1
- package/linthost/rules_format_semi.go +1 -1
- package/linthost/rules_format_sort_imports.go +1 -1
- package/linthost/rules_format_trailing_comma.go +1 -1
- package/linthost/rules_functional.go +967 -0
- package/linthost/rules_gap.go +24 -45
- package/linthost/rules_grouped_accessor_pairs.go +87 -0
- package/linthost/rules_guard_for_in.go +198 -0
- package/linthost/rules_id_length.go +77 -0
- package/linthost/rules_imports.go +70 -2
- package/linthost/rules_init_declarations.go +53 -0
- package/linthost/rules_jest.go +618 -0
- package/linthost/rules_jsdoc.go +502 -0
- package/linthost/rules_jsx_a11y.go +1264 -0
- package/linthost/rules_logic.go +12 -12
- package/linthost/rules_loops.go +1 -1
- package/linthost/rules_max_classes_per_file.go +58 -0
- package/linthost/rules_max_depth.go +83 -0
- package/linthost/rules_max_lines.go +101 -0
- package/linthost/rules_max_lines_per_function.go +57 -0
- package/linthost/rules_max_nested_callbacks.go +61 -0
- package/linthost/rules_max_params.go +49 -0
- package/linthost/rules_max_statements.go +59 -0
- package/linthost/rules_misc.go +1 -1
- package/linthost/rules_nextjs.go +697 -0
- package/linthost/rules_no_else_return.go +75 -0
- package/linthost/rules_no_empty_named_blocks.go +91 -0
- package/linthost/rules_no_extend_native.go +51 -0
- package/linthost/rules_no_import_assign.go +140 -0
- package/linthost/rules_no_invalid_this.go +52 -0
- package/linthost/rules_no_loop_func.go +85 -0
- package/linthost/rules_no_magic_numbers.go +123 -0
- package/linthost/rules_no_mixed_operators.go +80 -0
- package/linthost/rules_no_param_reassign.go +98 -0
- package/linthost/rules_no_redeclare.go +270 -0
- package/linthost/rules_no_restricted_imports.go +105 -0
- package/linthost/rules_no_restricted_syntax.go +49 -0
- package/linthost/rules_no_shadow.go +147 -0
- package/linthost/rules_no_unreachable.go +77 -0
- package/linthost/rules_no_useless_assignment.go +120 -0
- package/linthost/rules_no_useless_constructor.go +245 -0
- package/linthost/rules_no_useless_return.go +51 -0
- package/linthost/rules_params.go +1 -1
- package/linthost/rules_playwright.go +788 -0
- package/linthost/rules_prefer_arrow_callback.go +124 -0
- package/linthost/rules_prefer_destructuring.go +98 -0
- package/linthost/rules_prefer_named_capture_group.go +129 -0
- package/linthost/rules_prefer_rest_params.go +94 -0
- package/linthost/rules_problems.go +41 -30
- package/linthost/rules_promise.go +1128 -73
- package/linthost/rules_protos.go +2 -2
- package/linthost/rules_react.go +773 -0
- package/linthost/rules_react_extras.go +227 -0
- package/linthost/rules_react_hooks.go +848 -0
- package/linthost/rules_react_perf.go +293 -0
- package/linthost/rules_react_refresh.go +583 -0
- package/linthost/rules_regexp.go +410 -0
- package/linthost/rules_security.go +830 -0
- package/linthost/rules_self.go +2 -2
- package/linthost/rules_solid.go +1073 -0
- package/linthost/rules_sort_imports.go +69 -0
- package/linthost/rules_sort_keys.go +134 -0
- package/linthost/rules_storybook.go +1176 -0
- package/linthost/rules_strings.go +4 -4
- package/linthost/rules_suggestions.go +38 -38
- package/linthost/rules_tanstack_query.go +844 -0
- package/linthost/rules_testing_library.go +1204 -0
- package/linthost/rules_throw.go +1 -1
- package/linthost/rules_ts.go +19 -19
- package/linthost/rules_ts_async.go +399 -0
- package/linthost/rules_ts_class_literal_property_style.go +115 -0
- package/linthost/rules_ts_consistent_type_exports.go +256 -0
- package/linthost/rules_ts_explicit_function_return_type.go +67 -0
- package/linthost/rules_ts_extra.go +155 -36
- package/linthost/rules_ts_no_base_to_string.go +218 -0
- package/linthost/rules_ts_no_confusing_void.go +72 -0
- package/linthost/rules_ts_no_deprecated.go +195 -0
- package/linthost/rules_ts_no_for_in_array.go +84 -0
- package/linthost/rules_ts_no_magic_numbers.go +124 -0
- package/linthost/rules_ts_no_meaningless_void_operator.go +84 -0
- package/linthost/rules_ts_no_misused_spread.go +104 -0
- package/linthost/rules_ts_no_redundant_type_constituents.go +113 -0
- package/linthost/rules_ts_no_restricted_types.go +62 -0
- package/linthost/rules_ts_no_unnecessary_boolean_literal_compare.go +129 -0
- package/linthost/rules_ts_no_unnecessary_condition.go +250 -0
- package/linthost/rules_ts_no_unnecessary_qualifier.go +118 -0
- package/linthost/rules_ts_no_unnecessary_template_expression.go +178 -0
- package/linthost/rules_ts_no_unnecessary_type_arguments.go +234 -0
- package/linthost/rules_ts_no_unnecessary_type_assertion.go +157 -0
- package/linthost/rules_ts_no_unsafe_argument.go +82 -0
- package/linthost/rules_ts_no_unsafe_assignment.go +102 -0
- package/linthost/rules_ts_no_unsafe_call.go +82 -0
- package/linthost/rules_ts_no_unsafe_enum_comparison.go +235 -0
- package/linthost/rules_ts_no_unsafe_member_access.go +58 -0
- package/linthost/rules_ts_no_unsafe_return.go +126 -0
- package/linthost/rules_ts_no_unsafe_unary_minus.go +81 -0
- package/linthost/rules_ts_no_useless_constructor.go +52 -0
- package/linthost/rules_ts_non_nullable_type_assertion_style.go +108 -0
- package/linthost/rules_ts_parameter_properties.go +38 -0
- package/linthost/rules_ts_prefer_find.go +178 -0
- package/linthost/rules_ts_prefer_includes.go +255 -0
- package/linthost/rules_ts_prefer_nullish_coalescing.go +104 -0
- package/linthost/rules_ts_prefer_optional_chain.go +228 -0
- package/linthost/rules_ts_prefer_promise_reject_errors.go +176 -0
- package/linthost/rules_ts_prefer_readonly.go +73 -0
- package/linthost/rules_ts_prefer_reduce_type_parameter.go +116 -0
- package/linthost/rules_ts_prefer_regexp_exec.go +122 -0
- package/linthost/rules_ts_prefer_return_this_type.go +135 -0
- package/linthost/rules_ts_prefer_string_starts_ends_with.go +360 -0
- package/linthost/rules_ts_promise_function_async.go +77 -0
- package/linthost/rules_ts_related_getter_setter_pairs.go +113 -0
- package/linthost/rules_ts_require_array_sort_compare.go +96 -0
- package/linthost/rules_ts_restrict_plus_operands.go +127 -0
- package/linthost/rules_ts_restrict_template_expressions.go +95 -0
- package/linthost/rules_ts_simple.go +387 -0
- package/linthost/rules_ts_sort_type_constituents.go +144 -0
- package/linthost/rules_ts_strict_boolean_expressions.go +157 -0
- package/linthost/rules_ts_switch_exhaustiveness_check.go +147 -0
- package/linthost/rules_ts_unbound_method.go +126 -0
- package/linthost/rules_tsdoc.go +136 -0
- package/linthost/rules_unicorn_better_regex.go +27 -0
- package/linthost/rules_unicorn_catch_error_name.go +46 -0
- package/linthost/rules_unicorn_consistent_assert.go +47 -0
- package/linthost/rules_unicorn_consistent_date_clone.go +54 -0
- package/linthost/rules_unicorn_consistent_destructuring.go +25 -0
- package/linthost/rules_unicorn_consistent_empty_array_spread.go +62 -0
- package/linthost/rules_unicorn_consistent_existence_index_check.go +80 -0
- package/linthost/rules_unicorn_consistent_function_scoping.go +25 -0
- package/linthost/rules_unicorn_consistent_template_literal_escape.go +25 -0
- package/linthost/rules_unicorn_custom_error_definition.go +138 -0
- package/linthost/rules_unicorn_empty_brace_spaces.go +73 -0
- package/linthost/rules_unicorn_error_message.go +64 -0
- package/linthost/rules_unicorn_escape_case.go +51 -0
- package/linthost/rules_unicorn_expiring_todo_comments.go +78 -0
- package/linthost/rules_unicorn_explicit_length_check.go +88 -0
- package/linthost/rules_unicorn_filename_case.go +29 -0
- package/linthost/rules_unicorn_import_style.go +28 -0
- package/linthost/rules_unicorn_isolated_functions.go +29 -0
- package/linthost/rules_unicorn_new_for_builtins.go +87 -0
- package/linthost/rules_unicorn_no_abusive_eslint_disable.go +63 -0
- package/linthost/rules_unicorn_no_accessor_recursion.go +115 -0
- package/linthost/rules_unicorn_no_anonymous_default_export.go +74 -0
- package/linthost/rules_unicorn_no_array_callback_reference.go +65 -0
- package/linthost/rules_unicorn_no_array_for_each.go +40 -0
- package/linthost/rules_unicorn_no_array_method_this_argument.go +61 -0
- package/linthost/rules_unicorn_no_array_reduce.go +41 -0
- package/linthost/rules_unicorn_no_array_reverse.go +44 -0
- package/linthost/rules_unicorn_no_array_sort.go +43 -0
- package/linthost/rules_unicorn_no_await_expression_member.go +40 -0
- package/linthost/rules_unicorn_no_await_in_promise_methods.go +69 -0
- package/linthost/rules_unicorn_no_console_spaces.go +61 -0
- package/linthost/rules_unicorn_no_document_cookie.go +41 -0
- package/linthost/rules_unicorn_no_empty_file.go +44 -0
- package/linthost/rules_unicorn_no_for_loop.go +102 -0
- package/linthost/rules_unicorn_no_hex_escape.go +42 -0
- package/linthost/rules_unicorn_no_immediate_mutation.go +90 -0
- package/linthost/rules_unicorn_no_instanceof_builtins.go +66 -0
- package/linthost/rules_unicorn_no_invalid_fetch_options.go +79 -0
- package/linthost/rules_unicorn_no_invalid_remove_event_listener.go +51 -0
- package/linthost/rules_unicorn_no_keyword_prefix.go +101 -0
- package/linthost/rules_unicorn_no_lonely_if.go +44 -0
- package/linthost/rules_unicorn_no_magic_array_flat_depth.go +51 -0
- package/linthost/rules_unicorn_no_named_default.go +54 -0
- package/linthost/rules_unicorn_no_negated_condition.go +85 -0
- package/linthost/rules_unicorn_no_negation_in_equality_check.go +50 -0
- package/linthost/rules_unicorn_no_nested_ternary.go +43 -0
- package/linthost/rules_unicorn_no_new_array.go +30 -0
- package/linthost/rules_unicorn_no_new_buffer.go +31 -0
- package/linthost/rules_unicorn_no_null.go +24 -0
- package/linthost/rules_unicorn_no_object_as_default_parameter.go +48 -0
- package/linthost/rules_unicorn_no_process_exit.go +43 -0
- package/linthost/rules_unicorn_no_single_promise_in_promise_methods.go +59 -0
- package/linthost/rules_unicorn_no_static_only_class.go +56 -0
- package/linthost/rules_unicorn_no_thenable.go +74 -0
- package/linthost/rules_unicorn_no_this_assignment.go +35 -0
- package/linthost/rules_unicorn_no_typeof_undefined.go +58 -0
- package/linthost/rules_unicorn_no_unnecessary_array_flat_depth.go +49 -0
- package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +70 -0
- package/linthost/rules_unicorn_no_unnecessary_await.go +51 -0
- package/linthost/rules_unicorn_no_unnecessary_polyfills.go +32 -0
- package/linthost/rules_unicorn_no_unnecessary_slice_end.go +48 -0
- package/linthost/rules_unicorn_no_unreadable_array_destructuring.go +115 -0
- package/linthost/rules_unicorn_no_unreadable_iife.go +50 -0
- package/linthost/rules_unicorn_no_unused_properties.go +30 -0
- package/linthost/rules_unicorn_no_useless_collection_argument.go +63 -0
- package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +46 -0
- package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +81 -0
- package/linthost/rules_unicorn_no_useless_iterator_to_array.go +72 -0
- package/linthost/rules_unicorn_no_useless_length_check.go +144 -0
- package/linthost/rules_unicorn_no_useless_promise_resolve_reject.go +81 -0
- package/linthost/rules_unicorn_no_useless_spread.go +67 -0
- package/linthost/rules_unicorn_no_useless_switch_case.go +55 -0
- package/linthost/rules_unicorn_no_useless_undefined.go +55 -0
- package/linthost/rules_unicorn_no_zero_fractions.go +52 -0
- package/linthost/rules_unicorn_number_literal_case.go +69 -0
- package/linthost/rules_unicorn_numeric_separators_style.go +75 -0
- package/linthost/rules_unicorn_prefer_add_event_listener.go +66 -0
- package/linthost/rules_unicorn_prefer_array_find.go +51 -0
- package/linthost/rules_unicorn_prefer_array_flat.go +52 -0
- package/linthost/rules_unicorn_prefer_array_flat_map.go +63 -0
- package/linthost/rules_unicorn_prefer_array_index_of.go +147 -0
- package/linthost/rules_unicorn_prefer_array_some.go +67 -0
- package/linthost/rules_unicorn_prefer_at.go +77 -0
- package/linthost/rules_unicorn_prefer_bigint_literals.go +77 -0
- package/linthost/rules_unicorn_prefer_blob_reading_methods.go +44 -0
- package/linthost/rules_unicorn_prefer_class_fields.go +93 -0
- package/linthost/rules_unicorn_prefer_classlist_toggle.go +120 -0
- package/linthost/rules_unicorn_prefer_code_point.go +49 -0
- package/linthost/rules_unicorn_prefer_date_now.go +78 -0
- package/linthost/rules_unicorn_prefer_default_parameters.go +144 -0
- package/linthost/rules_unicorn_prefer_dom_node_append.go +40 -0
- package/linthost/rules_unicorn_prefer_dom_node_dataset.go +55 -0
- package/linthost/rules_unicorn_prefer_dom_node_remove.go +41 -0
- package/linthost/rules_unicorn_prefer_dom_node_text_content.go +37 -0
- package/linthost/rules_unicorn_prefer_event_target.go +36 -0
- package/linthost/rules_unicorn_prefer_export_from.go +129 -0
- package/linthost/rules_unicorn_prefer_global_this.go +127 -0
- package/linthost/rules_unicorn_prefer_import_meta_properties.go +66 -0
- package/linthost/rules_unicorn_prefer_includes.go +149 -0
- package/linthost/rules_unicorn_prefer_json_parse_buffer.go +65 -0
- package/linthost/rules_unicorn_prefer_keyboard_event_key.go +38 -0
- package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +48 -0
- package/linthost/rules_unicorn_prefer_math_min_max.go +60 -0
- package/linthost/rules_unicorn_prefer_math_trunc.go +62 -0
- package/linthost/rules_unicorn_prefer_modern_dom_apis.go +47 -0
- package/linthost/rules_unicorn_prefer_modern_math_apis.go +70 -0
- package/linthost/rules_unicorn_prefer_module.go +50 -0
- package/linthost/rules_unicorn_prefer_native_coercion_functions.go +114 -0
- package/linthost/rules_unicorn_prefer_negative_index.go +74 -0
- package/linthost/rules_unicorn_prefer_node_protocol.go +122 -0
- package/linthost/rules_unicorn_prefer_number_properties.go +88 -0
- package/linthost/rules_unicorn_prefer_object_from_entries.go +55 -0
- package/linthost/rules_unicorn_prefer_optional_catch_binding.go +62 -0
- package/linthost/rules_unicorn_prefer_prototype_methods.go +54 -0
- package/linthost/rules_unicorn_prefer_query_selector.go +56 -0
- package/linthost/rules_unicorn_prefer_reflect_apply.go +36 -0
- package/linthost/rules_unicorn_prefer_regexp_test_rule.go +80 -0
- package/linthost/rules_unicorn_prefer_response_static_json.go +53 -0
- package/linthost/rules_unicorn_prefer_set_has.go +42 -0
- package/linthost/rules_unicorn_prefer_set_size.go +48 -0
- package/linthost/rules_unicorn_prefer_simple_condition_first.go +34 -0
- package/linthost/rules_unicorn_prefer_single_call.go +96 -0
- package/linthost/rules_unicorn_prefer_spread.go +51 -0
- package/linthost/rules_unicorn_prefer_string_raw.go +43 -0
- package/linthost/rules_unicorn_prefer_string_replace_all.go +95 -0
- package/linthost/rules_unicorn_prefer_string_slice.go +43 -0
- package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +148 -0
- package/linthost/rules_unicorn_prefer_string_trim_start_end.go +48 -0
- package/linthost/rules_unicorn_prefer_structured_clone.go +71 -0
- package/linthost/rules_unicorn_prefer_switch.go +103 -0
- package/linthost/rules_unicorn_prefer_ternary.go +71 -0
- package/linthost/rules_unicorn_prefer_top_level_await.go +72 -0
- package/linthost/rules_unicorn_prefer_type_error.go +127 -0
- package/linthost/rules_unicorn_prevent_abbreviations.go +127 -0
- package/linthost/rules_unicorn_relative_url_style.go +49 -0
- package/linthost/rules_unicorn_require_array_join_separator.go +45 -0
- package/linthost/rules_unicorn_require_module_attributes.go +54 -0
- package/linthost/rules_unicorn_require_module_specifiers.go +55 -0
- package/linthost/rules_unicorn_require_number_to_fixed_digits_argument.go +43 -0
- package/linthost/rules_unicorn_require_post_message_target_origin.go +44 -0
- package/linthost/rules_unicorn_string_content.go +27 -0
- package/linthost/rules_unicorn_switch_case_braces.go +42 -0
- package/linthost/rules_unicorn_switch_case_break_position.go +31 -0
- package/linthost/rules_unicorn_template_indent.go +28 -0
- package/linthost/rules_unicorn_text_encoding_identifier_case.go +72 -0
- package/linthost/rules_unicorn_throw_new_error.go +61 -0
- package/linthost/rules_var.go +4 -4
- package/linthost/rules_vitest.go +568 -0
- package/package.json +3 -3
- package/plugin/main.go +49 -3
- package/rule/astutil/astutil.go +10 -3
- package/rule/rule.go +12 -10
- package/src/defaultFormat.ts +11 -8
- package/src/index.ts +40 -16
- package/src/structures/ITtscLintConfig.ts +12 -6
- package/src/structures/{ITtscLintFormatConfig.ts → ITtscLintFormat.ts} +2 -2
- package/src/structures/TtscLintRuleSetting.ts +55 -0
- package/src/structures/index.ts +3 -4
- package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +128 -0
- package/src/structures/rules/ITtscLintBoundariesRules.ts +95 -0
- package/src/structures/rules/ITtscLintContributorRules.ts +21 -0
- package/src/structures/rules/ITtscLintCoreRules.ts +1406 -0
- package/src/structures/rules/ITtscLintCypressRuleOptions.ts +18 -0
- package/src/structures/rules/ITtscLintCypressRules.ts +145 -0
- package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +213 -0
- package/src/structures/rules/ITtscLintFunctionalRules.ts +202 -0
- package/src/structures/rules/ITtscLintJestRules.ts +220 -0
- package/src/structures/rules/ITtscLintJsdocRules.ts +153 -0
- package/src/structures/rules/ITtscLintJsxA11yRules.ts +339 -0
- package/src/structures/rules/ITtscLintNextjsRules.ts +206 -0
- package/src/structures/rules/ITtscLintPlaywrightRules.ts +361 -0
- package/src/structures/rules/ITtscLintPromiseRules.ts +205 -0
- package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +19 -0
- package/src/structures/rules/ITtscLintReactPerfRules.ts +55 -0
- package/src/structures/rules/ITtscLintReactRuleOptions.ts +43 -0
- package/src/structures/rules/ITtscLintReactRules.ts +321 -0
- package/src/structures/rules/ITtscLintRegexpRules.ts +212 -0
- package/src/structures/rules/ITtscLintRuleOptionsMap.ts +89 -0
- package/src/structures/rules/ITtscLintRules.ts +77 -0
- package/src/structures/rules/ITtscLintSecurityRules.ts +162 -0
- package/src/structures/rules/ITtscLintSolidRules.ts +202 -0
- package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +23 -0
- package/src/structures/rules/ITtscLintStorybookRules.ts +193 -0
- package/src/structures/rules/ITtscLintTanstackQueryRules.ts +102 -0
- package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +24 -0
- package/src/structures/rules/ITtscLintTestingLibraryRules.ts +342 -0
- package/src/structures/rules/ITtscLintTypeScriptRules.ts +1230 -0
- package/src/structures/rules/ITtscLintUnicornRules.ts +1143 -0
- package/src/structures/rules/ITtscLintVitestRules.ts +154 -0
- package/src/structures/rules/index.ts +31 -0
- package/lib/structures/ITtscLintFormatConfig.js.map +0 -1
- package/lib/structures/TtscLintRule.d.ts +0 -17
- package/lib/structures/TtscLintRule.js.map +0 -1
- package/lib/structures/TtscLintRuleMap.d.ts +0 -46
- package/lib/structures/TtscLintRuleMap.js.map +0 -1
- package/lib/structures/TtscLintRuleOptions.d.ts +0 -137
- package/lib/structures/TtscLintRuleOptions.js.map +0 -1
- package/src/structures/TtscLintRule.ts +0 -160
- package/src/structures/TtscLintRuleMap.ts +0 -55
- package/src/structures/TtscLintRuleOptions.ts +0 -151
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* JSX accessibility rules from `eslint-plugin-jsx-a11y`, applied to
|
|
5
|
+
* TSX (and JSX-in-TS) sources.
|
|
6
|
+
*
|
|
7
|
+
* Checks the static structure of JSX elements against WAI-ARIA
|
|
8
|
+
* authoring guidance — interactive controls should be focusable,
|
|
9
|
+
* labels should reference a control, ARIA properties should match the
|
|
10
|
+
* element role, and so on. Runtime accessibility issues require live
|
|
11
|
+
* audits; this family catches the statically-decidable subset.
|
|
12
|
+
*
|
|
13
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y
|
|
14
|
+
*/
|
|
15
|
+
export interface ITtscLintJsxA11yRules {
|
|
16
|
+
/**
|
|
17
|
+
* Require image-like JSX elements (`<img>`, `<input
|
|
18
|
+
* type="image">`, `<object>`, `<area>`) to expose alt text or an
|
|
19
|
+
* ARIA label.
|
|
20
|
+
*
|
|
21
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/alt-text.md
|
|
22
|
+
*/
|
|
23
|
+
"jsx-a11y/alt-text"?: TtscLintRuleSetting;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Reject `<a>` elements whose visible text is one of a small set of
|
|
27
|
+
* phrases that carry no information out of context. Screen-reader
|
|
28
|
+
* users navigate by listing links — "click here" / "more" / "read
|
|
29
|
+
* more" turn that list into noise.
|
|
30
|
+
*
|
|
31
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-ambiguous-text.md
|
|
32
|
+
*/
|
|
33
|
+
"jsx-a11y/anchor-ambiguous-text"?: TtscLintRuleSetting;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Reject empty JSX anchors with no accessible content (text,
|
|
37
|
+
* `aria-label`, or labelled child).
|
|
38
|
+
*
|
|
39
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-has-content.md
|
|
40
|
+
*/
|
|
41
|
+
"jsx-a11y/anchor-has-content"?: TtscLintRuleSetting;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Reject anchors with missing, `#`-only, empty, or `javascript:`
|
|
45
|
+
* `href` values, all of which break navigation semantics.
|
|
46
|
+
*
|
|
47
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-is-valid.md
|
|
48
|
+
*/
|
|
49
|
+
"jsx-a11y/anchor-is-valid"?: TtscLintRuleSetting;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Require `tabIndex` on any element carrying `aria-activedescendant`
|
|
53
|
+
* unless the tag is already focusable by default (`<input>`, etc.) —
|
|
54
|
+
* the composite-widget host must keep document focus for the
|
|
55
|
+
* descendant id to do anything.
|
|
56
|
+
*
|
|
57
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-activedescendant-has-tabindex.md
|
|
58
|
+
*/
|
|
59
|
+
"jsx-a11y/aria-activedescendant-has-tabindex"?: TtscLintRuleSetting;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Reject `aria-*` JSX attribute names that are not part of the
|
|
63
|
+
* WAI-ARIA States and Properties spec — catches typos such as
|
|
64
|
+
* `aria-labeledby` (missing second `l`) that silently disable
|
|
65
|
+
* assistive-tech support.
|
|
66
|
+
*
|
|
67
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-props.md
|
|
68
|
+
*/
|
|
69
|
+
"jsx-a11y/aria-props"?: TtscLintRuleSetting;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Validate literal values supplied to ARIA properties against the
|
|
73
|
+
* type the spec declares for them — e.g. `aria-checked` must be
|
|
74
|
+
* one of `true`, `false`, `"mixed"`, and `aria-hidden="yes"` is
|
|
75
|
+
* rejected because the type is boolean.
|
|
76
|
+
*
|
|
77
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-proptypes.md
|
|
78
|
+
*/
|
|
79
|
+
"jsx-a11y/aria-proptypes"?: TtscLintRuleSetting;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Require `role` values to be a concrete, non-abstract WAI-ARIA role
|
|
83
|
+
* (`"button"`, `"checkbox"`, ...). Rejects misspellings and abstract
|
|
84
|
+
* roles like `"range"`; computed values are skipped because the
|
|
85
|
+
* concrete role cannot be checked statically.
|
|
86
|
+
*
|
|
87
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-role.md
|
|
88
|
+
*/
|
|
89
|
+
"jsx-a11y/aria-role"?: TtscLintRuleSetting;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Reject ARIA roles and attributes on elements that do not
|
|
93
|
+
* support them (e.g. `aria-checked` on a `<meta>` tag).
|
|
94
|
+
*
|
|
95
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-unsupported-elements.md
|
|
96
|
+
*/
|
|
97
|
+
"jsx-a11y/aria-unsupported-elements"?: TtscLintRuleSetting;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Validate the literal `autocomplete` token against the HTML spec
|
|
101
|
+
* vocabulary and against the `type` of the surrounding input — e.g.
|
|
102
|
+
* `autocomplete="url"` on `<input type="email">` is rejected because
|
|
103
|
+
* the two sets do not overlap.
|
|
104
|
+
*
|
|
105
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/autocomplete-valid.md
|
|
106
|
+
*/
|
|
107
|
+
"jsx-a11y/autocomplete-valid"?: TtscLintRuleSetting;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Require keyboard handlers alongside `onClick` on non-interactive
|
|
111
|
+
* JSX elements so the element is also reachable by keyboard.
|
|
112
|
+
*
|
|
113
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/click-events-have-key-events.md
|
|
114
|
+
*/
|
|
115
|
+
"jsx-a11y/click-events-have-key-events"?: TtscLintRuleSetting;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Require interactive controls to have an accessible label
|
|
119
|
+
* (visible text, `aria-label`, or `aria-labelledby`).
|
|
120
|
+
*
|
|
121
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/control-has-associated-label.md
|
|
122
|
+
*/
|
|
123
|
+
"jsx-a11y/control-has-associated-label"?: TtscLintRuleSetting;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Reject empty JSX headings (`<h1>{}</h1>`) — assistive
|
|
127
|
+
* technology cannot announce content that does not exist.
|
|
128
|
+
*
|
|
129
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/heading-has-content.md
|
|
130
|
+
*/
|
|
131
|
+
"jsx-a11y/heading-has-content"?: TtscLintRuleSetting;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Require `<html>` JSX elements to declare a non-empty `lang`
|
|
135
|
+
* attribute so screen readers can pick the correct pronunciation.
|
|
136
|
+
* Largely superseded by `jsx-a11y/lang`, which also validates the
|
|
137
|
+
* tag value.
|
|
138
|
+
*
|
|
139
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/html-has-lang.md
|
|
140
|
+
*/
|
|
141
|
+
"jsx-a11y/html-has-lang"?: TtscLintRuleSetting;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Require every `<iframe>` JSX element to declare a non-empty,
|
|
145
|
+
* unique `title` so assistive tech can announce the embedded
|
|
146
|
+
* content. Empty strings, booleans, numbers, and `{...spread}`
|
|
147
|
+
* without a literal title are all flagged.
|
|
148
|
+
*
|
|
149
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/iframe-has-title.md
|
|
150
|
+
*/
|
|
151
|
+
"jsx-a11y/iframe-has-title"?: TtscLintRuleSetting;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Reject redundant words such as *image*, *photo*, or *picture*
|
|
155
|
+
* inside the `alt` attribute of an `<img>` — the role already
|
|
156
|
+
* conveys "this is an image".
|
|
157
|
+
*
|
|
158
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/img-redundant-alt.md
|
|
159
|
+
*/
|
|
160
|
+
"jsx-a11y/img-redundant-alt"?: TtscLintRuleSetting;
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Require elements with interactive ARIA roles (`role="button"`,
|
|
164
|
+
* `role="link"`, ...) to be focusable.
|
|
165
|
+
*
|
|
166
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/interactive-supports-focus.md
|
|
167
|
+
*/
|
|
168
|
+
"jsx-a11y/interactive-supports-focus"?: TtscLintRuleSetting;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Require `<label>` elements to either wrap a form control or
|
|
172
|
+
* reference one via `htmlFor`.
|
|
173
|
+
*
|
|
174
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/label-has-associated-control.md
|
|
175
|
+
*/
|
|
176
|
+
"jsx-a11y/label-has-associated-control"?: TtscLintRuleSetting;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Deprecated predecessor of `label-has-associated-control`. Checks
|
|
180
|
+
* the same nesting / `htmlFor` association requirement and supports
|
|
181
|
+
* configuring which custom components count as labels. Off in
|
|
182
|
+
* `recommended`; kept only for legacy configs.
|
|
183
|
+
*
|
|
184
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/label-has-for.md
|
|
185
|
+
*/
|
|
186
|
+
"jsx-a11y/label-has-for"?: TtscLintRuleSetting;
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Require the `<html lang>` value to be a valid IETF BCP-47 tag
|
|
190
|
+
* (`"en"`, `"en-US"`, ...). Superset of `html-has-lang`, since it
|
|
191
|
+
* also catches present-but-invalid tags like `lang="foo"`.
|
|
192
|
+
*
|
|
193
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/lang.md
|
|
194
|
+
*/
|
|
195
|
+
"jsx-a11y/lang"?: TtscLintRuleSetting;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Require `<audio>` and `<video>` elements to provide a `<track
|
|
199
|
+
* kind="captions">` child.
|
|
200
|
+
*
|
|
201
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/media-has-caption.md
|
|
202
|
+
*/
|
|
203
|
+
"jsx-a11y/media-has-caption"?: TtscLintRuleSetting;
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Require `onMouseOver` / `onMouseOut` handlers to have
|
|
207
|
+
* `onFocus` / `onBlur` parity so keyboard users get the same
|
|
208
|
+
* interaction.
|
|
209
|
+
*
|
|
210
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/mouse-events-have-key-events.md
|
|
211
|
+
*/
|
|
212
|
+
"jsx-a11y/mouse-events-have-key-events"?: TtscLintRuleSetting;
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Reject the `accessKey` JSX attribute — it conflicts with
|
|
216
|
+
* assistive-technology keyboard shortcuts.
|
|
217
|
+
*
|
|
218
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-access-key.md
|
|
219
|
+
*/
|
|
220
|
+
"jsx-a11y/no-access-key"?: TtscLintRuleSetting;
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Reject `aria-hidden` on focusable JSX elements — focus would
|
|
224
|
+
* land on an element hidden from assistive tech.
|
|
225
|
+
*
|
|
226
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-aria-hidden-on-focusable.md
|
|
227
|
+
*/
|
|
228
|
+
"jsx-a11y/no-aria-hidden-on-focusable"?: TtscLintRuleSetting;
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Reject `autoFocus` / `autofocus` JSX attributes — they steal
|
|
232
|
+
* focus on page load and disorient keyboard users.
|
|
233
|
+
*
|
|
234
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-autofocus.md
|
|
235
|
+
*/
|
|
236
|
+
"jsx-a11y/no-autofocus"?: TtscLintRuleSetting;
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Reject `<blink>` and `<marquee>` — moving content cannot be
|
|
240
|
+
* paused and harms users with cognitive or visual impairments
|
|
241
|
+
* (WCAG 2.2.2). The list is closed: extra elements cannot be added.
|
|
242
|
+
*
|
|
243
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-distracting-elements.md
|
|
244
|
+
*/
|
|
245
|
+
"jsx-a11y/no-distracting-elements"?: TtscLintRuleSetting;
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Reject non-interactive ARIA roles applied to natively
|
|
249
|
+
* interactive elements (e.g. `<button role="presentation">`).
|
|
250
|
+
*
|
|
251
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-interactive-element-to-noninteractive-role.md
|
|
252
|
+
*/
|
|
253
|
+
"jsx-a11y/no-interactive-element-to-noninteractive-role"?: TtscLintRuleSetting;
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Reject interaction event handlers (`onClick`, `onKeyDown`)
|
|
257
|
+
* placed on known non-interactive elements without a role
|
|
258
|
+
* override.
|
|
259
|
+
*
|
|
260
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-element-interactions.md
|
|
261
|
+
*/
|
|
262
|
+
"jsx-a11y/no-noninteractive-element-interactions"?: TtscLintRuleSetting;
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Reject interactive ARIA roles applied to non-interactive
|
|
266
|
+
* elements (e.g. `<li role="button">`); use the matching
|
|
267
|
+
* interactive tag.
|
|
268
|
+
*
|
|
269
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-element-to-interactive-role.md
|
|
270
|
+
*/
|
|
271
|
+
"jsx-a11y/no-noninteractive-element-to-interactive-role"?: TtscLintRuleSetting;
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Reject `tabIndex` on non-interactive JSX elements that have
|
|
275
|
+
* no interactive role.
|
|
276
|
+
*
|
|
277
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-tabindex.md
|
|
278
|
+
*/
|
|
279
|
+
"jsx-a11y/no-noninteractive-tabindex"?: TtscLintRuleSetting;
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Reject explicit `role` attributes that duplicate the
|
|
283
|
+
* native semantics of the element (e.g. `<button
|
|
284
|
+
* role="button">`).
|
|
285
|
+
*
|
|
286
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-redundant-roles.md
|
|
287
|
+
*/
|
|
288
|
+
"jsx-a11y/no-redundant-roles"?: TtscLintRuleSetting;
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Require static elements with interaction handlers to declare
|
|
292
|
+
* an interactive `role`.
|
|
293
|
+
*
|
|
294
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-static-element-interactions.md
|
|
295
|
+
*/
|
|
296
|
+
"jsx-a11y/no-static-element-interactions"?: TtscLintRuleSetting;
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Prefer native JSX tags over `div` / `span` plus an equivalent
|
|
300
|
+
* `role` (e.g. `<button>` over `<div role="button">`).
|
|
301
|
+
*
|
|
302
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/prefer-tag-over-role.md
|
|
303
|
+
*/
|
|
304
|
+
"jsx-a11y/prefer-tag-over-role"?: TtscLintRuleSetting;
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Require ARIA properties that the chosen role mandates (e.g.
|
|
308
|
+
* `aria-checked` on `role="checkbox"`).
|
|
309
|
+
*
|
|
310
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-has-required-aria-props.md
|
|
311
|
+
*/
|
|
312
|
+
"jsx-a11y/role-has-required-aria-props"?: TtscLintRuleSetting;
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Reject ARIA properties that the role does not support (e.g.
|
|
316
|
+
* `aria-checked` on `role="link"`).
|
|
317
|
+
*
|
|
318
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/role-supports-aria-props.md
|
|
319
|
+
*/
|
|
320
|
+
"jsx-a11y/role-supports-aria-props"?: TtscLintRuleSetting;
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Restrict the `scope` attribute to `<th>` cells. On any other tag
|
|
324
|
+
* (`<div scope="col">`, `<td scope="row">`) the attribute is ignored
|
|
325
|
+
* by browsers and confuses table-aware assistive tech.
|
|
326
|
+
*
|
|
327
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/scope.md
|
|
328
|
+
*/
|
|
329
|
+
"jsx-a11y/scope"?: TtscLintRuleSetting;
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Reject `tabIndex` values greater than zero. Positive indices jump
|
|
333
|
+
* the keyboard focus order out of document order and almost always
|
|
334
|
+
* desynchronize from later DOM changes; `0` and `-1` remain allowed.
|
|
335
|
+
*
|
|
336
|
+
* @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/tabindex-no-positive.md
|
|
337
|
+
*/
|
|
338
|
+
"jsx-a11y/tabindex-no-positive"?: TtscLintRuleSetting;
|
|
339
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Next.js framework rules from `@next/eslint-plugin-next`, applied to
|
|
5
|
+
* TypeScript and TSX sources inside Next.js apps.
|
|
6
|
+
*
|
|
7
|
+
* Checks Next.js-specific conventions — pages/app routing, `<Head>`
|
|
8
|
+
* placement, font and script loading, image and link components —
|
|
9
|
+
* that the framework's runtime treats as load-bearing.
|
|
10
|
+
*
|
|
11
|
+
* @reference https://nextjs.org/docs/app/api-reference/config/eslint
|
|
12
|
+
*/
|
|
13
|
+
export interface ITtscLintNextjsRules {
|
|
14
|
+
/**
|
|
15
|
+
* Require a non-blocking `display=` value on Google Fonts
|
|
16
|
+
* stylesheet links; reject `auto`, `block`, and `fallback`, which
|
|
17
|
+
* keep text invisible while the font loads and hurt LCP. Prefer
|
|
18
|
+
* `optional` or `swap`.
|
|
19
|
+
*
|
|
20
|
+
* @reference https://nextjs.org/docs/messages/google-font-display
|
|
21
|
+
*/
|
|
22
|
+
"nextjs/google-font-display"?: TtscLintRuleSetting;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Require `rel="preconnect"` for `fonts.gstatic.com` links to
|
|
26
|
+
* shave latency off Google Font fetches.
|
|
27
|
+
*
|
|
28
|
+
* @reference https://nextjs.org/docs/messages/google-font-preconnect
|
|
29
|
+
*/
|
|
30
|
+
"nextjs/google-font-preconnect"?: TtscLintRuleSetting;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Require an `id` attribute on inline `<Script>` components from
|
|
34
|
+
* `next/script`.
|
|
35
|
+
*
|
|
36
|
+
* Next.js uses the id to track the script across client
|
|
37
|
+
* navigations and to satisfy its loading-strategy budget; an
|
|
38
|
+
* inline script without one is silently dropped on subsequent
|
|
39
|
+
* renders.
|
|
40
|
+
*
|
|
41
|
+
* @reference https://nextjs.org/docs/messages/inline-script-id
|
|
42
|
+
*/
|
|
43
|
+
"nextjs/inline-script-id"?: TtscLintRuleSetting;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Prefer the Next.js Google Analytics integration over
|
|
47
|
+
* hand-written `gtag` script tags.
|
|
48
|
+
*
|
|
49
|
+
* @reference https://nextjs.org/docs/messages/next-script-for-ga
|
|
50
|
+
*/
|
|
51
|
+
"nextjs/next-script-for-ga"?: TtscLintRuleSetting;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Reject local declarations named `module`, which shadow the
|
|
55
|
+
* CommonJS `module` binding Next.js relies on.
|
|
56
|
+
*
|
|
57
|
+
* @reference https://nextjs.org/docs/messages/no-assign-module-variable
|
|
58
|
+
*/
|
|
59
|
+
"nextjs/no-assign-module-variable"?: TtscLintRuleSetting;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Reject `async` function bodies on React Client Components.
|
|
63
|
+
*
|
|
64
|
+
* The client-side React runtime can't await a component's render,
|
|
65
|
+
* so an `async` `"use client"` component returns a pending promise
|
|
66
|
+
* that crashes hydration; do data fetching in a Server Component
|
|
67
|
+
* or in `useEffect` instead.
|
|
68
|
+
*
|
|
69
|
+
* @reference https://nextjs.org/docs/messages/no-async-client-component
|
|
70
|
+
*/
|
|
71
|
+
"nextjs/no-async-client-component"?: TtscLintRuleSetting;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Restrict the `next/script` `strategy="beforeInteractive"` option
|
|
75
|
+
* to `pages/_document.tsx` — anywhere else, the strategy is
|
|
76
|
+
* downgraded silently.
|
|
77
|
+
*
|
|
78
|
+
* @reference https://nextjs.org/docs/messages/no-before-interactive-script-outside-document
|
|
79
|
+
*/
|
|
80
|
+
"nextjs/no-before-interactive-script-outside-document"?: TtscLintRuleSetting;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Reject raw `<link rel="stylesheet">` tags.
|
|
84
|
+
*
|
|
85
|
+
* Next.js handles CSS through its bundler — imported stylesheets,
|
|
86
|
+
* CSS Modules, or `next/font` — and manual stylesheet links skip
|
|
87
|
+
* the runtime's critical-CSS extraction and render-blocking
|
|
88
|
+
* heuristics.
|
|
89
|
+
*
|
|
90
|
+
* @reference https://nextjs.org/docs/messages/no-css-tags
|
|
91
|
+
*/
|
|
92
|
+
"nextjs/no-css-tags"?: TtscLintRuleSetting;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Restrict `next/document` imports to `pages/_document.tsx` —
|
|
96
|
+
* `Document` cannot be used in a regular page.
|
|
97
|
+
*
|
|
98
|
+
* @reference https://nextjs.org/docs/messages/no-document-import-in-page
|
|
99
|
+
*/
|
|
100
|
+
"nextjs/no-document-import-in-page"?: TtscLintRuleSetting;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Reject more than one `<Head>` element from `next/document` in
|
|
104
|
+
* `pages/_document.tsx`.
|
|
105
|
+
*
|
|
106
|
+
* Next.js merges metadata into the single `<Head>` it renders into
|
|
107
|
+
* the HTML shell; additional instances are dropped silently and
|
|
108
|
+
* any tags inside them never reach the page.
|
|
109
|
+
*
|
|
110
|
+
* @reference https://nextjs.org/docs/messages/no-duplicate-head
|
|
111
|
+
*/
|
|
112
|
+
"nextjs/no-duplicate-head"?: TtscLintRuleSetting;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Reject raw `<head>` elements outside the `app/` directory —
|
|
116
|
+
* use `next/head` or the metadata exports.
|
|
117
|
+
*
|
|
118
|
+
* @reference https://nextjs.org/docs/messages/no-head-element
|
|
119
|
+
*/
|
|
120
|
+
"nextjs/no-head-element"?: TtscLintRuleSetting;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Reject `next/head` imports inside `pages/_document.tsx` — use
|
|
124
|
+
* `next/document`'s `Head` there.
|
|
125
|
+
*
|
|
126
|
+
* @reference https://nextjs.org/docs/messages/no-head-import-in-document
|
|
127
|
+
*/
|
|
128
|
+
"nextjs/no-head-import-in-document"?: TtscLintRuleSetting;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Prefer `next/link` for internal anchors with a static `href`,
|
|
132
|
+
* since `Link` performs client-side routing.
|
|
133
|
+
*
|
|
134
|
+
* @reference https://nextjs.org/docs/messages/no-html-link-for-pages
|
|
135
|
+
*/
|
|
136
|
+
"nextjs/no-html-link-for-pages"?: TtscLintRuleSetting;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Prefer `next/image` over raw `<img>` elements so the framework
|
|
140
|
+
* can optimize the asset.
|
|
141
|
+
*
|
|
142
|
+
* @reference https://nextjs.org/docs/messages/no-img-element
|
|
143
|
+
*/
|
|
144
|
+
"nextjs/no-img-element"?: TtscLintRuleSetting;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Reject Google font `<link>` tags inside regular pages files —
|
|
148
|
+
* load fonts in `_document.tsx` (pages router) or via
|
|
149
|
+
* `next/font` (app router).
|
|
150
|
+
*
|
|
151
|
+
* @reference https://nextjs.org/docs/messages/no-page-custom-font
|
|
152
|
+
*/
|
|
153
|
+
"nextjs/no-page-custom-font"?: TtscLintRuleSetting;
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Reject `next/script` inside `next/head` — `<Script>` must
|
|
157
|
+
* appear in the JSX tree, not in `<Head>`.
|
|
158
|
+
*
|
|
159
|
+
* @reference https://nextjs.org/docs/messages/no-script-component-in-head
|
|
160
|
+
*/
|
|
161
|
+
"nextjs/no-script-component-in-head"?: TtscLintRuleSetting;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Reject styled-jsx tags inside `pages/_document.tsx`, which the
|
|
165
|
+
* server renders incorrectly.
|
|
166
|
+
*
|
|
167
|
+
* @reference https://nextjs.org/docs/messages/no-styled-jsx-in-document
|
|
168
|
+
*/
|
|
169
|
+
"nextjs/no-styled-jsx-in-document"?: TtscLintRuleSetting;
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Require `async` or `defer` on external raw `<script>` tags so
|
|
173
|
+
* loading does not block render.
|
|
174
|
+
*
|
|
175
|
+
* @reference https://nextjs.org/docs/messages/no-sync-scripts
|
|
176
|
+
*/
|
|
177
|
+
"nextjs/no-sync-scripts"?: TtscLintRuleSetting;
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Reject `<title>` inside `Head` from `next/document`. Set the
|
|
181
|
+
* title from the metadata exports instead.
|
|
182
|
+
*
|
|
183
|
+
* @reference https://nextjs.org/docs/messages/no-title-in-document-head
|
|
184
|
+
*/
|
|
185
|
+
"nextjs/no-title-in-document-head"?: TtscLintRuleSetting;
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Catch near-miss typos in Next.js data-fetching export names
|
|
189
|
+
* (`getStaticProps`, `getStaticPaths`, `getServerSideProps`).
|
|
190
|
+
*
|
|
191
|
+
* A misspelled export is treated as ordinary module state, so the
|
|
192
|
+
* page silently falls back to client-side rendering with no
|
|
193
|
+
* build-time warning.
|
|
194
|
+
*
|
|
195
|
+
* @reference https://nextjs.org/docs/messages/no-typos
|
|
196
|
+
*/
|
|
197
|
+
"nextjs/no-typos"?: TtscLintRuleSetting;
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Reject Polyfill.io script URLs — Next.js already polyfills
|
|
201
|
+
* modern browsers, and Polyfill.io has a checkered history.
|
|
202
|
+
*
|
|
203
|
+
* @reference https://nextjs.org/docs/messages/no-unwanted-polyfillio
|
|
204
|
+
*/
|
|
205
|
+
"nextjs/no-unwanted-polyfillio"?: TtscLintRuleSetting;
|
|
206
|
+
}
|