@ttsc/lint 0.13.0 → 0.14.0-dev.20250530.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 +955 -85
- package/lib/defaultFormat.d.ts +15 -8
- package/lib/defaultFormat.js +15 -8
- package/lib/defaultFormat.js.map +1 -1
- package/lib/index.d.ts +46 -0
- package/lib/index.js +60 -37
- package/lib/index.js.map +1 -1
- package/lib/structures/ITtscLintConfig.d.ts +12 -6
- 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/format/ITtscLintFormat.d.ts +128 -0
- package/lib/structures/{TtscLintRuleMap.js → format/ITtscLintFormat.js} +1 -1
- package/lib/structures/format/ITtscLintFormat.js.map +1 -0
- package/lib/structures/format/ITtscLintFormatJsDoc.d.ts +17 -0
- package/lib/structures/{ITtscLintFormatConfig.js → format/ITtscLintFormatJsDoc.js} +1 -1
- 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 +3 -4
- package/lib/structures/index.js +3 -4
- package/lib/structures/index.js.map +1 -1
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +95 -0
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +13 -0
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +75 -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 +16 -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 +1229 -0
- package/lib/structures/rules/ITtscLintCoreRules.js +3 -0
- 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 +125 -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 +154 -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 +162 -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 +190 -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 +133 -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 +294 -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 +180 -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 +312 -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 +179 -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 +49 -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 +37 -0
- package/lib/structures/rules/ITtscLintReactRuleOptions.js +11 -0
- package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -0
- package/lib/structures/rules/ITtscLintReactRules.d.ts +276 -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 +182 -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 +65 -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 +141 -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 +178 -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 +20 -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 +165 -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 +88 -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 +21 -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 +293 -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 +1074 -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 +133 -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/compile.go +33 -2
- package/linthost/config.go +118 -71
- package/linthost/config_format.go +270 -104
- package/linthost/directives.go +67 -25
- package/linthost/dispatch.go +14 -3
- package/linthost/engine.go +160 -40
- package/linthost/fix.go +10 -3
- package/linthost/flags_gen.go +17 -15
- package/linthost/format.go +222 -25
- package/linthost/format_editor_settings.go +262 -0
- package/linthost/host.go +40 -3
- package/linthost/lsp.go +898 -0
- package/linthost/print_dispatch.go +5 -2
- package/linthost/print_engine.go +5 -5
- package/linthost/print_nodes_call.go +149 -67
- package/linthost/print_nodes_function.go +27 -2
- package/linthost/print_nodes_list.go +40 -5
- package/linthost/print_nodes_object.go +1 -1
- package/linthost/print_nodes_ternary.go +86 -0
- 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 +95 -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_arrow_parens.go +167 -0
- package/linthost/rules_format_bracket_spacing.go +117 -0
- package/linthost/rules_format_clause_join.go +172 -0
- package/linthost/rules_format_declaration_header.go +595 -0
- package/linthost/rules_format_indent.go +372 -0
- package/linthost/rules_format_jsdoc.go +5 -5
- 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 +66 -55
- package/linthost/rules_format_quote_props.go +169 -0
- package/linthost/rules_format_quotes.go +76 -30
- package/linthost/rules_format_semi.go +186 -11
- package/linthost/rules_format_sort_imports.go +437 -118
- package/linthost/rules_format_statement_split.go +343 -0
- package/linthost/rules_format_ternary_nullish_parens.go +77 -0
- package/linthost/rules_format_trailing_comma.go +22 -3
- package/linthost/rules_format_whitespace.go +336 -0
- 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 +1057 -2
- 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 +159 -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 +10 -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 +17 -10
- package/src/index.ts +65 -43
- package/src/structures/ITtscLintConfig.ts +14 -8
- package/src/structures/TtscLintRuleSetting.ts +55 -0
- package/src/structures/format/ITtscLintFormat.ts +141 -0
- package/src/structures/format/ITtscLintFormatJsDoc.ts +18 -0
- package/src/structures/format/ITtscLintFormatSortImports.ts +62 -0
- package/src/structures/format/index.ts +3 -0
- package/src/structures/index.ts +3 -4
- package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +117 -0
- package/src/structures/rules/ITtscLintBoundariesRules.ts +91 -0
- package/src/structures/rules/ITtscLintContributorRules.ts +20 -0
- package/src/structures/rules/ITtscLintCoreRules.ts +1378 -0
- package/src/structures/rules/ITtscLintCypressRuleOptions.ts +18 -0
- package/src/structures/rules/ITtscLintCypressRules.ts +141 -0
- package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +200 -0
- package/src/structures/rules/ITtscLintFunctionalRules.ts +197 -0
- package/src/structures/rules/ITtscLintJestRules.ts +209 -0
- package/src/structures/rules/ITtscLintJsdocRules.ts +146 -0
- package/src/structures/rules/ITtscLintJsxA11yRules.ts +331 -0
- package/src/structures/rules/ITtscLintNextjsRules.ts +201 -0
- package/src/structures/rules/ITtscLintPlaywrightRules.ts +343 -0
- package/src/structures/rules/ITtscLintPromiseRules.ts +196 -0
- package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +19 -0
- package/src/structures/rules/ITtscLintReactPerfRules.ts +53 -0
- package/src/structures/rules/ITtscLintReactRuleOptions.ts +41 -0
- package/src/structures/rules/ITtscLintReactRules.ts +308 -0
- package/src/structures/rules/ITtscLintRegexpRules.ts +204 -0
- package/src/structures/rules/ITtscLintRuleOptionsMap.ts +88 -0
- package/src/structures/rules/ITtscLintRules.ts +77 -0
- package/src/structures/rules/ITtscLintSecurityRules.ts +155 -0
- package/src/structures/rules/ITtscLintSolidRules.ts +199 -0
- package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +22 -0
- package/src/structures/rules/ITtscLintStorybookRules.ts +184 -0
- package/src/structures/rules/ITtscLintTanstackQueryRules.ts +96 -0
- package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +23 -0
- package/src/structures/rules/ITtscLintTestingLibraryRules.ts +325 -0
- package/src/structures/rules/ITtscLintTypeScriptRules.ts +1172 -0
- package/src/structures/rules/ITtscLintUnicornRules.ts +1143 -0
- package/src/structures/rules/ITtscLintVitestRules.ts +146 -0
- package/src/structures/rules/index.ts +31 -0
- package/lib/structures/ITtscLintFormatConfig.d.ts +0 -153
- 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/ITtscLintFormatConfig.ts +0 -168
- package/src/structures/TtscLintRule.ts +0 -160
- package/src/structures/TtscLintRuleMap.ts +0 -55
- package/src/structures/TtscLintRuleOptions.ts +0 -151
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Solid TSX rules from `eslint-plugin-solid`.
|
|
5
|
+
*
|
|
6
|
+
* Solid components compile to fine-grained reactivity, so patterns that look
|
|
7
|
+
* correct in React (destructuring props, calling `useEffect`-style hooks with
|
|
8
|
+
* array deps) silently break reactivity in Solid. This family captures the
|
|
9
|
+
* common Solid-only pitfalls.
|
|
10
|
+
*
|
|
11
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid
|
|
12
|
+
*/
|
|
13
|
+
export interface ITtscLintSolidRules {
|
|
14
|
+
/**
|
|
15
|
+
* Reject early and conditional `return` from a Solid component — Solid
|
|
16
|
+
* components must return exactly once at the top level.
|
|
17
|
+
*
|
|
18
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/components-return-once.md
|
|
19
|
+
*/
|
|
20
|
+
"solid/components-return-once"?: TtscLintRuleSetting;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Require DOM event handler props to use canonical Solid casing (`onClick`,
|
|
24
|
+
* not `onclick` / `onClIcK`) so the compiler recognizes them as events. Also
|
|
25
|
+
* flags `on*`-named props bound to non-function values, which look like
|
|
26
|
+
* handlers but are not.
|
|
27
|
+
*
|
|
28
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/event-handlers.md
|
|
29
|
+
*/
|
|
30
|
+
"solid/event-handlers"?: TtscLintRuleSetting;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Route each Solid export to the correct entry point (`solid-js`,
|
|
34
|
+
* `solid-js/web`, or `solid-js/store`) and merge duplicate imports from the
|
|
35
|
+
* same entry.
|
|
36
|
+
*
|
|
37
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/imports.md
|
|
38
|
+
*/
|
|
39
|
+
"solid/imports"?: TtscLintRuleSetting;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Reject duplicate JSX props on the same Solid element. Unlike React, Solid
|
|
43
|
+
* silently keeps the first value, so the duplicate is dead code and almost
|
|
44
|
+
* always a typo.
|
|
45
|
+
*
|
|
46
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-duplicate-props.md
|
|
47
|
+
*/
|
|
48
|
+
"solid/jsx-no-duplicate-props"?: TtscLintRuleSetting;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Reject `javascript:` URLs in Solid JSX attributes (`href`, `src`, ...) —
|
|
52
|
+
* they evaluate the suffix as code in the page context and are a
|
|
53
|
+
* long-standing XSS vector.
|
|
54
|
+
*
|
|
55
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-script-url.md
|
|
56
|
+
*/
|
|
57
|
+
"solid/jsx-no-script-url"?: TtscLintRuleSetting;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Reject Solid JSX component names that are not declared or imported in
|
|
61
|
+
* scope.
|
|
62
|
+
*
|
|
63
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-undef.md
|
|
64
|
+
*/
|
|
65
|
+
"solid/jsx-no-undef"?: TtscLintRuleSetting;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Scope-marker compatibility rule (mirrors ESLint's `react/jsx-uses-vars`).
|
|
69
|
+
*
|
|
70
|
+
* The native engine emits no diagnostics for this id.
|
|
71
|
+
*
|
|
72
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-uses-vars.md
|
|
73
|
+
*/
|
|
74
|
+
"solid/jsx-uses-vars"?: TtscLintRuleSetting;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Reject array values passed as Solid event handlers — Solid does not unwrap
|
|
78
|
+
* the array form React supports.
|
|
79
|
+
*
|
|
80
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-array-handlers.md
|
|
81
|
+
*/
|
|
82
|
+
"solid/no-array-handlers"?: TtscLintRuleSetting;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Reject destructured Solid component props — destructuring breaks reactivity
|
|
86
|
+
* by reading the property eagerly.
|
|
87
|
+
*
|
|
88
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-destructure.md
|
|
89
|
+
*/
|
|
90
|
+
"solid/no-destructure"?: TtscLintRuleSetting;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Reject `innerHTML` JSX attributes because they bypass sanitization and are
|
|
94
|
+
* a common XSS sink. A static string literal is still allowed by default;
|
|
95
|
+
* flip `allowStatic` off to ban that form too.
|
|
96
|
+
*
|
|
97
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-innerhtml.md
|
|
98
|
+
*/
|
|
99
|
+
"solid/no-innerhtml"?: TtscLintRuleSetting;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Reject Solid APIs that rely on ES6 `Proxy` (including `new Proxy`,
|
|
103
|
+
* `Proxy.revocable`, imports from `solid-js/store`, and dynamic spread shapes
|
|
104
|
+
* through `mergeProps`). For shipping to runtimes without `Proxy` support;
|
|
105
|
+
* off by default.
|
|
106
|
+
*
|
|
107
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-proxy-apis.md
|
|
108
|
+
*/
|
|
109
|
+
"solid/no-proxy-apis"?: TtscLintRuleSetting;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Reject React-style dependency arrays in Solid tracked scopes
|
|
113
|
+
* (`createEffect(() => ..., [deps])`).
|
|
114
|
+
*
|
|
115
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-deps.md
|
|
116
|
+
*/
|
|
117
|
+
"solid/no-react-deps"?: TtscLintRuleSetting;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Reject React-specific JSX props such as `className` and `htmlFor` — Solid
|
|
121
|
+
* uses `class` and `for`.
|
|
122
|
+
*
|
|
123
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-specific-props.md
|
|
124
|
+
*/
|
|
125
|
+
"solid/no-react-specific-props"?: TtscLintRuleSetting;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Restrict namespaced JSX attributes (`ns:name={...}`) to the built-in Solid
|
|
129
|
+
* namespaces (`on:`, `oncapture:`, `use:`, `prop:`, `attr:`, `bool:`,
|
|
130
|
+
* `style:`, `class:`). Extra names can be allowed through the
|
|
131
|
+
* `allowedNamespaces` option.
|
|
132
|
+
*
|
|
133
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-unknown-namespaces.md
|
|
134
|
+
*/
|
|
135
|
+
"solid/no-unknown-namespaces"?: TtscLintRuleSetting;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Rewrite `class={cn({ ... })}` / `clsx(...)` / `classnames(...)` calls to
|
|
139
|
+
* the reactive `classlist={{ ... }}` prop.
|
|
140
|
+
*
|
|
141
|
+
* Deprecated and off by default upstream.
|
|
142
|
+
*
|
|
143
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-classlist.md
|
|
144
|
+
*/
|
|
145
|
+
"solid/prefer-classlist"?: TtscLintRuleSetting;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Replace inline `array.map(item => <JSX />)` with Solid's `<For>` component
|
|
149
|
+
* so the iteration stays keyed and reactive instead of re-creating every
|
|
150
|
+
* child on each update.
|
|
151
|
+
*
|
|
152
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-for.md
|
|
153
|
+
*/
|
|
154
|
+
"solid/prefer-for"?: TtscLintRuleSetting;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Rewrite `{cond && <JSX />}` short-circuits in JSX to `<Show
|
|
158
|
+
* when={cond}>...</Show>`. Stylistic only — Solid's compiler already handles
|
|
159
|
+
* the boolean form — so it is off by default.
|
|
160
|
+
*
|
|
161
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-show.md
|
|
162
|
+
*/
|
|
163
|
+
"solid/prefer-show"?: TtscLintRuleSetting;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Reject common Solid reactivity breakages — reading a signal outside a
|
|
167
|
+
* tracking scope, destructuring a `Store`, etc.
|
|
168
|
+
*
|
|
169
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/reactivity.md
|
|
170
|
+
*/
|
|
171
|
+
"solid/reactivity"?: TtscLintRuleSetting;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Collapse JSX elements with no children to the self-closing form
|
|
175
|
+
* (`<Foo></Foo>` to `<Foo />`). Configurable per component vs HTML element,
|
|
176
|
+
* including a `"void"` mode that only enforces it for void tags.
|
|
177
|
+
*
|
|
178
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/self-closing-comp.md
|
|
179
|
+
*/
|
|
180
|
+
"solid/self-closing-comp"?: TtscLintRuleSetting;
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Require `style={{...}}` keys to be valid kebab-case CSS properties
|
|
184
|
+
* (`"font-size"`, not React's `fontSize`) and dimensioned values to be
|
|
185
|
+
* strings — Solid does not append implicit `px`.
|
|
186
|
+
*
|
|
187
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/style-prop.md
|
|
188
|
+
*/
|
|
189
|
+
"solid/style-prop"?: TtscLintRuleSetting;
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Reject JSX nestings that the HTML parser would silently restructure at
|
|
193
|
+
* runtime — `<p>` cannot contain block-level children, `<a>` cannot contain
|
|
194
|
+
* another `<a>`, and `<button>` cannot contain other interactive elements.
|
|
195
|
+
*
|
|
196
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/validate-jsx-nesting.md
|
|
197
|
+
*/
|
|
198
|
+
"solid/validate-jsx-nesting"?: TtscLintRuleSetting;
|
|
199
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options shape for rules in {@link ITtscLintStorybookRules} that accept
|
|
3
|
+
* configuration. Only `storybook/no-uninstalled-addons` is configurable.
|
|
4
|
+
*
|
|
5
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/** `storybook/no-uninstalled-addons` rule options. */
|
|
9
|
+
export interface ITtscLintStorybookNoUninstalledAddonsRuleOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Explicit `package.json` path used to validate configured Storybook addons.
|
|
12
|
+
* When omitted, the rule walks upward from the linted config file.
|
|
13
|
+
*/
|
|
14
|
+
packageJsonLocation?: string;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Addon package names to skip when checking installation status.
|
|
18
|
+
*
|
|
19
|
+
* @default [ ]
|
|
20
|
+
*/
|
|
21
|
+
ignore?: readonly string[];
|
|
22
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
TtscLintRuleOptionsSetting,
|
|
3
|
+
TtscLintRuleSetting,
|
|
4
|
+
} from "../TtscLintRuleSetting";
|
|
5
|
+
import type { ITtscLintStorybookNoUninstalledAddonsRuleOptions } from "./ITtscLintStorybookRuleOptions";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Storybook CSF and configuration rules from `eslint-plugin-storybook`.
|
|
9
|
+
*
|
|
10
|
+
* Checks Component Story Format conventions (default export meta, named story
|
|
11
|
+
* exports, play-function shape) and configuration pitfalls in
|
|
12
|
+
* `.storybook/main.ts`.
|
|
13
|
+
*
|
|
14
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook
|
|
15
|
+
*/
|
|
16
|
+
export interface ITtscLintStorybookRules {
|
|
17
|
+
/**
|
|
18
|
+
* Require `await` on Storybook interaction helpers (`userEvent`, `expect`,
|
|
19
|
+
* `waitFor`, ...) inside a `play` function.
|
|
20
|
+
*
|
|
21
|
+
* The interactions addon intercepts the awaited promises to record steps, so
|
|
22
|
+
* a missing `await` skips that frame in the debugger and races the next
|
|
23
|
+
* assertion.
|
|
24
|
+
*
|
|
25
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/await-interactions.md
|
|
26
|
+
*/
|
|
27
|
+
"storybook/await-interactions"?: TtscLintRuleSetting;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Require forwarding the play-function `context` argument when invoking
|
|
31
|
+
* another story's `play` function.
|
|
32
|
+
*
|
|
33
|
+
* Storybook hangs the canvas, step tracker, and interactions addon off
|
|
34
|
+
* `context`; omitting it leaves the nested call without the runtime hooks it
|
|
35
|
+
* needs to drive the canvas.
|
|
36
|
+
*
|
|
37
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/context-in-play-function.md
|
|
38
|
+
*/
|
|
39
|
+
"storybook/context-in-play-function"?: TtscLintRuleSetting;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Require the CSF default meta object to declare a `component`.
|
|
43
|
+
*
|
|
44
|
+
* The reference unlocks Storybook's auto-generated controls, prop-table docs,
|
|
45
|
+
* and CSF3 default render — without it those features silently no-op.
|
|
46
|
+
*
|
|
47
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/csf-component.md
|
|
48
|
+
*/
|
|
49
|
+
"storybook/csf-component"?: TtscLintRuleSetting;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Require every story file to provide the CSF default export.
|
|
53
|
+
*
|
|
54
|
+
* Storybook keys all per-file configuration (title, decorators, parameters,
|
|
55
|
+
* component) off that default; files without it are skipped at indexing
|
|
56
|
+
* time.
|
|
57
|
+
*
|
|
58
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/default-exports.md
|
|
59
|
+
*/
|
|
60
|
+
"storybook/default-exports"?: TtscLintRuleSetting;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Reject the legacy `|` separator in Storybook story titles (`"Foo|Bar"`).
|
|
64
|
+
*
|
|
65
|
+
* Storybook 6 standardized on `/` for hierarchy and treats `|` as a literal
|
|
66
|
+
* character, so the title collapses into a single sidebar entry instead of
|
|
67
|
+
* nested folders.
|
|
68
|
+
*
|
|
69
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/hierarchy-separator.md
|
|
70
|
+
*/
|
|
71
|
+
"storybook/hierarchy-separator"?: TtscLintRuleSetting;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Require `title` and `args` in CSF meta to be inline literals, not
|
|
75
|
+
* references to outside variables or function calls.
|
|
76
|
+
*
|
|
77
|
+
* Storybook's indexer and upgrade codemods read these via static analysis and
|
|
78
|
+
* skip stories where the value is not literal.
|
|
79
|
+
*
|
|
80
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/meta-inline-properties.md
|
|
81
|
+
*/
|
|
82
|
+
"storybook/meta-inline-properties"?: TtscLintRuleSetting;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Require CSF meta objects to type-check with `satisfies Meta<…>` rather than
|
|
86
|
+
* a `: Meta<…>` annotation or `as` cast.
|
|
87
|
+
*
|
|
88
|
+
* `satisfies` preserves the narrowed literal types so dependent `StoryObj`
|
|
89
|
+
* declarations can infer the component's args precisely.
|
|
90
|
+
*
|
|
91
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/meta-satisfies-type.md
|
|
92
|
+
*/
|
|
93
|
+
"storybook/meta-satisfies-type"?: TtscLintRuleSetting;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Reject `name` metadata on a story when it matches Storybook's auto-derived
|
|
97
|
+
* name from the export identifier.
|
|
98
|
+
*
|
|
99
|
+
* The explicit value adds boilerplate and drifts from the export when one
|
|
100
|
+
* side is renamed without the other.
|
|
101
|
+
*
|
|
102
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-redundant-story-name.md
|
|
103
|
+
*/
|
|
104
|
+
"storybook/no-redundant-story-name"?: TtscLintRuleSetting;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Reject direct imports from Storybook renderer packages (`@storybook/react`,
|
|
108
|
+
* etc.); use the user-facing package surface.
|
|
109
|
+
*
|
|
110
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-renderer-packages.md
|
|
111
|
+
*/
|
|
112
|
+
"storybook/no-renderer-packages"?: TtscLintRuleSetting;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Reject the legacy `storiesOf(...)` builder API.
|
|
116
|
+
*
|
|
117
|
+
* Storybook 7 removed it in favour of CSF default-export metadata; remaining
|
|
118
|
+
* uses block the migration to CSF3 and the modern indexer.
|
|
119
|
+
*
|
|
120
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-stories-of.md
|
|
121
|
+
*/
|
|
122
|
+
"storybook/no-stories-of"?: TtscLintRuleSetting;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Reject the `title` property in CSF meta when the project uses Storybook's
|
|
126
|
+
* auto-title generation.
|
|
127
|
+
*
|
|
128
|
+
* CSF3 derives the title from the file path, so an explicit `title` is
|
|
129
|
+
* redundant and drifts from the on-disk layout when files are moved.
|
|
130
|
+
*
|
|
131
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-title-property-in-meta.md
|
|
132
|
+
*/
|
|
133
|
+
"storybook/no-title-property-in-meta"?: TtscLintRuleSetting;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Validate Storybook addon names against the project's dependencies, so
|
|
137
|
+
* misspelled addon ids surface at lint time.
|
|
138
|
+
*
|
|
139
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-uninstalled-addons.md
|
|
140
|
+
*/
|
|
141
|
+
"storybook/no-uninstalled-addons"?: TtscLintRuleOptionsSetting<ITtscLintStorybookNoUninstalledAddonsRuleOptions>;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Require named story exports to use PascalCase.
|
|
145
|
+
*
|
|
146
|
+
* Storybook derives the displayed story name from the export identifier and
|
|
147
|
+
* inserts spaces at case boundaries, so non-PascalCase exports render with
|
|
148
|
+
* awkward or merged labels in the sidebar.
|
|
149
|
+
*
|
|
150
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/prefer-pascal-case.md
|
|
151
|
+
*/
|
|
152
|
+
"storybook/prefer-pascal-case"?: TtscLintRuleSetting;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Require every story file to export at least one named story alongside the
|
|
156
|
+
* default meta.
|
|
157
|
+
*
|
|
158
|
+
* A file with only the default export contributes nothing to the sidebar and
|
|
159
|
+
* usually means a story was deleted but the file was not.
|
|
160
|
+
*
|
|
161
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/story-exports.md
|
|
162
|
+
*/
|
|
163
|
+
"storybook/story-exports"?: TtscLintRuleSetting;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Require `expect` to be imported from `@storybook/test` in play functions,
|
|
167
|
+
* not from Jest.
|
|
168
|
+
*
|
|
169
|
+
* The Storybook re-export is built for the browser interactions runner;
|
|
170
|
+
* Jest's `expect` ships only Node-only matchers and throws when the play
|
|
171
|
+
* function executes in a browser preview.
|
|
172
|
+
*
|
|
173
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/use-storybook-expect.md
|
|
174
|
+
*/
|
|
175
|
+
"storybook/use-storybook-expect"?: TtscLintRuleSetting;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Reject direct Testing Library imports inside story files; use the
|
|
179
|
+
* Storybook-bundled re-exports.
|
|
180
|
+
*
|
|
181
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/use-storybook-testing-library.md
|
|
182
|
+
*/
|
|
183
|
+
"storybook/use-storybook-testing-library"?: TtscLintRuleSetting;
|
|
184
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* TanStack Query rules from `@tanstack/eslint-plugin-query`.
|
|
5
|
+
*
|
|
6
|
+
* Guards the ergonomic and correctness contracts of TanStack Query (`useQuery`,
|
|
7
|
+
* `useMutation`, query-options factories) inside React TypeScript sources.
|
|
8
|
+
*
|
|
9
|
+
* @reference https://github.com/TanStack/query/tree/main/packages/eslint-plugin-query
|
|
10
|
+
*/
|
|
11
|
+
export interface ITtscLintTanstackQueryRules {
|
|
12
|
+
/**
|
|
13
|
+
* Require TanStack Query `queryKey` arrays to include every variable read by
|
|
14
|
+
* the `queryFn` body, mirroring React Hooks dependency tracking.
|
|
15
|
+
*
|
|
16
|
+
* @reference https://tanstack.com/query/latest/docs/eslint/exhaustive-deps
|
|
17
|
+
*/
|
|
18
|
+
"tanstack-query/exhaustive-deps"?: TtscLintRuleSetting;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Require `queryFn`, `getPreviousPageParam`, and `getNextPageParam` inside
|
|
22
|
+
* `useInfiniteQuery` to appear in the order TanStack Query documents.
|
|
23
|
+
*
|
|
24
|
+
* Type inference flows through these callbacks in sequence, so a reordered
|
|
25
|
+
* options object widens the page-param type to `unknown`.
|
|
26
|
+
*
|
|
27
|
+
* @reference https://tanstack.com/query/latest/docs/eslint/infinite-query-property-order
|
|
28
|
+
*/
|
|
29
|
+
"tanstack-query/infinite-query-property-order"?: TtscLintRuleSetting;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Require `useMutation` callbacks to declare `onMutate` before `onError` and
|
|
33
|
+
* `onSettled`.
|
|
34
|
+
*
|
|
35
|
+
* The options object's type inference threads the `onMutate` return value
|
|
36
|
+
* into the later callbacks' `context` parameter, which collapses to `unknown`
|
|
37
|
+
* when the order is wrong.
|
|
38
|
+
*
|
|
39
|
+
* @reference https://tanstack.com/query/latest/docs/eslint/mutation-property-order
|
|
40
|
+
*/
|
|
41
|
+
"tanstack-query/mutation-property-order"?: TtscLintRuleSetting;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Reject `...rest` destructuring on TanStack Query hook results.
|
|
45
|
+
*
|
|
46
|
+
* The result object is a tracked proxy that only re-renders for the fields
|
|
47
|
+
* you read; rest-destructuring touches every field, subscribes the component
|
|
48
|
+
* to all of them, and disables that optimization.
|
|
49
|
+
*
|
|
50
|
+
* @reference https://tanstack.com/query/latest/docs/eslint/no-rest-destructuring
|
|
51
|
+
*/
|
|
52
|
+
"tanstack-query/no-rest-destructuring"?: TtscLintRuleSetting;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Reject passing entire TanStack Query hook results into React dependency
|
|
56
|
+
* arrays.
|
|
57
|
+
*
|
|
58
|
+
* The returned object is a fresh reference on every render, so `useEffect` /
|
|
59
|
+
* `useMemo` / `useCallback` would re-run unconditionally; depend on the
|
|
60
|
+
* specific fields you read instead.
|
|
61
|
+
*
|
|
62
|
+
* @reference https://tanstack.com/query/latest/docs/eslint/no-unstable-deps
|
|
63
|
+
*/
|
|
64
|
+
"tanstack-query/no-unstable-deps"?: TtscLintRuleSetting;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Reject `queryFn` callbacks that resolve to `void`.
|
|
68
|
+
*
|
|
69
|
+
* The return value is what TanStack Query caches and exposes as `data`; a
|
|
70
|
+
* void implementation always populates the cache with `undefined` and almost
|
|
71
|
+
* always indicates a forgotten `return`.
|
|
72
|
+
*
|
|
73
|
+
* @reference https://tanstack.com/query/latest/docs/eslint/no-void-query-fn
|
|
74
|
+
*/
|
|
75
|
+
"tanstack-query/no-void-query-fn"?: TtscLintRuleSetting;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Prefer wrapping query options in the `queryOptions()` helper over inline `{
|
|
79
|
+
* queryKey, queryFn }` literals.
|
|
80
|
+
*
|
|
81
|
+
* The helper co-locates key and fetcher, lets `queryClient.getQueryData` and
|
|
82
|
+
* `setQueryData` share the same typed key, and prevents the same key being
|
|
83
|
+
* paired with two different `queryFn`s.
|
|
84
|
+
*
|
|
85
|
+
* @reference https://tanstack.com/query/latest/docs/eslint/prefer-query-options
|
|
86
|
+
*/
|
|
87
|
+
"tanstack-query/prefer-query-options"?: TtscLintRuleSetting;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Reject creating a `QueryClient` inside a React component or hook body — the
|
|
91
|
+
* client must be stable across renders.
|
|
92
|
+
*
|
|
93
|
+
* @reference https://tanstack.com/query/latest/docs/eslint/stable-query-client
|
|
94
|
+
*/
|
|
95
|
+
"tanstack-query/stable-query-client"?: TtscLintRuleSetting;
|
|
96
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options shape for the configurable rules in
|
|
3
|
+
* {@link ITtscLintTestingLibraryRules}. Only
|
|
4
|
+
* `testing-library/consistent-data-testid` accepts options today.
|
|
5
|
+
*
|
|
6
|
+
* @reference https://github.com/testing-library/eslint-plugin-testing-library
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** `testing-library/consistent-data-testid` rule options. */
|
|
10
|
+
export interface ITtscLintTestingLibraryConsistentDataTestIdRuleOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Regular expression string every configured test-id attribute value must
|
|
13
|
+
* match. `{fileName}` is replaced with the basename before the first dot.
|
|
14
|
+
*/
|
|
15
|
+
testIdPattern: string;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Test-id attribute name, or names, to validate.
|
|
19
|
+
*
|
|
20
|
+
* @default "data-testid"
|
|
21
|
+
*/
|
|
22
|
+
testIdAttribute?: string | readonly string[];
|
|
23
|
+
}
|