@ttsc/lint 0.13.0 → 0.14.0-dev.20260528
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +948 -69
- package/lib/defaultFormat.d.ts +9 -6
- package/lib/defaultFormat.js +9 -6
- package/lib/defaultFormat.js.map +1 -1
- package/lib/index.d.ts +46 -0
- package/lib/index.js +60 -37
- 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/compile.go +33 -2
- 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 +160 -40
- package/linthost/fix.go +2 -2
- package/linthost/flags_gen.go +17 -15
- package/linthost/host.go +40 -3
- 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 +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 +11 -8
- package/src/index.ts +65 -43
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscLintUnicornRules.js","sourceRoot":"","sources":["../../../src/structures/rules/ITtscLintUnicornRules.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import type { TtscLintRuleSetting } from "../TtscLintRuleSetting";
|
|
2
|
+
/**
|
|
3
|
+
* Vitest test source rules from `@vitest/eslint-plugin`.
|
|
4
|
+
*
|
|
5
|
+
* Vitest reuses much of Jest's testing surface but ships its own
|
|
6
|
+
* runner and configuration. These rules mirror the ergonomic subset
|
|
7
|
+
* of `eslint-plugin-jest` adapted for Vitest semantics — focused
|
|
8
|
+
* tests, identical titles, conditional logic, valid `expect` shape.
|
|
9
|
+
*
|
|
10
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest
|
|
11
|
+
*/
|
|
12
|
+
export interface ITtscLintVitestRules {
|
|
13
|
+
/**
|
|
14
|
+
* Require every Vitest test body to contain at least one
|
|
15
|
+
* `expect(...)` call. A test with no assertions still passes,
|
|
16
|
+
* giving a false-positive signal.
|
|
17
|
+
*
|
|
18
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/expect-expect.md
|
|
19
|
+
*/
|
|
20
|
+
"vitest/expect-expect"?: TtscLintRuleSetting;
|
|
21
|
+
/**
|
|
22
|
+
* Reject `expect(...)` calls under `if`/`try`/`catch` or other
|
|
23
|
+
* conditional branches in Vitest tests.
|
|
24
|
+
*
|
|
25
|
+
* A branch that never runs turns the assertion into a silent no-op
|
|
26
|
+
* rather than a failure.
|
|
27
|
+
*
|
|
28
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-expect.md
|
|
29
|
+
*/
|
|
30
|
+
"vitest/no-conditional-expect"?: TtscLintRuleSetting;
|
|
31
|
+
/**
|
|
32
|
+
* Reject `test(...)`/`it(...)` declarations inside loops or `if`
|
|
33
|
+
* branches.
|
|
34
|
+
*
|
|
35
|
+
* Vitest collects tests at module load, so a conditional
|
|
36
|
+
* declaration produces a different suite shape than the file
|
|
37
|
+
* appears to describe.
|
|
38
|
+
*
|
|
39
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-tests.md
|
|
40
|
+
*/
|
|
41
|
+
"vitest/no-conditional-tests"?: TtscLintRuleSetting;
|
|
42
|
+
/**
|
|
43
|
+
* Reject `test.skip`, `it.skip`, `describe.skip`, and `.todo`
|
|
44
|
+
* variants.
|
|
45
|
+
*
|
|
46
|
+
* Disabled tests rot in place and quietly drop coverage for the
|
|
47
|
+
* feature they were meant to pin.
|
|
48
|
+
*
|
|
49
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-disabled-tests.md
|
|
50
|
+
*/
|
|
51
|
+
"vitest/no-disabled-tests"?: TtscLintRuleSetting;
|
|
52
|
+
/**
|
|
53
|
+
* Reject `done` callback parameters in Vitest tests and
|
|
54
|
+
* lifecycle hooks.
|
|
55
|
+
*
|
|
56
|
+
* The callback style predates async/await and makes failure
|
|
57
|
+
* propagation easy to miss; return a Promise or mark the body
|
|
58
|
+
* `async` instead.
|
|
59
|
+
*
|
|
60
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-done-callback.md
|
|
61
|
+
*/
|
|
62
|
+
"vitest/no-done-callback"?: TtscLintRuleSetting;
|
|
63
|
+
/**
|
|
64
|
+
* Reject `test.only`, `it.only`, and `describe.only`.
|
|
65
|
+
*
|
|
66
|
+
* A focused suite silently skips the rest of the file, so a stray
|
|
67
|
+
* `.only` left from debugging hides every other test in CI.
|
|
68
|
+
*
|
|
69
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-focused-tests.md
|
|
70
|
+
*/
|
|
71
|
+
"vitest/no-focused-tests"?: TtscLintRuleSetting;
|
|
72
|
+
/**
|
|
73
|
+
* Reject duplicate Vitest test or `describe` titles within the
|
|
74
|
+
* same suite scope.
|
|
75
|
+
*
|
|
76
|
+
* The runner cannot disambiguate two siblings with identical names
|
|
77
|
+
* in its error output or filter flags.
|
|
78
|
+
*
|
|
79
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-identical-title.md
|
|
80
|
+
*/
|
|
81
|
+
"vitest/no-identical-title"?: TtscLintRuleSetting;
|
|
82
|
+
/**
|
|
83
|
+
* Reject `expect(...)` calls outside Vitest tests and hooks.
|
|
84
|
+
*
|
|
85
|
+
* Top-level assertions execute at module load before any test
|
|
86
|
+
* starts, so failures never attach to a named case.
|
|
87
|
+
*
|
|
88
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-standalone-expect.md
|
|
89
|
+
*/
|
|
90
|
+
"vitest/no-standalone-expect"?: TtscLintRuleSetting;
|
|
91
|
+
/**
|
|
92
|
+
* Reject `return` statements that return non-Promise values from
|
|
93
|
+
* a Vitest test callback.
|
|
94
|
+
*
|
|
95
|
+
* The runner ignores the value and following code is dead, which
|
|
96
|
+
* usually masks a missing `await` or stray early-exit.
|
|
97
|
+
*
|
|
98
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-test-return-statement.md
|
|
99
|
+
*/
|
|
100
|
+
"vitest/no-test-return-statement"?: TtscLintRuleSetting;
|
|
101
|
+
/**
|
|
102
|
+
* Prefer `expect(value).toHaveLength(n)` over asserting on
|
|
103
|
+
* `value.length` with `toBe`.
|
|
104
|
+
*
|
|
105
|
+
* The dedicated matcher reports the actual length on failure
|
|
106
|
+
* instead of a bare number mismatch.
|
|
107
|
+
*
|
|
108
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-have-length.md
|
|
109
|
+
*/
|
|
110
|
+
"vitest/prefer-to-have-length"?: TtscLintRuleSetting;
|
|
111
|
+
/**
|
|
112
|
+
* Validate the shape of Vitest `describe` callbacks.
|
|
113
|
+
*
|
|
114
|
+
* The callback must be synchronous and take no arguments — the
|
|
115
|
+
* runner ignores returned Promises and `done`-style parameters at
|
|
116
|
+
* the describe level.
|
|
117
|
+
*
|
|
118
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-describe-callback.md
|
|
119
|
+
*/
|
|
120
|
+
"vitest/valid-describe-callback"?: TtscLintRuleSetting;
|
|
121
|
+
/**
|
|
122
|
+
* Validate `expect(...)` arity and matcher chaining: exactly one
|
|
123
|
+
* argument, terminated by a matcher call, and async matchers
|
|
124
|
+
* properly awaited.
|
|
125
|
+
*
|
|
126
|
+
* Malformed expects either throw at runtime or pass without
|
|
127
|
+
* asserting anything.
|
|
128
|
+
*
|
|
129
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-expect.md
|
|
130
|
+
*/
|
|
131
|
+
"vitest/valid-expect"?: TtscLintRuleSetting;
|
|
132
|
+
/**
|
|
133
|
+
* Require non-empty static Vitest test and `describe` titles.
|
|
134
|
+
*
|
|
135
|
+
* Empty or dynamically-built titles produce unreadable failure
|
|
136
|
+
* output and break filter-by-name flags.
|
|
137
|
+
*
|
|
138
|
+
* @reference https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-title.md
|
|
139
|
+
*/
|
|
140
|
+
"vitest/valid-title"?: TtscLintRuleSetting;
|
|
141
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ITtscLintVitestRules.js","sourceRoot":"","sources":["../../../src/structures/rules/ITtscLintVitestRules.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export * from "./ITtscLintBoundariesRuleOptions";
|
|
2
|
+
export * from "./ITtscLintBoundariesRules";
|
|
3
|
+
export * from "./ITtscLintContributorRules";
|
|
4
|
+
export * from "./ITtscLintCoreRules";
|
|
5
|
+
export * from "./ITtscLintCypressRuleOptions";
|
|
6
|
+
export * from "./ITtscLintCypressRules";
|
|
7
|
+
export * from "./ITtscLintFunctionalRuleOptions";
|
|
8
|
+
export * from "./ITtscLintFunctionalRules";
|
|
9
|
+
export * from "./ITtscLintJestRules";
|
|
10
|
+
export * from "./ITtscLintJsdocRules";
|
|
11
|
+
export * from "./ITtscLintJsxA11yRules";
|
|
12
|
+
export * from "./ITtscLintNextjsRules";
|
|
13
|
+
export * from "./ITtscLintPlaywrightRules";
|
|
14
|
+
export * from "./ITtscLintPromiseRules";
|
|
15
|
+
export * from "./ITtscLintReactPerfRuleOptions";
|
|
16
|
+
export * from "./ITtscLintReactPerfRules";
|
|
17
|
+
export * from "./ITtscLintReactRuleOptions";
|
|
18
|
+
export * from "./ITtscLintReactRules";
|
|
19
|
+
export * from "./ITtscLintRegexpRules";
|
|
20
|
+
export * from "./ITtscLintRuleOptionsMap";
|
|
21
|
+
export * from "./ITtscLintRules";
|
|
22
|
+
export * from "./ITtscLintSecurityRules";
|
|
23
|
+
export * from "./ITtscLintSolidRules";
|
|
24
|
+
export * from "./ITtscLintStorybookRuleOptions";
|
|
25
|
+
export * from "./ITtscLintStorybookRules";
|
|
26
|
+
export * from "./ITtscLintTanstackQueryRules";
|
|
27
|
+
export * from "./ITtscLintTestingLibraryRuleOptions";
|
|
28
|
+
export * from "./ITtscLintTestingLibraryRules";
|
|
29
|
+
export * from "./ITtscLintTypeScriptRules";
|
|
30
|
+
export * from "./ITtscLintUnicornRules";
|
|
31
|
+
export * from "./ITtscLintVitestRules";
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./ITtscLintBoundariesRuleOptions"), exports);
|
|
18
|
+
__exportStar(require("./ITtscLintBoundariesRules"), exports);
|
|
19
|
+
__exportStar(require("./ITtscLintContributorRules"), exports);
|
|
20
|
+
__exportStar(require("./ITtscLintCoreRules"), exports);
|
|
21
|
+
__exportStar(require("./ITtscLintCypressRuleOptions"), exports);
|
|
22
|
+
__exportStar(require("./ITtscLintCypressRules"), exports);
|
|
23
|
+
__exportStar(require("./ITtscLintFunctionalRuleOptions"), exports);
|
|
24
|
+
__exportStar(require("./ITtscLintFunctionalRules"), exports);
|
|
25
|
+
__exportStar(require("./ITtscLintJestRules"), exports);
|
|
26
|
+
__exportStar(require("./ITtscLintJsdocRules"), exports);
|
|
27
|
+
__exportStar(require("./ITtscLintJsxA11yRules"), exports);
|
|
28
|
+
__exportStar(require("./ITtscLintNextjsRules"), exports);
|
|
29
|
+
__exportStar(require("./ITtscLintPlaywrightRules"), exports);
|
|
30
|
+
__exportStar(require("./ITtscLintPromiseRules"), exports);
|
|
31
|
+
__exportStar(require("./ITtscLintReactPerfRuleOptions"), exports);
|
|
32
|
+
__exportStar(require("./ITtscLintReactPerfRules"), exports);
|
|
33
|
+
__exportStar(require("./ITtscLintReactRuleOptions"), exports);
|
|
34
|
+
__exportStar(require("./ITtscLintReactRules"), exports);
|
|
35
|
+
__exportStar(require("./ITtscLintRegexpRules"), exports);
|
|
36
|
+
__exportStar(require("./ITtscLintRuleOptionsMap"), exports);
|
|
37
|
+
__exportStar(require("./ITtscLintRules"), exports);
|
|
38
|
+
__exportStar(require("./ITtscLintSecurityRules"), exports);
|
|
39
|
+
__exportStar(require("./ITtscLintSolidRules"), exports);
|
|
40
|
+
__exportStar(require("./ITtscLintStorybookRuleOptions"), exports);
|
|
41
|
+
__exportStar(require("./ITtscLintStorybookRules"), exports);
|
|
42
|
+
__exportStar(require("./ITtscLintTanstackQueryRules"), exports);
|
|
43
|
+
__exportStar(require("./ITtscLintTestingLibraryRuleOptions"), exports);
|
|
44
|
+
__exportStar(require("./ITtscLintTestingLibraryRules"), exports);
|
|
45
|
+
__exportStar(require("./ITtscLintTypeScriptRules"), exports);
|
|
46
|
+
__exportStar(require("./ITtscLintUnicornRules"), exports);
|
|
47
|
+
__exportStar(require("./ITtscLintVitestRules"), exports);
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/structures/rules/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mEAAiD;AACjD,6DAA2C;AAC3C,8DAA4C;AAC5C,uDAAqC;AACrC,gEAA8C;AAC9C,0DAAwC;AACxC,mEAAiD;AACjD,6DAA2C;AAC3C,uDAAqC;AACrC,wDAAsC;AACtC,0DAAwC;AACxC,yDAAuC;AACvC,6DAA2C;AAC3C,0DAAwC;AACxC,kEAAgD;AAChD,4DAA0C;AAC1C,8DAA4C;AAC5C,wDAAsC;AACtC,yDAAuC;AACvC,4DAA0C;AAC1C,mDAAiC;AACjC,2DAAyC;AACzC,wDAAsC;AACtC,kEAAgD;AAChD,4DAA0C;AAC1C,gEAA8C;AAC9C,uEAAqD;AACrD,iEAA+C;AAC/C,6DAA2C;AAC3C,0DAAwC;AACxC,yDAAuC"}
|
package/linthost/ast_helpers.go
CHANGED
|
@@ -269,15 +269,40 @@ func stringLiteralText(node *shimast.Node) string {
|
|
|
269
269
|
}
|
|
270
270
|
|
|
271
271
|
// walkDescendants visits node and every child below it, depth-first.
|
|
272
|
+
//
|
|
273
|
+
// The naive recursive shape `node.ForEachChild(func(child) bool {
|
|
274
|
+
// walkDescendants(child, visit); return false })` allocates one
|
|
275
|
+
// closure per recursive call (the inner func captures `visit` and
|
|
276
|
+
// the outer function reference), so a subtree of N nodes costs N
|
|
277
|
+
// closure allocations. The struct walker below caches the
|
|
278
|
+
// `ForEachChild` callback as a method value bound once to the
|
|
279
|
+
// walker, dropping that cost to one allocation per `walkDescendants`
|
|
280
|
+
// call regardless of subtree size.
|
|
272
281
|
func walkDescendants(node *shimast.Node, visit func(*shimast.Node)) {
|
|
273
282
|
if node == nil {
|
|
274
283
|
return
|
|
275
284
|
}
|
|
276
|
-
visit
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
285
|
+
w := &descendantsWalker{visit: visit}
|
|
286
|
+
w.childCB = w.visitChild
|
|
287
|
+
w.walk(node)
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
type descendantsWalker struct {
|
|
291
|
+
visit func(*shimast.Node)
|
|
292
|
+
childCB func(*shimast.Node) bool
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
func (w *descendantsWalker) walk(node *shimast.Node) {
|
|
296
|
+
if node == nil {
|
|
297
|
+
return
|
|
298
|
+
}
|
|
299
|
+
w.visit(node)
|
|
300
|
+
node.ForEachChild(w.childCB)
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
func (w *descendantsWalker) visitChild(child *shimast.Node) bool {
|
|
304
|
+
w.walk(child)
|
|
305
|
+
return false
|
|
281
306
|
}
|
|
282
307
|
|
|
283
308
|
// assignmentTargetNames collects the identifier names written by an
|
package/linthost/compile.go
CHANGED
|
@@ -21,6 +21,7 @@ import (
|
|
|
21
21
|
"os"
|
|
22
22
|
"path/filepath"
|
|
23
23
|
"strings"
|
|
24
|
+
"time"
|
|
24
25
|
|
|
25
26
|
shimast "github.com/microsoft/typescript-go/shim/ast"
|
|
26
27
|
shimcompiler "github.com/microsoft/typescript-go/shim/compiler"
|
|
@@ -63,6 +64,8 @@ func RunTransform(args []string) int {
|
|
|
63
64
|
singleThreaded := fs.Bool("singleThreaded", false, "run TypeScript-Go single-threaded")
|
|
64
65
|
checkers := fs.Int("checkers", 0, "type-checker pool size (0 = TypeScript-Go default)")
|
|
65
66
|
tsgoArgsRaw := fs.String("tsgo-args", "", "JSON array of forwarded tsgo CLI flags")
|
|
67
|
+
_ = fs.Bool("diagnostics", false, "print @ttsc/lint diagnostics timing")
|
|
68
|
+
_ = fs.Bool("extendedDiagnostics", false, "print @ttsc/lint diagnostics timing")
|
|
66
69
|
if err := fs.Parse(filterKnownFlags(args, LintFlagAllowList)); err != nil {
|
|
67
70
|
return 2
|
|
68
71
|
}
|
|
@@ -171,6 +174,7 @@ type subcommandOpts struct {
|
|
|
171
174
|
noEmit bool
|
|
172
175
|
quiet bool
|
|
173
176
|
verbose bool
|
|
177
|
+
diagnostics bool
|
|
174
178
|
outDir string
|
|
175
179
|
singleThreaded bool
|
|
176
180
|
checkers int
|
|
@@ -190,6 +194,8 @@ func parseSubcommandFlags(name string, args []string) (*subcommandOpts, error) {
|
|
|
190
194
|
noEmit := fs.Bool("noEmit", false, "")
|
|
191
195
|
quiet := fs.Bool("quiet", false, "")
|
|
192
196
|
verbose := fs.Bool("verbose", false, "")
|
|
197
|
+
diagnostics := fs.Bool("diagnostics", false, "")
|
|
198
|
+
extendedDiagnostics := fs.Bool("extendedDiagnostics", false, "")
|
|
193
199
|
outDir := fs.String("outDir", "", "")
|
|
194
200
|
singleThreaded := fs.Bool("singleThreaded", false, "")
|
|
195
201
|
checkers := fs.Int("checkers", 0, "")
|
|
@@ -216,6 +222,7 @@ func parseSubcommandFlags(name string, args []string) (*subcommandOpts, error) {
|
|
|
216
222
|
noEmit: *noEmit,
|
|
217
223
|
quiet: *quiet,
|
|
218
224
|
verbose: *verbose,
|
|
225
|
+
diagnostics: *diagnostics || *extendedDiagnostics,
|
|
219
226
|
outDir: *outDir,
|
|
220
227
|
singleThreaded: *singleThreaded,
|
|
221
228
|
checkers: *checkers,
|
|
@@ -268,11 +275,12 @@ func runProject(opts *subcommandOpts) int {
|
|
|
268
275
|
}
|
|
269
276
|
defer prog.close()
|
|
270
277
|
|
|
271
|
-
astDiags, lintDiags, err :=
|
|
278
|
+
astDiags, lintDiags, diagnosticsTiming, err := collectDiagnosticsTimed(prog, engine)
|
|
272
279
|
if err != nil {
|
|
273
280
|
fmt.Fprintln(os.Stderr, err)
|
|
274
281
|
return 2
|
|
275
282
|
}
|
|
283
|
+
printLintDiagnosticsTiming(os.Stdout, opts.diagnostics, diagnosticsTiming)
|
|
276
284
|
warnUnknownRules(os.Stderr, engine.UnknownRules())
|
|
277
285
|
if errCount := shimdw.FormatMixedDiagnostics(os.Stderr, astDiags, lintDiags, opts.cwd); errCount > 0 {
|
|
278
286
|
return 2
|
|
@@ -373,9 +381,21 @@ func filterKnownFlags(args []string, known map[string]bool) []string {
|
|
|
373
381
|
// engine's findings. The renderer takes the two slices and walks them in
|
|
374
382
|
// source order, so we don't need to interleave here.
|
|
375
383
|
func collectDiagnostics(prog *program, engine *Engine) ([]*shimast.Diagnostic, []*shimdw.LintDiagnostic, error) {
|
|
384
|
+
astDiags, lintDiags, _, err := collectDiagnosticsTimed(prog, engine)
|
|
385
|
+
return astDiags, lintDiags, err
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
type lintDiagnosticsTiming struct {
|
|
389
|
+
lint time.Duration
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
func collectDiagnosticsTimed(prog *program, engine *Engine) ([]*shimast.Diagnostic, []*shimdw.LintDiagnostic, lintDiagnosticsTiming, error) {
|
|
393
|
+
timing := lintDiagnosticsTiming{}
|
|
376
394
|
astDiags := prog.programDiagnostics()
|
|
377
395
|
files := prog.userSourceFiles()
|
|
396
|
+
lintStarted := time.Now()
|
|
378
397
|
findings := engine.Run(files, prog.checker)
|
|
398
|
+
timing.lint = time.Since(lintStarted)
|
|
379
399
|
nativeDiags := make([]*shimdw.LintDiagnostic, 0, len(findings))
|
|
380
400
|
for _, finding := range findings {
|
|
381
401
|
category := shimdw.LintCategoryError
|
|
@@ -391,7 +411,18 @@ func collectDiagnostics(prog *program, engine *Engine) ([]*shimast.Diagnostic, [
|
|
|
391
411
|
fmt.Sprintf("[%s] %s", finding.Rule, finding.Message),
|
|
392
412
|
))
|
|
393
413
|
}
|
|
394
|
-
return astDiags, nativeDiags, nil
|
|
414
|
+
return astDiags, nativeDiags, timing, nil
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
func printLintDiagnosticsTiming(w io.Writer, enabled bool, timing lintDiagnosticsTiming) {
|
|
418
|
+
if !enabled {
|
|
419
|
+
return
|
|
420
|
+
}
|
|
421
|
+
fmt.Fprintf(w, "@ttsc/lint time: %s\n", formatTimingSeconds(timing.lint))
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
func formatTimingSeconds(duration time.Duration) string {
|
|
425
|
+
return fmt.Sprintf("%.3fs", duration.Seconds())
|
|
395
426
|
}
|
|
396
427
|
|
|
397
428
|
// RuleCode hashes a rule name into a stable, positive int32 so the
|
package/linthost/config.go
CHANGED
|
@@ -125,13 +125,13 @@ type RuleResolver interface {
|
|
|
125
125
|
// ResolveRules implements RuleResolver. A flat RuleConfig has no glob scoping,
|
|
126
126
|
// so every file receives the full map unchanged.
|
|
127
127
|
func (c RuleConfig) ResolveRules(string) ResolvedRuleConfig {
|
|
128
|
-
return ResolvedRuleConfig{Rules: c}
|
|
128
|
+
return ResolvedRuleConfig{Rules: normalizeRuleConfigKeys(c)}
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
// ActiveRuleNames implements RuleResolver. Returns rule names whose severity
|
|
132
132
|
// is not SeverityOff, sorted for deterministic engine dispatch-table construction.
|
|
133
133
|
func (c RuleConfig) ActiveRuleNames() []string {
|
|
134
|
-
return sortedRuleNames(c, func(sev Severity) bool { return sev != SeverityOff })
|
|
134
|
+
return sortedRuleNames(normalizeRuleConfigKeys(c), func(sev Severity) bool { return sev != SeverityOff })
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
// EnabledRuleConfig implements RuleResolver. Returns a copy containing only the
|
|
@@ -140,7 +140,7 @@ func (c RuleConfig) EnabledRuleConfig() RuleConfig {
|
|
|
140
140
|
out := RuleConfig{}
|
|
141
141
|
for name, sev := range c {
|
|
142
142
|
if sev != SeverityOff {
|
|
143
|
-
out[name] = sev
|
|
143
|
+
out[normalizeExternalRuleName(name)] = sev
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
return out
|
|
@@ -151,6 +151,17 @@ func (c RuleConfig) EnabledRuleConfig() RuleConfig {
|
|
|
151
151
|
// predate option support.
|
|
152
152
|
func (RuleConfig) RuleOptions(string) json.RawMessage { return nil }
|
|
153
153
|
|
|
154
|
+
func normalizeRuleConfigKeys(c RuleConfig) RuleConfig {
|
|
155
|
+
if len(c) == 0 {
|
|
156
|
+
return c
|
|
157
|
+
}
|
|
158
|
+
out := RuleConfig{}
|
|
159
|
+
for name, sev := range c {
|
|
160
|
+
out[normalizeExternalRuleName(name)] = sev
|
|
161
|
+
}
|
|
162
|
+
return out
|
|
163
|
+
}
|
|
164
|
+
|
|
154
165
|
// InlineRuleResolver pairs a severity map with an options map. The fields
|
|
155
166
|
// are public so tests can construct one without going through
|
|
156
167
|
// ParseRulesWithOptions.
|
|
@@ -162,7 +173,7 @@ type InlineRuleResolver struct {
|
|
|
162
173
|
// ResolveRules implements RuleResolver. Inline rules have no glob scoping;
|
|
163
174
|
// the full map applies to every file.
|
|
164
175
|
func (r InlineRuleResolver) ResolveRules(string) ResolvedRuleConfig {
|
|
165
|
-
return ResolvedRuleConfig{Rules: r.Rules}
|
|
176
|
+
return ResolvedRuleConfig{Rules: normalizeRuleConfigKeys(r.Rules)}
|
|
166
177
|
}
|
|
167
178
|
|
|
168
179
|
// ActiveRuleNames implements RuleResolver by delegating to the inner RuleConfig.
|
|
@@ -182,7 +193,14 @@ func (r InlineRuleResolver) RuleOptions(name string) json.RawMessage {
|
|
|
182
193
|
if r.Options == nil {
|
|
183
194
|
return nil
|
|
184
195
|
}
|
|
185
|
-
|
|
196
|
+
if raw := r.Options[name]; len(raw) > 0 {
|
|
197
|
+
return raw
|
|
198
|
+
}
|
|
199
|
+
canonical := normalizeExternalRuleName(name)
|
|
200
|
+
if raw := r.Options[canonical]; len(raw) > 0 {
|
|
201
|
+
return raw
|
|
202
|
+
}
|
|
203
|
+
return nil
|
|
186
204
|
}
|
|
187
205
|
|
|
188
206
|
// ConfigStore holds the parsed representation of a lint config file. It
|
|
@@ -210,7 +228,14 @@ func (s *ConfigStore) RuleOptions(name string) json.RawMessage {
|
|
|
210
228
|
if s == nil {
|
|
211
229
|
return nil
|
|
212
230
|
}
|
|
213
|
-
|
|
231
|
+
if raw := s.options[name]; len(raw) > 0 {
|
|
232
|
+
return raw
|
|
233
|
+
}
|
|
234
|
+
canonical := normalizeExternalRuleName(name)
|
|
235
|
+
if raw := s.options[canonical]; len(raw) > 0 {
|
|
236
|
+
return raw
|
|
237
|
+
}
|
|
238
|
+
return nil
|
|
214
239
|
}
|
|
215
240
|
|
|
216
241
|
// ConfigEntry is the parsed form of one config file in the extends chain.
|
|
@@ -245,7 +270,7 @@ func (s *ConfigStore) ResolveRules(fileName string) ResolvedRuleConfig {
|
|
|
245
270
|
continue
|
|
246
271
|
}
|
|
247
272
|
for name, sev := range entry.Rules {
|
|
248
|
-
out[name] = sev
|
|
273
|
+
out[normalizeExternalRuleName(name)] = sev
|
|
249
274
|
}
|
|
250
275
|
}
|
|
251
276
|
return ResolvedRuleConfig{Rules: out}
|
|
@@ -266,7 +291,7 @@ func (s *ConfigStore) ActiveRuleNames() []string {
|
|
|
266
291
|
}
|
|
267
292
|
for name, sev := range entry.Rules {
|
|
268
293
|
if sev != SeverityOff {
|
|
269
|
-
active[name] = sev
|
|
294
|
+
active[normalizeExternalRuleName(name)] = sev
|
|
270
295
|
}
|
|
271
296
|
}
|
|
272
297
|
}
|
|
@@ -289,8 +314,9 @@ func (s *ConfigStore) EnabledRuleConfig() RuleConfig {
|
|
|
289
314
|
if sev == SeverityOff {
|
|
290
315
|
continue
|
|
291
316
|
}
|
|
292
|
-
|
|
293
|
-
|
|
317
|
+
canonical := normalizeExternalRuleName(name)
|
|
318
|
+
if out[canonical] != SeverityError {
|
|
319
|
+
out[canonical] = sev
|
|
294
320
|
}
|
|
295
321
|
}
|
|
296
322
|
}
|
|
@@ -310,7 +336,7 @@ func (s *ConfigStore) Flatten() RuleConfig {
|
|
|
310
336
|
continue
|
|
311
337
|
}
|
|
312
338
|
for name, sev := range entry.Rules {
|
|
313
|
-
out[name] = sev
|
|
339
|
+
out[normalizeExternalRuleName(name)] = sev
|
|
314
340
|
}
|
|
315
341
|
}
|
|
316
342
|
return out
|
|
@@ -649,12 +675,10 @@ func rejectUnknownConfigKeys(value map[string]any, path string) error {
|
|
|
649
675
|
return nil
|
|
650
676
|
}
|
|
651
677
|
|
|
652
|
-
// normalizeExternalRuleName strips
|
|
653
|
-
//
|
|
654
|
-
// bare "no-explicit-any" key both resolve to the same engine-internal name.
|
|
678
|
+
// normalizeExternalRuleName strips standard TypeScript-ESLint namespaces while
|
|
679
|
+
// preserving @ttsc/lint's canonical kebab/slash rule IDs.
|
|
655
680
|
func normalizeExternalRuleName(name string) string {
|
|
656
|
-
|
|
657
|
-
return strings.TrimPrefix(name, "typescript-eslint/")
|
|
681
|
+
return normalizeBuiltinRuleName(name)
|
|
658
682
|
}
|
|
659
683
|
|
|
660
684
|
// parsePatternList coerces a raw config value to a string slice for use as a
|
|
@@ -1704,5 +1728,12 @@ func (c RuleConfig) Severity(name string) Severity {
|
|
|
1704
1728
|
if c == nil {
|
|
1705
1729
|
return SeverityOff
|
|
1706
1730
|
}
|
|
1707
|
-
|
|
1731
|
+
if sev, ok := c[name]; ok {
|
|
1732
|
+
return sev
|
|
1733
|
+
}
|
|
1734
|
+
canonical := normalizeExternalRuleName(name)
|
|
1735
|
+
if sev, ok := c[canonical]; ok {
|
|
1736
|
+
return sev
|
|
1737
|
+
}
|
|
1738
|
+
return SeverityOff
|
|
1708
1739
|
}
|
|
@@ -47,7 +47,7 @@ func expandFormatBlock(raw map[string]any) (map[string]any, error) {
|
|
|
47
47
|
}
|
|
48
48
|
out := map[string]any{}
|
|
49
49
|
|
|
50
|
-
//
|
|
50
|
+
// formatSemi
|
|
51
51
|
semiPrefer := "always"
|
|
52
52
|
if v, ok := raw["semi"]; ok {
|
|
53
53
|
b, err := asBool("format.semi", v)
|
|
@@ -60,7 +60,7 @@ func expandFormatBlock(raw map[string]any) (map[string]any, error) {
|
|
|
60
60
|
}
|
|
61
61
|
out["format/semi"] = ruleEntry(map[string]any{"prefer": semiPrefer})
|
|
62
62
|
|
|
63
|
-
//
|
|
63
|
+
// formatQuotes
|
|
64
64
|
quotesPrefer := "double"
|
|
65
65
|
if v, ok := raw["singleQuote"]; ok {
|
|
66
66
|
b, err := asBool("format.singleQuote", v)
|
|
@@ -73,7 +73,7 @@ func expandFormatBlock(raw map[string]any) (map[string]any, error) {
|
|
|
73
73
|
}
|
|
74
74
|
out["format/quotes"] = ruleEntry(map[string]any{"prefer": quotesPrefer})
|
|
75
75
|
|
|
76
|
-
//
|
|
76
|
+
// formatTrailingComma
|
|
77
77
|
tcMode := "all"
|
|
78
78
|
if v, ok := raw["trailingComma"]; ok {
|
|
79
79
|
s, err := asString("format.trailingComma", v)
|
|
@@ -89,7 +89,7 @@ func expandFormatBlock(raw map[string]any) (map[string]any, error) {
|
|
|
89
89
|
}
|
|
90
90
|
out["format/trailing-comma"] = ruleEntry(map[string]any{"mode": tcMode})
|
|
91
91
|
|
|
92
|
-
//
|
|
92
|
+
// formatPrintWidth
|
|
93
93
|
//
|
|
94
94
|
// `trailingComma` is mirrored into the print-width rule's options so
|
|
95
95
|
// the printer's broken-list reflow emits the same trailing-comma
|
|
@@ -137,7 +137,7 @@ func expandFormatBlock(raw map[string]any) (map[string]any, error) {
|
|
|
137
137
|
}
|
|
138
138
|
out["format/print-width"] = ruleEntry(pwOpts)
|
|
139
139
|
|
|
140
|
-
//
|
|
140
|
+
// formatSortImports — opt-in by `importOrder`.
|
|
141
141
|
if v, ok := raw["importOrder"]; ok {
|
|
142
142
|
siOpts := map[string]any{}
|
|
143
143
|
order, err := asStringSlice("format.importOrder", v)
|
|
@@ -145,7 +145,7 @@ func expandFormatBlock(raw map[string]any) (map[string]any, error) {
|
|
|
145
145
|
return nil, err
|
|
146
146
|
}
|
|
147
147
|
if len(order) == 0 {
|
|
148
|
-
return nil, fmt.Errorf("@ttsc/lint: format.importOrder must contain at least one entry; omit the field to keep
|
|
148
|
+
return nil, fmt.Errorf("@ttsc/lint: format.importOrder must contain at least one entry; omit the field to keep formatSortImports off")
|
|
149
149
|
}
|
|
150
150
|
siOpts["importOrder"] = order
|
|
151
151
|
if x, ok := raw["importOrderSeparation"]; ok {
|
|
@@ -172,7 +172,7 @@ func expandFormatBlock(raw map[string]any) (map[string]any, error) {
|
|
|
172
172
|
out["format/sort-imports"] = ruleEntry(siOpts)
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
//
|
|
175
|
+
// formatJsdoc — opt-in by `jsdoc` truthy (boolean or object).
|
|
176
176
|
if v, ok := raw["jsdoc"]; ok && v != nil {
|
|
177
177
|
jdOpts := map[string]any{}
|
|
178
178
|
enabled := false
|
|
@@ -314,7 +314,7 @@ func asStringSlice(field string, v any) ([]string, error) {
|
|
|
314
314
|
|
|
315
315
|
// rejectUnknownFormatKeys surfaces typos in top-level format-block
|
|
316
316
|
// keys at the boundary rather than silently ignoring them. The
|
|
317
|
-
// key set mirrors `
|
|
317
|
+
// key set mirrors `ITtscLintFormat` exactly.
|
|
318
318
|
func rejectUnknownFormatKeys(raw map[string]any) error {
|
|
319
319
|
allowed := map[string]struct{}{
|
|
320
320
|
"severity": {},
|
|
@@ -333,7 +333,7 @@ func rejectUnknownFormatKeys(raw map[string]any) error {
|
|
|
333
333
|
}
|
|
334
334
|
for key := range raw {
|
|
335
335
|
if _, ok := allowed[key]; !ok {
|
|
336
|
-
return fmt.Errorf("@ttsc/lint: format unknown key %q; see
|
|
336
|
+
return fmt.Errorf("@ttsc/lint: format unknown key %q; see ITtscLintFormat for the allowed surface", key)
|
|
337
337
|
}
|
|
338
338
|
}
|
|
339
339
|
return nil
|