@ttsc/lint 0.13.1 → 0.14.0-dev.20260528.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 +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,77 @@
|
|
|
1
|
+
import type { ITtscLintBoundariesRules } from "./ITtscLintBoundariesRules";
|
|
2
|
+
import type { ITtscLintContributorRules } from "./ITtscLintContributorRules";
|
|
3
|
+
import type { ITtscLintCoreRules } from "./ITtscLintCoreRules";
|
|
4
|
+
import type { ITtscLintCypressRules } from "./ITtscLintCypressRules";
|
|
5
|
+
import type { ITtscLintFunctionalRules } from "./ITtscLintFunctionalRules";
|
|
6
|
+
import type { ITtscLintJestRules } from "./ITtscLintJestRules";
|
|
7
|
+
import type { ITtscLintJsdocRules } from "./ITtscLintJsdocRules";
|
|
8
|
+
import type { ITtscLintJsxA11yRules } from "./ITtscLintJsxA11yRules";
|
|
9
|
+
import type { ITtscLintNextjsRules } from "./ITtscLintNextjsRules";
|
|
10
|
+
import type { ITtscLintPlaywrightRules } from "./ITtscLintPlaywrightRules";
|
|
11
|
+
import type { ITtscLintPromiseRules } from "./ITtscLintPromiseRules";
|
|
12
|
+
import type { ITtscLintReactPerfRules } from "./ITtscLintReactPerfRules";
|
|
13
|
+
import type { ITtscLintReactRules } from "./ITtscLintReactRules";
|
|
14
|
+
import type { ITtscLintRegexpRules } from "./ITtscLintRegexpRules";
|
|
15
|
+
import type { ITtscLintSecurityRules } from "./ITtscLintSecurityRules";
|
|
16
|
+
import type { ITtscLintSolidRules } from "./ITtscLintSolidRules";
|
|
17
|
+
import type { ITtscLintStorybookRules } from "./ITtscLintStorybookRules";
|
|
18
|
+
import type { ITtscLintTanstackQueryRules } from "./ITtscLintTanstackQueryRules";
|
|
19
|
+
import type { ITtscLintTestingLibraryRules } from "./ITtscLintTestingLibraryRules";
|
|
20
|
+
import type { ITtscLintTypeScriptRules } from "./ITtscLintTypeScriptRules";
|
|
21
|
+
import type { ITtscLintUnicornRules } from "./ITtscLintUnicornRules";
|
|
22
|
+
import type { ITtscLintVitestRules } from "./ITtscLintVitestRules";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Rule severity map accepted by `ITtscLintConfig.rules`.
|
|
26
|
+
*
|
|
27
|
+
* Built-in rule families are exposed as separate interfaces under this
|
|
28
|
+
* directory so users can import a narrow family type when composing configs.
|
|
29
|
+
* `ITtscLintRules` is the intersection of every built-in family plus the
|
|
30
|
+
* open-ended contributor plugin signature.
|
|
31
|
+
*
|
|
32
|
+
* Rule id conventions:
|
|
33
|
+
*
|
|
34
|
+
* - Bare kebab-case ids (`eqeqeq`, `no-console`) belong to
|
|
35
|
+
* {@link ITtscLintCoreRules} — generic ESLint-compatible rules that apply to
|
|
36
|
+
* both JS and TS source.
|
|
37
|
+
* - `typescript/*` ids belong to {@link ITtscLintTypeScriptRules} —
|
|
38
|
+
* TypeScript-only and `@typescript-eslint` plugin rules. `@ttsc/lint` does
|
|
39
|
+
* not accept legacy bare names or `@typescript-eslint/*` aliases for these
|
|
40
|
+
* rules.
|
|
41
|
+
* - `react/*` ids in {@link ITtscLintReactRules} bundle `eslint-plugin-react`,
|
|
42
|
+
* `eslint-plugin-react-hooks`, and `eslint-plugin-react-refresh`.
|
|
43
|
+
* Performance-only React rules live separately in
|
|
44
|
+
* {@link ITtscLintReactPerfRules} because they are opt-in toggles rather than
|
|
45
|
+
* correctness checks (matching Oxlint).
|
|
46
|
+
* - Every other namespaced id (`boundaries/*`, `cypress/*`, `functional/*`, ...)
|
|
47
|
+
* is a built-in family with a matching interface in this directory.
|
|
48
|
+
* - Formatter behavior is **not** configured here. Use the top-level `format`
|
|
49
|
+
* block (typed as `ITtscLintFormat`); `format/*` is an internal
|
|
50
|
+
* implementation detail of `ttsc format` and is deliberately absent from the
|
|
51
|
+
* public rules surface.
|
|
52
|
+
* - Any other `"<namespace>/<rule>"` key is accepted via
|
|
53
|
+
* {@link ITtscLintContributorRules} so plugin-shipped rules compose cleanly
|
|
54
|
+
* without ambient module augmentation.
|
|
55
|
+
*/
|
|
56
|
+
export type ITtscLintRules = ITtscLintCoreRules &
|
|
57
|
+
ITtscLintTypeScriptRules &
|
|
58
|
+
ITtscLintBoundariesRules &
|
|
59
|
+
ITtscLintCypressRules &
|
|
60
|
+
ITtscLintFunctionalRules &
|
|
61
|
+
ITtscLintJestRules &
|
|
62
|
+
ITtscLintJsdocRules &
|
|
63
|
+
ITtscLintJsxA11yRules &
|
|
64
|
+
ITtscLintNextjsRules &
|
|
65
|
+
ITtscLintPlaywrightRules &
|
|
66
|
+
ITtscLintPromiseRules &
|
|
67
|
+
ITtscLintReactRules &
|
|
68
|
+
ITtscLintReactPerfRules &
|
|
69
|
+
ITtscLintRegexpRules &
|
|
70
|
+
ITtscLintSecurityRules &
|
|
71
|
+
ITtscLintSolidRules &
|
|
72
|
+
ITtscLintStorybookRules &
|
|
73
|
+
ITtscLintTanstackQueryRules &
|
|
74
|
+
ITtscLintTestingLibraryRules &
|
|
75
|
+
ITtscLintUnicornRules &
|
|
76
|
+
ITtscLintVitestRules &
|
|
77
|
+
ITtscLintContributorRules;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Security-focused TypeScript source rules from
|
|
5
|
+
* `eslint-plugin-security`.
|
|
6
|
+
*
|
|
7
|
+
* Reports likely security smells — non-literal sinks for eval, file
|
|
8
|
+
* I/O, regex construction, child-process spawning, cryptographic
|
|
9
|
+
* primitives — that warrant human review even if no exploit is
|
|
10
|
+
* statically provable.
|
|
11
|
+
*
|
|
12
|
+
* Treat findings as *hints*, not proofs.
|
|
13
|
+
*
|
|
14
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security
|
|
15
|
+
*/
|
|
16
|
+
export interface ITtscLintSecurityRules {
|
|
17
|
+
/**
|
|
18
|
+
* Detect Trojan-Source bidi control characters (U+202A, U+202E,
|
|
19
|
+
* ...) hidden inside source.
|
|
20
|
+
*
|
|
21
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-bidi-characters.md
|
|
22
|
+
*/
|
|
23
|
+
"security/detect-bidi-characters"?: TtscLintRuleSetting;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Detect Buffer reads/writes called with `noAssert = true`, which
|
|
27
|
+
* skips Node's offset/length bounds checks.
|
|
28
|
+
*
|
|
29
|
+
* The flag lets the offset slide past the buffer end and read
|
|
30
|
+
* unrelated memory, so production code should never set it.
|
|
31
|
+
*
|
|
32
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-buffer-noassert.md
|
|
33
|
+
*/
|
|
34
|
+
"security/detect-buffer-noassert"?: TtscLintRuleSetting;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Detect any import of `child_process` and any `exec`/`execSync`
|
|
38
|
+
* call whose command argument is not a string literal.
|
|
39
|
+
*
|
|
40
|
+
* Non-literal commands are the canonical shell-injection sink in
|
|
41
|
+
* Node services.
|
|
42
|
+
*
|
|
43
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-child-process.md
|
|
44
|
+
*/
|
|
45
|
+
"security/detect-child-process"?: TtscLintRuleSetting;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Detect assignments setting `escapeMarkup = false` (or the
|
|
49
|
+
* equivalent option on Handlebars/Mustache-style engines), which
|
|
50
|
+
* turns off HTML entity escaping in template output.
|
|
51
|
+
*
|
|
52
|
+
* Result: an unguarded XSS sink for caller-controlled strings.
|
|
53
|
+
*
|
|
54
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-disable-mustache-escape.md
|
|
55
|
+
*/
|
|
56
|
+
"security/detect-disable-mustache-escape"?: TtscLintRuleSetting;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Detect `eval(...)` calls whose argument is not a string literal.
|
|
60
|
+
*
|
|
61
|
+
* Any expression argument means caller-controlled data can reach a
|
|
62
|
+
* code-execution sink. The rule flags the call shape, not proven
|
|
63
|
+
* taint.
|
|
64
|
+
*
|
|
65
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-eval-with-expression.md
|
|
66
|
+
*/
|
|
67
|
+
"security/detect-eval-with-expression"?: TtscLintRuleSetting;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Detect `new Buffer(input)` constructions with non-literal
|
|
71
|
+
* input — historical source of allocation-disclosure bugs.
|
|
72
|
+
*
|
|
73
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-new-buffer.md
|
|
74
|
+
*/
|
|
75
|
+
"security/detect-new-buffer"?: TtscLintRuleSetting;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Detect Express applications mounting `csrf` middleware before
|
|
79
|
+
* `methodOverride`, which lets the CSRF token be bypassed.
|
|
80
|
+
*
|
|
81
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-no-csrf-before-method-override.md
|
|
82
|
+
*/
|
|
83
|
+
"security/detect-no-csrf-before-method-override"?: TtscLintRuleSetting;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Detect `fs` calls (`readFile`, `writeFile`, `createReadStream`,
|
|
87
|
+
* ...) whose filename argument is not a string literal.
|
|
88
|
+
*
|
|
89
|
+
* Dynamic filenames are the standard path-traversal sink; sanitise
|
|
90
|
+
* or allow-list before the call.
|
|
91
|
+
*
|
|
92
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-non-literal-fs-filename.md
|
|
93
|
+
*/
|
|
94
|
+
"security/detect-non-literal-fs-filename"?: TtscLintRuleSetting;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Detect `new RegExp(...)` construction whose pattern argument is
|
|
98
|
+
* not a string literal.
|
|
99
|
+
*
|
|
100
|
+
* Caller-controlled patterns can both trigger catastrophic
|
|
101
|
+
* backtracking and let an attacker reshape the matcher to bypass
|
|
102
|
+
* intended validation.
|
|
103
|
+
*
|
|
104
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-non-literal-regexp.md
|
|
105
|
+
*/
|
|
106
|
+
"security/detect-non-literal-regexp"?: TtscLintRuleSetting;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Detect `require(...)` calls whose specifier is computed at
|
|
110
|
+
* runtime.
|
|
111
|
+
*
|
|
112
|
+
* A dynamic specifier lets caller-controlled data choose the module
|
|
113
|
+
* to load, bypassing any module allow-list on Node.
|
|
114
|
+
*
|
|
115
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-non-literal-require.md
|
|
116
|
+
*/
|
|
117
|
+
"security/detect-non-literal-require"?: TtscLintRuleSetting;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Detect dynamic bracket-access such as `obj[req.body.x] = ...`,
|
|
121
|
+
* which can let caller-controlled keys overwrite prototype-shaped
|
|
122
|
+
* properties or pull out unintended fields.
|
|
123
|
+
*
|
|
124
|
+
* Fires on virtually any computed property access; expect a high
|
|
125
|
+
* false-positive rate in normal application code.
|
|
126
|
+
*
|
|
127
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-object-injection.md
|
|
128
|
+
*/
|
|
129
|
+
"security/detect-object-injection"?: TtscLintRuleSetting;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Detect direct equality comparisons involving secret-like
|
|
133
|
+
* identifiers (`if (token === expected)`) — use
|
|
134
|
+
* `crypto.timingSafeEqual` instead.
|
|
135
|
+
*
|
|
136
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-possible-timing-attacks.md
|
|
137
|
+
*/
|
|
138
|
+
"security/detect-possible-timing-attacks"?: TtscLintRuleSetting;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Detect `crypto.pseudoRandomBytes`, which produces values that
|
|
142
|
+
* are not cryptographically secure.
|
|
143
|
+
*
|
|
144
|
+
* Tokens, session ids, and key material must use
|
|
145
|
+
* `crypto.randomBytes` (or Web Crypto's `getRandomValues`) instead.
|
|
146
|
+
*
|
|
147
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-pseudoRandomBytes.md
|
|
148
|
+
*/
|
|
149
|
+
"security/detect-pseudoRandomBytes"?: TtscLintRuleSetting;
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Detect regex literals with catastrophic backtracking potential
|
|
153
|
+
* (ReDoS) — typically nested or overlapping quantifiers over the
|
|
154
|
+
* same character set.
|
|
155
|
+
*
|
|
156
|
+
* Matching caller-controlled input against such a pattern can
|
|
157
|
+
* block the event loop for seconds.
|
|
158
|
+
*
|
|
159
|
+
* @reference https://github.com/eslint-community/eslint-plugin-security/blob/main/docs/rules/detect-unsafe-regex.md
|
|
160
|
+
*/
|
|
161
|
+
"security/detect-unsafe-regex"?: TtscLintRuleSetting;
|
|
162
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
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
|
|
7
|
+
* that look correct in React (destructuring props, calling
|
|
8
|
+
* `useEffect`-style hooks with array deps) silently break reactivity
|
|
9
|
+
* in Solid. This family captures the 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
|
|
16
|
+
* — Solid 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
|
|
24
|
+
* (`onClick`, not `onclick` / `onClIcK`) so the compiler recognizes
|
|
25
|
+
* them as events. Also flags `on*`-named props bound to non-function
|
|
26
|
+
* values, which look like 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
|
|
35
|
+
* from the 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
|
|
43
|
+
* React, Solid silently keeps the first value, so the duplicate is
|
|
44
|
+
* dead code and almost 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
|
|
53
|
+
* are a 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
|
|
61
|
+
* imported in 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
|
|
69
|
+
* `react/jsx-uses-vars`).
|
|
70
|
+
*
|
|
71
|
+
* The native engine emits no diagnostics for this id.
|
|
72
|
+
*
|
|
73
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-uses-vars.md
|
|
74
|
+
*/
|
|
75
|
+
"solid/jsx-uses-vars"?: TtscLintRuleSetting;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Reject array values passed as Solid event handlers — Solid
|
|
79
|
+
* does not unwrap the array form React supports.
|
|
80
|
+
*
|
|
81
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-array-handlers.md
|
|
82
|
+
*/
|
|
83
|
+
"solid/no-array-handlers"?: TtscLintRuleSetting;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Reject destructured Solid component props — destructuring breaks
|
|
87
|
+
* reactivity by reading the property eagerly.
|
|
88
|
+
*
|
|
89
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-destructure.md
|
|
90
|
+
*/
|
|
91
|
+
"solid/no-destructure"?: TtscLintRuleSetting;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Reject `innerHTML` JSX attributes because they bypass sanitization
|
|
95
|
+
* and are a common XSS sink. A static string literal is still
|
|
96
|
+
* allowed by default; flip `allowStatic` off to ban that form too.
|
|
97
|
+
*
|
|
98
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-innerhtml.md
|
|
99
|
+
*/
|
|
100
|
+
"solid/no-innerhtml"?: TtscLintRuleSetting;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Reject Solid APIs that rely on ES6 `Proxy` (including `new Proxy`,
|
|
104
|
+
* `Proxy.revocable`, imports from `solid-js/store`, and dynamic
|
|
105
|
+
* spread shapes through `mergeProps`). For shipping to runtimes
|
|
106
|
+
* without `Proxy` support; off by default.
|
|
107
|
+
*
|
|
108
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-proxy-apis.md
|
|
109
|
+
*/
|
|
110
|
+
"solid/no-proxy-apis"?: TtscLintRuleSetting;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Reject React-style dependency arrays in Solid tracked scopes
|
|
114
|
+
* (`createEffect(() => ..., [deps])`).
|
|
115
|
+
*
|
|
116
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-deps.md
|
|
117
|
+
*/
|
|
118
|
+
"solid/no-react-deps"?: TtscLintRuleSetting;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Reject React-specific JSX props such as `className` and
|
|
122
|
+
* `htmlFor` — Solid uses `class` and `for`.
|
|
123
|
+
*
|
|
124
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-specific-props.md
|
|
125
|
+
*/
|
|
126
|
+
"solid/no-react-specific-props"?: TtscLintRuleSetting;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Restrict namespaced JSX attributes (`ns:name={...}`) to the
|
|
130
|
+
* built-in Solid namespaces (`on:`, `oncapture:`, `use:`, `prop:`,
|
|
131
|
+
* `attr:`, `bool:`, `style:`, `class:`). Extra names can be allowed
|
|
132
|
+
* through the `allowedNamespaces` option.
|
|
133
|
+
*
|
|
134
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-unknown-namespaces.md
|
|
135
|
+
*/
|
|
136
|
+
"solid/no-unknown-namespaces"?: TtscLintRuleSetting;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Rewrite `class={cn({ ... })}` / `clsx(...)` / `classnames(...)`
|
|
140
|
+
* calls to the reactive `classlist={{ ... }}` prop.
|
|
141
|
+
*
|
|
142
|
+
* Deprecated and off by default upstream.
|
|
143
|
+
*
|
|
144
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-classlist.md
|
|
145
|
+
*/
|
|
146
|
+
"solid/prefer-classlist"?: TtscLintRuleSetting;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Replace inline `array.map(item => <JSX />)` with Solid's `<For>`
|
|
150
|
+
* component so the iteration stays keyed and reactive instead of
|
|
151
|
+
* re-creating every child on each update.
|
|
152
|
+
*
|
|
153
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-for.md
|
|
154
|
+
*/
|
|
155
|
+
"solid/prefer-for"?: TtscLintRuleSetting;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Rewrite `{cond && <JSX />}` short-circuits in JSX to `<Show
|
|
159
|
+
* when={cond}>...</Show>`. Stylistic only — Solid's compiler
|
|
160
|
+
* already handles the boolean form — so it is off by default.
|
|
161
|
+
*
|
|
162
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-show.md
|
|
163
|
+
*/
|
|
164
|
+
"solid/prefer-show"?: TtscLintRuleSetting;
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Reject common Solid reactivity breakages — reading a signal
|
|
168
|
+
* outside a tracking scope, destructuring a `Store`, etc.
|
|
169
|
+
*
|
|
170
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/reactivity.md
|
|
171
|
+
*/
|
|
172
|
+
"solid/reactivity"?: TtscLintRuleSetting;
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Collapse JSX elements with no children to the self-closing form
|
|
176
|
+
* (`<Foo></Foo>` to `<Foo />`). Configurable per component vs HTML
|
|
177
|
+
* element, including a `"void"` mode that only enforces it for void
|
|
178
|
+
* tags.
|
|
179
|
+
*
|
|
180
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/self-closing-comp.md
|
|
181
|
+
*/
|
|
182
|
+
"solid/self-closing-comp"?: TtscLintRuleSetting;
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Require `style={{...}}` keys to be valid kebab-case CSS properties
|
|
186
|
+
* (`"font-size"`, not React's `fontSize`) and dimensioned values to
|
|
187
|
+
* be strings — Solid does not append implicit `px`.
|
|
188
|
+
*
|
|
189
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/style-prop.md
|
|
190
|
+
*/
|
|
191
|
+
"solid/style-prop"?: TtscLintRuleSetting;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Reject JSX nestings that the HTML parser would silently restructure
|
|
195
|
+
* at runtime — `<p>` cannot contain block-level children, `<a>` cannot
|
|
196
|
+
* contain another `<a>`, and `<button>` cannot contain other
|
|
197
|
+
* interactive elements.
|
|
198
|
+
*
|
|
199
|
+
* @reference https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/validate-jsx-nesting.md
|
|
200
|
+
*/
|
|
201
|
+
"solid/validate-jsx-nesting"?: TtscLintRuleSetting;
|
|
202
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
|
12
|
+
* addons. When omitted, the rule walks upward from the linted config
|
|
13
|
+
* file.
|
|
14
|
+
*/
|
|
15
|
+
packageJsonLocation?: string;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Addon package names to skip when checking installation status.
|
|
19
|
+
*
|
|
20
|
+
* @default []
|
|
21
|
+
*/
|
|
22
|
+
ignore?: readonly string[];
|
|
23
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import type { ITtscLintStorybookNoUninstalledAddonsRuleOptions } from "./ITtscLintStorybookRuleOptions";
|
|
2
|
+
import type {
|
|
3
|
+
TtscLintRuleOptionsSetting,
|
|
4
|
+
TtscLintRuleSetting,
|
|
5
|
+
} from "../TtscLintRuleSetting";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Storybook CSF and configuration rules from
|
|
9
|
+
* `eslint-plugin-storybook`.
|
|
10
|
+
*
|
|
11
|
+
* Checks Component Story Format conventions (default export meta,
|
|
12
|
+
* named story exports, play-function shape) and configuration
|
|
13
|
+
* pitfalls in `.storybook/main.ts`.
|
|
14
|
+
*
|
|
15
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook
|
|
16
|
+
*/
|
|
17
|
+
export interface ITtscLintStorybookRules {
|
|
18
|
+
/**
|
|
19
|
+
* Require `await` on Storybook interaction helpers (`userEvent`,
|
|
20
|
+
* `expect`, `waitFor`, ...) inside a `play` function.
|
|
21
|
+
*
|
|
22
|
+
* The interactions addon intercepts the awaited promises to record
|
|
23
|
+
* steps, so a missing `await` skips that frame in the debugger and
|
|
24
|
+
* races the next assertion.
|
|
25
|
+
*
|
|
26
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/await-interactions.md
|
|
27
|
+
*/
|
|
28
|
+
"storybook/await-interactions"?: TtscLintRuleSetting;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Require forwarding the play-function `context` argument when
|
|
32
|
+
* invoking another story's `play` function.
|
|
33
|
+
*
|
|
34
|
+
* Storybook hangs the canvas, step tracker, and interactions addon
|
|
35
|
+
* off `context`; omitting it leaves the nested call without the
|
|
36
|
+
* runtime hooks it needs to drive the canvas.
|
|
37
|
+
*
|
|
38
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/context-in-play-function.md
|
|
39
|
+
*/
|
|
40
|
+
"storybook/context-in-play-function"?: TtscLintRuleSetting;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Require the CSF default meta object to declare a `component`.
|
|
44
|
+
*
|
|
45
|
+
* The reference unlocks Storybook's auto-generated controls,
|
|
46
|
+
* prop-table docs, and CSF3 default render — without it those
|
|
47
|
+
* features silently no-op.
|
|
48
|
+
*
|
|
49
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/csf-component.md
|
|
50
|
+
*/
|
|
51
|
+
"storybook/csf-component"?: TtscLintRuleSetting;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Require every story file to provide the CSF default export.
|
|
55
|
+
*
|
|
56
|
+
* Storybook keys all per-file configuration (title, decorators,
|
|
57
|
+
* parameters, component) off that default; files without it are
|
|
58
|
+
* skipped at indexing time.
|
|
59
|
+
*
|
|
60
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/default-exports.md
|
|
61
|
+
*/
|
|
62
|
+
"storybook/default-exports"?: TtscLintRuleSetting;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Reject the legacy `|` separator in Storybook story titles
|
|
66
|
+
* (`"Foo|Bar"`).
|
|
67
|
+
*
|
|
68
|
+
* Storybook 6 standardized on `/` for hierarchy and treats `|` as
|
|
69
|
+
* a literal character, so the title collapses into a single
|
|
70
|
+
* sidebar entry instead of nested folders.
|
|
71
|
+
*
|
|
72
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/hierarchy-separator.md
|
|
73
|
+
*/
|
|
74
|
+
"storybook/hierarchy-separator"?: TtscLintRuleSetting;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Require `title` and `args` in CSF meta to be inline literals,
|
|
78
|
+
* not references to outside variables or function calls.
|
|
79
|
+
*
|
|
80
|
+
* Storybook's indexer and upgrade codemods read these via static
|
|
81
|
+
* analysis and skip stories where the value is not literal.
|
|
82
|
+
*
|
|
83
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/meta-inline-properties.md
|
|
84
|
+
*/
|
|
85
|
+
"storybook/meta-inline-properties"?: TtscLintRuleSetting;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Require CSF meta objects to type-check with `satisfies Meta<…>`
|
|
89
|
+
* rather than a `: Meta<…>` annotation or `as` cast.
|
|
90
|
+
*
|
|
91
|
+
* `satisfies` preserves the narrowed literal types so dependent
|
|
92
|
+
* `StoryObj` declarations can infer the component's args
|
|
93
|
+
* precisely.
|
|
94
|
+
*
|
|
95
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/meta-satisfies-type.md
|
|
96
|
+
*/
|
|
97
|
+
"storybook/meta-satisfies-type"?: TtscLintRuleSetting;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Reject `name` metadata on a story when it matches Storybook's
|
|
101
|
+
* auto-derived name from the export identifier.
|
|
102
|
+
*
|
|
103
|
+
* The explicit value adds boilerplate and drifts from the export
|
|
104
|
+
* when one side is renamed without the other.
|
|
105
|
+
*
|
|
106
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-redundant-story-name.md
|
|
107
|
+
*/
|
|
108
|
+
"storybook/no-redundant-story-name"?: TtscLintRuleSetting;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Reject direct imports from Storybook renderer packages
|
|
112
|
+
* (`@storybook/react`, etc.); use the user-facing package
|
|
113
|
+
* surface.
|
|
114
|
+
*
|
|
115
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-renderer-packages.md
|
|
116
|
+
*/
|
|
117
|
+
"storybook/no-renderer-packages"?: TtscLintRuleSetting;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Reject the legacy `storiesOf(...)` builder API.
|
|
121
|
+
*
|
|
122
|
+
* Storybook 7 removed it in favour of CSF default-export metadata;
|
|
123
|
+
* remaining uses block the migration to CSF3 and the modern
|
|
124
|
+
* indexer.
|
|
125
|
+
*
|
|
126
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-stories-of.md
|
|
127
|
+
*/
|
|
128
|
+
"storybook/no-stories-of"?: TtscLintRuleSetting;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Reject the `title` property in CSF meta when the project uses
|
|
132
|
+
* Storybook's auto-title generation.
|
|
133
|
+
*
|
|
134
|
+
* CSF3 derives the title from the file path, so an explicit
|
|
135
|
+
* `title` is redundant and drifts from the on-disk layout when
|
|
136
|
+
* files are moved.
|
|
137
|
+
*
|
|
138
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-title-property-in-meta.md
|
|
139
|
+
*/
|
|
140
|
+
"storybook/no-title-property-in-meta"?: TtscLintRuleSetting;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Validate Storybook addon names against the project's
|
|
144
|
+
* dependencies, so misspelled addon ids surface at lint time.
|
|
145
|
+
*
|
|
146
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/no-uninstalled-addons.md
|
|
147
|
+
*/
|
|
148
|
+
"storybook/no-uninstalled-addons"?: TtscLintRuleOptionsSetting<ITtscLintStorybookNoUninstalledAddonsRuleOptions>;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Require named story exports to use PascalCase.
|
|
152
|
+
*
|
|
153
|
+
* Storybook derives the displayed story name from the export
|
|
154
|
+
* identifier and inserts spaces at case boundaries, so
|
|
155
|
+
* non-PascalCase exports render with awkward or merged labels in
|
|
156
|
+
* the sidebar.
|
|
157
|
+
*
|
|
158
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/prefer-pascal-case.md
|
|
159
|
+
*/
|
|
160
|
+
"storybook/prefer-pascal-case"?: TtscLintRuleSetting;
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Require every story file to export at least one named story
|
|
164
|
+
* alongside the default meta.
|
|
165
|
+
*
|
|
166
|
+
* A file with only the default export contributes nothing to the
|
|
167
|
+
* sidebar and usually means a story was deleted but the file was
|
|
168
|
+
* not.
|
|
169
|
+
*
|
|
170
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/story-exports.md
|
|
171
|
+
*/
|
|
172
|
+
"storybook/story-exports"?: TtscLintRuleSetting;
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Require `expect` to be imported from `@storybook/test` in play
|
|
176
|
+
* functions, not from Jest.
|
|
177
|
+
*
|
|
178
|
+
* The Storybook re-export is built for the browser interactions
|
|
179
|
+
* runner; Jest's `expect` ships only Node-only matchers and throws
|
|
180
|
+
* when the play function executes in a browser preview.
|
|
181
|
+
*
|
|
182
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/use-storybook-expect.md
|
|
183
|
+
*/
|
|
184
|
+
"storybook/use-storybook-expect"?: TtscLintRuleSetting;
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Reject direct Testing Library imports inside story files;
|
|
188
|
+
* use the Storybook-bundled re-exports.
|
|
189
|
+
*
|
|
190
|
+
* @reference https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/use-storybook-testing-library.md
|
|
191
|
+
*/
|
|
192
|
+
"storybook/use-storybook-testing-library"?: TtscLintRuleSetting;
|
|
193
|
+
}
|