@ttsc/lint 0.14.0-dev.20260529.1 → 0.14.0
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 +85 -87
- package/lib/defaultFormat.d.ts +10 -6
- package/lib/defaultFormat.js +10 -6
- package/lib/defaultFormat.js.map +1 -1
- package/lib/structures/ITtscLintConfig.d.ts +5 -5
- package/lib/structures/TtscLintRuleSetting.d.ts +19 -19
- package/lib/structures/{ITtscLintFormat.d.ts → format/ITtscLintFormat.d.ts} +45 -70
- package/lib/structures/format/ITtscLintFormat.js.map +1 -0
- package/lib/structures/format/ITtscLintFormatJsDoc.d.ts +15 -0
- package/lib/structures/format/ITtscLintFormatJsDoc.js +3 -0
- package/lib/structures/format/ITtscLintFormatJsDoc.js.map +1 -0
- package/lib/structures/format/ITtscLintFormatSortImports.d.ts +54 -0
- package/lib/structures/format/ITtscLintFormatSortImports.js +3 -0
- package/lib/structures/format/ITtscLintFormatSortImports.js.map +1 -0
- package/lib/structures/format/index.d.ts +3 -0
- package/lib/structures/format/index.js +20 -0
- package/lib/structures/format/index.js.map +1 -0
- package/lib/structures/index.d.ts +1 -1
- package/lib/structures/index.js +1 -1
- package/lib/structures/index.js.map +1 -1
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +18 -27
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +4 -5
- package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -1
- package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +29 -33
- package/lib/structures/rules/ITtscLintContributorRules.d.ts +6 -7
- package/lib/structures/rules/ITtscLintCoreRules.d.ts +380 -408
- package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +5 -5
- package/lib/structures/rules/ITtscLintCypressRuleOptions.js +2 -2
- package/lib/structures/rules/ITtscLintCypressRules.d.ts +34 -38
- package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +21 -24
- package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js +2 -2
- package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +51 -56
- package/lib/structures/rules/ITtscLintJestRules.d.ts +63 -74
- package/lib/structures/rules/ITtscLintJsdocRules.d.ts +47 -54
- package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +94 -102
- package/lib/structures/rules/ITtscLintNextjsRules.d.ts +50 -55
- package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +104 -122
- package/lib/structures/rules/ITtscLintPromiseRules.d.ts +62 -71
- package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +4 -4
- package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +17 -19
- package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +8 -10
- package/lib/structures/rules/ITtscLintReactRuleOptions.js +1 -2
- package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -1
- package/lib/structures/rules/ITtscLintReactRules.d.ts +91 -104
- package/lib/structures/rules/ITtscLintRegexpRules.d.ts +46 -54
- package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +7 -8
- package/lib/structures/rules/ITtscLintSecurityRules.d.ts +45 -52
- package/lib/structures/rules/ITtscLintSolidRules.d.ts +53 -56
- package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +3 -4
- package/lib/structures/rules/ITtscLintStorybookRules.d.ts +60 -69
- package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +31 -37
- package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +2 -3
- package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +102 -119
- package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +460 -518
- package/lib/structures/rules/ITtscLintVitestRules.d.ts +43 -51
- package/linthost/config.go +89 -72
- package/linthost/config_format.go +265 -99
- package/linthost/directives.go +5 -1
- package/linthost/display_width.go +72 -0
- package/linthost/fix.go +26 -1
- package/linthost/format.go +222 -25
- package/linthost/format_editor_settings.go +262 -0
- package/linthost/lsp.go +8 -4
- package/linthost/print_dispatch.go +3 -0
- package/linthost/print_doc.go +13 -0
- package/linthost/print_engine.go +68 -11
- package/linthost/print_nodes_array.go +108 -5
- package/linthost/print_nodes_call.go +515 -74
- package/linthost/print_nodes_function.go +25 -0
- package/linthost/print_nodes_imports.go +47 -14
- package/linthost/print_nodes_list.go +191 -8
- package/linthost/print_nodes_object.go +12 -6
- package/linthost/print_nodes_ternary.go +106 -0
- package/linthost/rules_boundaries.go +400 -400
- package/linthost/rules_camelcase.go +81 -81
- package/linthost/rules_complexity.go +52 -51
- package/linthost/rules_consistent_return.go +81 -81
- package/linthost/rules_core_extra.go +472 -472
- package/linthost/rules_curly.go +43 -43
- package/linthost/rules_default_case.go +15 -15
- package/linthost/rules_default_case_last.go +22 -22
- package/linthost/rules_format_arrow_parens.go +167 -0
- package/linthost/rules_format_bracket_spacing.go +117 -0
- package/linthost/rules_format_clause_join.go +172 -0
- package/linthost/rules_format_declaration_header.go +664 -0
- package/linthost/rules_format_indent.go +616 -0
- package/linthost/rules_format_jsdoc.go +4 -4
- package/linthost/rules_format_orphan_semi.go +106 -0
- package/linthost/rules_format_parameter_properties.go +175 -0
- package/linthost/rules_format_print_width.go +185 -69
- package/linthost/rules_format_quote_props.go +169 -0
- package/linthost/rules_format_quotes.go +75 -29
- package/linthost/rules_format_semi.go +185 -10
- package/linthost/rules_format_sort_imports.go +456 -121
- package/linthost/rules_format_statement_split.go +368 -0
- package/linthost/rules_format_ternary_nullish_parens.go +77 -0
- package/linthost/rules_format_trailing_comma.go +21 -2
- package/linthost/rules_format_whitespace.go +336 -0
- package/linthost/rules_functional.go +688 -688
- package/linthost/rules_gap.go +146 -11
- package/linthost/rules_grouped_accessor_pairs.go +60 -60
- package/linthost/rules_guard_for_in.go +122 -122
- package/linthost/rules_id_length.go +44 -44
- package/linthost/rules_imports.go +11 -3
- package/linthost/rules_init_declarations.go +25 -25
- package/linthost/rules_jsx_a11y.go +844 -844
- package/linthost/rules_max_classes_per_file.go +24 -24
- package/linthost/rules_max_depth.go +43 -43
- package/linthost/rules_max_lines.go +53 -53
- package/linthost/rules_max_lines_per_function.go +28 -28
- package/linthost/rules_max_nested_callbacks.go +26 -26
- package/linthost/rules_max_params.go +20 -20
- package/linthost/rules_max_statements.go +29 -29
- package/linthost/rules_nextjs.go +5 -5
- package/linthost/rules_no_else_return.go +38 -38
- package/linthost/rules_no_empty_named_blocks.go +45 -45
- package/linthost/rules_no_import_assign.go +96 -96
- package/linthost/rules_no_invalid_this.go +19 -19
- package/linthost/rules_no_loop_func.go +43 -43
- package/linthost/rules_no_magic_numbers.go +60 -60
- package/linthost/rules_no_mixed_operators.go +44 -44
- package/linthost/rules_no_param_reassign.go +64 -64
- package/linthost/rules_no_restricted_imports.go +45 -45
- package/linthost/rules_no_restricted_syntax.go +17 -17
- package/linthost/rules_no_shadow.go +112 -112
- package/linthost/rules_no_unreachable.go +36 -36
- package/linthost/rules_no_useless_assignment.go +79 -79
- package/linthost/rules_no_useless_constructor.go +167 -167
- package/linthost/rules_no_useless_return.go +28 -28
- package/linthost/rules_prefer_arrow_callback.go +74 -74
- package/linthost/rules_prefer_destructuring.go +61 -61
- package/linthost/rules_prefer_named_capture_group.go +87 -87
- package/linthost/rules_prefer_rest_params.go +61 -61
- package/linthost/rules_promise.go +800 -800
- package/linthost/rules_react.go +600 -600
- package/linthost/rules_react_extras.go +162 -162
- package/linthost/rules_react_hooks.go +2 -2
- package/linthost/rules_react_perf.go +231 -231
- package/linthost/rules_regexp.go +293 -293
- package/linthost/rules_security.go +613 -613
- package/linthost/rules_sort_imports.go +37 -37
- package/linthost/rules_sort_keys.go +88 -88
- package/linthost/rules_suggestions.go +13 -0
- package/linthost/rules_ts.go +2 -2
- package/linthost/rules_ts_async.go +247 -247
- package/linthost/rules_ts_class_literal_property_style.go +64 -64
- package/linthost/rules_ts_consistent_type_exports.go +209 -209
- package/linthost/rules_ts_explicit_function_return_type.go +35 -35
- package/linthost/rules_ts_extra.go +6 -2
- package/linthost/rules_ts_no_base_to_string.go +140 -140
- package/linthost/rules_ts_no_confusing_void.go +28 -28
- package/linthost/rules_ts_no_deprecated.go +110 -110
- package/linthost/rules_ts_no_for_in_array.go +45 -45
- package/linthost/rules_ts_no_magic_numbers.go +67 -67
- package/linthost/rules_ts_no_meaningless_void_operator.go +44 -44
- package/linthost/rules_ts_no_misused_spread.go +64 -64
- package/linthost/rules_ts_no_redundant_type_constituents.go +72 -72
- package/linthost/rules_ts_no_restricted_types.go +28 -28
- package/linthost/rules_ts_no_unnecessary_boolean_literal_compare.go +87 -87
- package/linthost/rules_ts_no_unnecessary_condition.go +184 -184
- package/linthost/rules_ts_no_unnecessary_qualifier.go +72 -72
- package/linthost/rules_ts_no_unnecessary_template_expression.go +120 -120
- package/linthost/rules_ts_no_unnecessary_type_arguments.go +171 -171
- package/linthost/rules_ts_no_unnecessary_type_assertion.go +90 -90
- package/linthost/rules_ts_no_unsafe_argument.go +50 -50
- package/linthost/rules_ts_no_unsafe_assignment.go +60 -60
- package/linthost/rules_ts_no_unsafe_call.go +40 -40
- package/linthost/rules_ts_no_unsafe_enum_comparison.go +147 -147
- package/linthost/rules_ts_no_unsafe_member_access.go +29 -29
- package/linthost/rules_ts_no_unsafe_return.go +64 -64
- package/linthost/rules_ts_no_unsafe_unary_minus.go +42 -42
- package/linthost/rules_ts_no_useless_constructor.go +20 -20
- package/linthost/rules_ts_non_nullable_type_assertion_style.go +60 -60
- package/linthost/rules_ts_parameter_properties.go +10 -10
- package/linthost/rules_ts_prefer_find.go +116 -116
- package/linthost/rules_ts_prefer_includes.go +173 -173
- package/linthost/rules_ts_prefer_nullish_coalescing.go +54 -54
- package/linthost/rules_ts_prefer_optional_chain.go +156 -156
- package/linthost/rules_ts_prefer_promise_reject_errors.go +104 -104
- package/linthost/rules_ts_prefer_readonly.go +31 -31
- package/linthost/rules_ts_prefer_reduce_type_parameter.go +74 -74
- package/linthost/rules_ts_prefer_regexp_exec.go +69 -69
- package/linthost/rules_ts_prefer_return_this_type.go +79 -79
- package/linthost/rules_ts_prefer_string_starts_ends_with.go +237 -237
- package/linthost/rules_ts_promise_function_async.go +41 -41
- package/linthost/rules_ts_related_getter_setter_pairs.go +61 -61
- package/linthost/rules_ts_require_array_sort_compare.go +58 -58
- package/linthost/rules_ts_restrict_plus_operands.go +82 -82
- package/linthost/rules_ts_restrict_template_expressions.go +50 -50
- package/linthost/rules_ts_simple.go +249 -249
- package/linthost/rules_ts_sort_type_constituents.go +88 -88
- package/linthost/rules_ts_strict_boolean_expressions.go +103 -103
- package/linthost/rules_ts_switch_exhaustiveness_check.go +90 -90
- package/linthost/rules_ts_unbound_method.go +65 -65
- package/linthost/rules_tsdoc.go +88 -88
- package/linthost/rules_unicorn_better_regex.go +1 -1
- package/linthost/rules_unicorn_catch_error_name.go +19 -19
- package/linthost/rules_unicorn_consistent_assert.go +20 -20
- package/linthost/rules_unicorn_consistent_date_clone.go +27 -27
- package/linthost/rules_unicorn_consistent_destructuring.go +3 -3
- package/linthost/rules_unicorn_consistent_empty_array_spread.go +34 -34
- package/linthost/rules_unicorn_consistent_existence_index_check.go +42 -42
- package/linthost/rules_unicorn_consistent_function_scoping.go +3 -3
- package/linthost/rules_unicorn_consistent_template_literal_escape.go +3 -3
- package/linthost/rules_unicorn_custom_error_definition.go +92 -92
- package/linthost/rules_unicorn_empty_brace_spaces.go +47 -47
- package/linthost/rules_unicorn_error_message.go +34 -34
- package/linthost/rules_unicorn_escape_case.go +14 -14
- package/linthost/rules_unicorn_expiring_todo_comments.go +36 -36
- package/linthost/rules_unicorn_explicit_length_check.go +51 -51
- package/linthost/rules_unicorn_filename_case.go +1 -1
- package/linthost/rules_unicorn_import_style.go +1 -1
- package/linthost/rules_unicorn_isolated_functions.go +2 -2
- package/linthost/rules_unicorn_new_for_builtins.go +49 -49
- package/linthost/rules_unicorn_no_abusive_eslint_disable.go +31 -31
- package/linthost/rules_unicorn_no_accessor_recursion.go +69 -69
- package/linthost/rules_unicorn_no_anonymous_default_export.go +40 -40
- package/linthost/rules_unicorn_no_array_callback_reference.go +33 -33
- package/linthost/rules_unicorn_no_array_for_each.go +14 -14
- package/linthost/rules_unicorn_no_array_method_this_argument.go +29 -29
- package/linthost/rules_unicorn_no_array_reduce.go +15 -15
- package/linthost/rules_unicorn_no_array_reverse.go +17 -17
- package/linthost/rules_unicorn_no_array_sort.go +17 -17
- package/linthost/rules_unicorn_no_await_expression_member.go +12 -12
- package/linthost/rules_unicorn_no_await_in_promise_methods.go +38 -38
- package/linthost/rules_unicorn_no_console_spaces.go +30 -30
- package/linthost/rules_unicorn_no_document_cookie.go +13 -13
- package/linthost/rules_unicorn_no_empty_file.go +16 -16
- package/linthost/rules_unicorn_no_for_loop.go +58 -58
- package/linthost/rules_unicorn_no_hex_escape.go +11 -11
- package/linthost/rules_unicorn_no_immediate_mutation.go +55 -55
- package/linthost/rules_unicorn_no_instanceof_builtins.go +34 -34
- package/linthost/rules_unicorn_no_invalid_fetch_options.go +52 -52
- package/linthost/rules_unicorn_no_invalid_remove_event_listener.go +25 -25
- package/linthost/rules_unicorn_no_keyword_prefix.go +56 -56
- package/linthost/rules_unicorn_no_lonely_if.go +21 -21
- package/linthost/rules_unicorn_no_magic_array_flat_depth.go +22 -22
- package/linthost/rules_unicorn_no_named_default.go +25 -25
- package/linthost/rules_unicorn_no_negated_condition.go +54 -54
- package/linthost/rules_unicorn_no_negation_in_equality_check.go +23 -23
- package/linthost/rules_unicorn_no_nested_ternary.go +15 -15
- package/linthost/rules_unicorn_no_new_array.go +5 -5
- package/linthost/rules_unicorn_no_new_buffer.go +5 -5
- package/linthost/rules_unicorn_no_null.go +2 -2
- package/linthost/rules_unicorn_no_object_as_default_parameter.go +19 -19
- package/linthost/rules_unicorn_no_process_exit.go +17 -17
- package/linthost/rules_unicorn_no_single_promise_in_promise_methods.go +29 -29
- package/linthost/rules_unicorn_no_static_only_class.go +27 -27
- package/linthost/rules_unicorn_no_thenable.go +47 -47
- package/linthost/rules_unicorn_no_this_assignment.go +10 -10
- package/linthost/rules_unicorn_no_typeof_undefined.go +31 -31
- package/linthost/rules_unicorn_no_unnecessary_array_flat_depth.go +23 -23
- package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +37 -37
- package/linthost/rules_unicorn_no_unnecessary_await.go +24 -24
- package/linthost/rules_unicorn_no_unnecessary_slice_end.go +22 -22
- package/linthost/rules_unicorn_no_unreadable_array_destructuring.go +67 -67
- package/linthost/rules_unicorn_no_unreadable_iife.go +22 -22
- package/linthost/rules_unicorn_no_useless_collection_argument.go +34 -34
- package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +18 -18
- package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +49 -49
- package/linthost/rules_unicorn_no_useless_iterator_to_array.go +41 -41
- package/linthost/rules_unicorn_no_useless_length_check.go +82 -82
- package/linthost/rules_unicorn_no_useless_promise_resolve_reject.go +42 -42
- package/linthost/rules_unicorn_no_useless_spread.go +38 -38
- package/linthost/rules_unicorn_no_useless_switch_case.go +29 -29
- package/linthost/rules_unicorn_no_useless_undefined.go +25 -25
- package/linthost/rules_unicorn_no_zero_fractions.go +17 -17
- package/linthost/rules_unicorn_number_literal_case.go +33 -33
- package/linthost/rules_unicorn_numeric_separators_style.go +36 -36
- package/linthost/rules_unicorn_prefer_add_event_listener.go +30 -30
- package/linthost/rules_unicorn_prefer_array_find.go +27 -27
- package/linthost/rules_unicorn_prefer_array_flat.go +25 -25
- package/linthost/rules_unicorn_prefer_array_flat_map.go +37 -37
- package/linthost/rules_unicorn_prefer_array_index_of.go +108 -108
- package/linthost/rules_unicorn_prefer_array_some.go +43 -43
- package/linthost/rules_unicorn_prefer_at.go +42 -42
- package/linthost/rules_unicorn_prefer_bigint_literals.go +42 -42
- package/linthost/rules_unicorn_prefer_blob_reading_methods.go +15 -15
- package/linthost/rules_unicorn_prefer_class_fields.go +57 -57
- package/linthost/rules_unicorn_prefer_classlist_toggle.go +76 -76
- package/linthost/rules_unicorn_prefer_code_point.go +21 -21
- package/linthost/rules_unicorn_prefer_date_now.go +47 -47
- package/linthost/rules_unicorn_prefer_default_parameters.go +96 -96
- package/linthost/rules_unicorn_prefer_dom_node_append.go +14 -14
- package/linthost/rules_unicorn_prefer_dom_node_dataset.go +27 -27
- package/linthost/rules_unicorn_prefer_dom_node_remove.go +17 -17
- package/linthost/rules_unicorn_prefer_dom_node_text_content.go +11 -11
- package/linthost/rules_unicorn_prefer_event_target.go +10 -10
- package/linthost/rules_unicorn_prefer_export_from.go +99 -99
- package/linthost/rules_unicorn_prefer_global_this.go +91 -91
- package/linthost/rules_unicorn_prefer_import_meta_properties.go +38 -38
- package/linthost/rules_unicorn_prefer_includes.go +108 -108
- package/linthost/rules_unicorn_prefer_json_parse_buffer.go +37 -37
- package/linthost/rules_unicorn_prefer_keyboard_event_key.go +10 -10
- package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +20 -20
- package/linthost/rules_unicorn_prefer_math_min_max.go +33 -33
- package/linthost/rules_unicorn_prefer_math_trunc.go +32 -32
- package/linthost/rules_unicorn_prefer_modern_dom_apis.go +18 -18
- package/linthost/rules_unicorn_prefer_modern_math_apis.go +38 -38
- package/linthost/rules_unicorn_prefer_module.go +22 -22
- package/linthost/rules_unicorn_prefer_native_coercion_functions.go +73 -73
- package/linthost/rules_unicorn_prefer_negative_index.go +46 -46
- package/linthost/rules_unicorn_prefer_node_protocol.go +90 -90
- package/linthost/rules_unicorn_prefer_number_properties.go +57 -57
- package/linthost/rules_unicorn_prefer_object_from_entries.go +26 -26
- package/linthost/rules_unicorn_prefer_optional_catch_binding.go +24 -24
- package/linthost/rules_unicorn_prefer_prototype_methods.go +25 -25
- package/linthost/rules_unicorn_prefer_query_selector.go +25 -25
- package/linthost/rules_unicorn_prefer_reflect_apply.go +10 -10
- package/linthost/rules_unicorn_prefer_regexp_test_rule.go +47 -47
- package/linthost/rules_unicorn_prefer_response_static_json.go +26 -26
- package/linthost/rules_unicorn_prefer_set_has.go +16 -16
- package/linthost/rules_unicorn_prefer_set_size.go +22 -22
- package/linthost/rules_unicorn_prefer_simple_condition_first.go +3 -3
- package/linthost/rules_unicorn_prefer_single_call.go +59 -59
- package/linthost/rules_unicorn_prefer_spread.go +24 -24
- package/linthost/rules_unicorn_prefer_string_raw.go +12 -12
- package/linthost/rules_unicorn_prefer_string_replace_all.go +46 -46
- package/linthost/rules_unicorn_prefer_string_slice.go +17 -17
- package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +104 -104
- package/linthost/rules_unicorn_prefer_string_trim_start_end.go +21 -21
- package/linthost/rules_unicorn_prefer_structured_clone.go +36 -36
- package/linthost/rules_unicorn_prefer_switch.go +65 -65
- package/linthost/rules_unicorn_prefer_ternary.go +35 -35
- package/linthost/rules_unicorn_prefer_top_level_await.go +34 -34
- package/linthost/rules_unicorn_prefer_type_error.go +84 -84
- package/linthost/rules_unicorn_prevent_abbreviations.go +68 -68
- package/linthost/rules_unicorn_relative_url_style.go +19 -19
- package/linthost/rules_unicorn_require_array_join_separator.go +18 -18
- package/linthost/rules_unicorn_require_module_attributes.go +25 -25
- package/linthost/rules_unicorn_require_module_specifiers.go +28 -28
- package/linthost/rules_unicorn_require_number_to_fixed_digits_argument.go +18 -18
- package/linthost/rules_unicorn_require_post_message_target_origin.go +18 -18
- package/linthost/rules_unicorn_string_content.go +1 -1
- package/linthost/rules_unicorn_switch_case_braces.go +16 -16
- package/linthost/rules_unicorn_switch_case_break_position.go +3 -3
- package/linthost/rules_unicorn_template_indent.go +1 -1
- package/linthost/rules_unicorn_text_encoding_identifier_case.go +36 -36
- package/linthost/rules_unicorn_throw_new_error.go +30 -30
- package/linthost/rules_var.go +273 -3
- package/package.json +3 -3
- package/src/defaultFormat.ts +11 -7
- package/src/structures/ITtscLintConfig.ts +5 -5
- package/src/structures/TtscLintRuleSetting.ts +19 -19
- package/src/structures/{ITtscLintFormat.ts → format/ITtscLintFormat.ts} +48 -75
- package/src/structures/format/ITtscLintFormatJsDoc.ts +16 -0
- package/src/structures/format/ITtscLintFormatSortImports.ts +62 -0
- package/src/structures/format/index.ts +3 -0
- package/src/structures/index.ts +1 -1
- package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +20 -31
- package/src/structures/rules/ITtscLintBoundariesRules.ts +32 -36
- package/src/structures/rules/ITtscLintContributorRules.ts +6 -7
- package/src/structures/rules/ITtscLintCoreRules.ts +380 -408
- package/src/structures/rules/ITtscLintCypressRuleOptions.ts +5 -5
- package/src/structures/rules/ITtscLintCypressRules.ts +34 -38
- package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +28 -41
- package/src/structures/rules/ITtscLintFunctionalRules.ts +51 -56
- package/src/structures/rules/ITtscLintJestRules.ts +63 -74
- package/src/structures/rules/ITtscLintJsdocRules.ts +47 -54
- package/src/structures/rules/ITtscLintJsxA11yRules.ts +94 -102
- package/src/structures/rules/ITtscLintNextjsRules.ts +50 -55
- package/src/structures/rules/ITtscLintPlaywrightRules.ts +104 -122
- package/src/structures/rules/ITtscLintPromiseRules.ts +62 -71
- package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +4 -4
- package/src/structures/rules/ITtscLintReactPerfRules.ts +17 -19
- package/src/structures/rules/ITtscLintReactRuleOptions.ts +8 -10
- package/src/structures/rules/ITtscLintReactRules.ts +91 -104
- package/src/structures/rules/ITtscLintRegexpRules.ts +46 -54
- package/src/structures/rules/ITtscLintRuleOptionsMap.ts +7 -8
- package/src/structures/rules/ITtscLintSecurityRules.ts +45 -52
- package/src/structures/rules/ITtscLintSolidRules.ts +53 -56
- package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +3 -4
- package/src/structures/rules/ITtscLintStorybookRules.ts +60 -69
- package/src/structures/rules/ITtscLintTanstackQueryRules.ts +31 -37
- package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +2 -3
- package/src/structures/rules/ITtscLintTestingLibraryRules.ts +102 -119
- package/src/structures/rules/ITtscLintTypeScriptRules.ts +460 -518
- package/src/structures/rules/ITtscLintVitestRules.ts +43 -51
- package/lib/structures/ITtscLintFormat.js.map +0 -1
- /package/lib/structures/{ITtscLintFormat.js → format/ITtscLintFormat.js} +0 -0
package/linthost/print_engine.go
CHANGED
|
@@ -68,11 +68,11 @@ import "strings"
|
|
|
68
68
|
//
|
|
69
69
|
// - "all" (default) every multi-line list gets one.
|
|
70
70
|
// - "es5" arrays, objects, named imports / exports get one;
|
|
71
|
-
//
|
|
72
|
-
//
|
|
73
|
-
//
|
|
74
|
-
//
|
|
75
|
-
//
|
|
71
|
+
// call arguments, parameter lists, and type-level
|
|
72
|
+
// lists do not — those positions accepted trailing
|
|
73
|
+
// commas only in ES2017+, so es5 mode skips them
|
|
74
|
+
// to match Prettier and avoid oscillating against
|
|
75
|
+
// the formatter on every cascade pass.
|
|
76
76
|
// - "none" no list gets one.
|
|
77
77
|
//
|
|
78
78
|
// An empty string is treated as "all", which keeps `DefaultPrintOptions()`
|
|
@@ -192,10 +192,10 @@ func Print(doc Doc, opts PrintOptions) string {
|
|
|
192
192
|
// Update column. A text fragment may contain embedded
|
|
193
193
|
// newlines (verbatim slices). The column tracker counts
|
|
194
194
|
// from the last newline.
|
|
195
|
-
if
|
|
196
|
-
col =
|
|
195
|
+
if strings.Contains(top.doc.Text, "\n") {
|
|
196
|
+
col = displayWidthAfterLastNewline(top.doc.Text)
|
|
197
197
|
} else {
|
|
198
|
-
col +=
|
|
198
|
+
col += displayWidth(top.doc.Text)
|
|
199
199
|
}
|
|
200
200
|
case docConcat:
|
|
201
201
|
// Push children in reverse so they pop in source order.
|
|
@@ -241,6 +241,51 @@ func Print(doc Doc, opts PrintOptions) string {
|
|
|
241
241
|
stack = append(stack, printFrame{indent: top.indent, mode: top.mode, doc: pick})
|
|
242
242
|
case docLineSuffix:
|
|
243
243
|
lineSuffix = append(lineSuffix, top.doc.Children...)
|
|
244
|
+
case docFill:
|
|
245
|
+
// Prettier's fill: lay out [content, sep, content, sep, …] packing as
|
|
246
|
+
// many contents per line as fit, breaking a separator only when the
|
|
247
|
+
// current content (or the content+sep+next-content pair) overflows.
|
|
248
|
+
parts := top.doc.Children
|
|
249
|
+
if len(parts) == 0 {
|
|
250
|
+
break
|
|
251
|
+
}
|
|
252
|
+
rem := opts.PrintWidth - col
|
|
253
|
+
content := parts[0]
|
|
254
|
+
contentFits := fits(content, rem, top.indent)
|
|
255
|
+
if len(parts) == 1 {
|
|
256
|
+
m := modeBreak
|
|
257
|
+
if contentFits {
|
|
258
|
+
m = modeFlat
|
|
259
|
+
}
|
|
260
|
+
stack = append(stack, printFrame{indent: top.indent, mode: m, doc: content})
|
|
261
|
+
break
|
|
262
|
+
}
|
|
263
|
+
sep := parts[1]
|
|
264
|
+
if len(parts) == 2 {
|
|
265
|
+
cm, sm := modeBreak, modeBreak
|
|
266
|
+
if contentFits {
|
|
267
|
+
cm, sm = modeFlat, modeFlat
|
|
268
|
+
}
|
|
269
|
+
stack = append(stack, printFrame{indent: top.indent, mode: sm, doc: sep})
|
|
270
|
+
stack = append(stack, printFrame{indent: top.indent, mode: cm, doc: content})
|
|
271
|
+
break
|
|
272
|
+
}
|
|
273
|
+
rest := Doc{Kind: docFill, Children: parts[2:]}
|
|
274
|
+
pairFits := fits(Concat(content, sep, parts[2]), rem, top.indent)
|
|
275
|
+
// Push rest (bottom), then sep, then content (top) so they render in
|
|
276
|
+
// order content, sep, rest.
|
|
277
|
+
stack = append(stack, printFrame{indent: top.indent, mode: top.mode, doc: rest})
|
|
278
|
+
switch {
|
|
279
|
+
case pairFits:
|
|
280
|
+
stack = append(stack, printFrame{indent: top.indent, mode: modeFlat, doc: sep})
|
|
281
|
+
stack = append(stack, printFrame{indent: top.indent, mode: modeFlat, doc: content})
|
|
282
|
+
case contentFits:
|
|
283
|
+
stack = append(stack, printFrame{indent: top.indent, mode: modeBreak, doc: sep})
|
|
284
|
+
stack = append(stack, printFrame{indent: top.indent, mode: modeFlat, doc: content})
|
|
285
|
+
default:
|
|
286
|
+
stack = append(stack, printFrame{indent: top.indent, mode: modeBreak, doc: sep})
|
|
287
|
+
stack = append(stack, printFrame{indent: top.indent, mode: modeBreak, doc: content})
|
|
288
|
+
}
|
|
244
289
|
case docLine:
|
|
245
290
|
if top.mode == modeFlat {
|
|
246
291
|
out.WriteByte(' ')
|
|
@@ -320,7 +365,7 @@ func fits(doc Doc, remaining int, indent int) bool {
|
|
|
320
365
|
switch top.doc.Kind {
|
|
321
366
|
case docNil:
|
|
322
367
|
case docText:
|
|
323
|
-
remaining -=
|
|
368
|
+
remaining -= displayWidth(top.doc.Text)
|
|
324
369
|
if remaining < 0 {
|
|
325
370
|
return false
|
|
326
371
|
}
|
|
@@ -364,6 +409,11 @@ func fits(doc Doc, remaining int, indent int) bool {
|
|
|
364
409
|
pick = top.doc.Children[0]
|
|
365
410
|
}
|
|
366
411
|
stack = append(stack, frame{mode: top.mode, doc: pick})
|
|
412
|
+
case docFill:
|
|
413
|
+
// A fill's flat form is every content and separator flat.
|
|
414
|
+
for i := len(top.doc.Children) - 1; i >= 0; i-- {
|
|
415
|
+
stack = append(stack, frame{mode: modeFlat, doc: top.doc.Children[i]})
|
|
416
|
+
}
|
|
367
417
|
case docLineSuffix:
|
|
368
418
|
// Line suffix never contributes to flat width — it queues
|
|
369
419
|
// for a future break. Skip.
|
|
@@ -416,9 +466,9 @@ func fitsFirstLine(doc Doc, remaining int) bool {
|
|
|
416
466
|
case docText:
|
|
417
467
|
if idx := strings.IndexByte(top.Text, '\n'); idx >= 0 {
|
|
418
468
|
// A multi-line Text ends the first line at its first newline.
|
|
419
|
-
return remaining-idx >= 0
|
|
469
|
+
return remaining-displayWidth(top.Text[:idx]) >= 0
|
|
420
470
|
}
|
|
421
|
-
remaining -=
|
|
471
|
+
remaining -= displayWidth(top.Text)
|
|
422
472
|
if remaining < 0 {
|
|
423
473
|
return false
|
|
424
474
|
}
|
|
@@ -488,6 +538,13 @@ func flatten(doc Doc) (Doc, bool) {
|
|
|
488
538
|
return flattenChildren(doc.Children)
|
|
489
539
|
case docConcat, docIndent, docAlign:
|
|
490
540
|
return flattenChildren(doc.Children)
|
|
541
|
+
case docFill:
|
|
542
|
+
// A fill's flat form is every content and separator rendered flat (its
|
|
543
|
+
// Line separators collapse to spaces). Without this case flatten returned
|
|
544
|
+
// the live Fill unchanged, so a supposedly all-flat option still carried a
|
|
545
|
+
// breakable fill and a hugged numeric array (`new Float32Array([ … ])`)
|
|
546
|
+
// rendered with the fill broken inside unbroken brackets.
|
|
547
|
+
return flattenChildren(doc.Children)
|
|
491
548
|
}
|
|
492
549
|
return doc, true
|
|
493
550
|
}
|
|
@@ -31,6 +31,11 @@ func printArrayLiteral(ctx *PrintContext, node *shimast.Node) (Doc, bool) {
|
|
|
31
31
|
if arr == nil || arr.Elements == nil {
|
|
32
32
|
return verbatim(ctx, node), !nodeSpansMultipleLines(ctx, node)
|
|
33
33
|
}
|
|
34
|
+
// A comment between elements (or after `[`) would be dropped by the fresh
|
|
35
|
+
// separators; bail to verbatim so the enclosing reflow abstains.
|
|
36
|
+
if listHasInterItemComments(ctx, node) {
|
|
37
|
+
return verbatim(ctx, node), !nodeSpansMultipleLines(ctx, node)
|
|
38
|
+
}
|
|
34
39
|
items := make([]Doc, 0, len(arr.Elements.Nodes))
|
|
35
40
|
covered := true
|
|
36
41
|
for _, elem := range arr.Elements.Nodes {
|
|
@@ -47,10 +52,108 @@ func printArrayLiteral(ctx *PrintContext, node *shimast.Node) (Doc, bool) {
|
|
|
47
52
|
// every `none` project (the trailing-comma rule wouldn't insert one
|
|
48
53
|
// and the printer would put one back).
|
|
49
54
|
return printList(ctx, listShape{
|
|
50
|
-
OpenTok:
|
|
51
|
-
CloseTok:
|
|
52
|
-
Items:
|
|
53
|
-
Space:
|
|
54
|
-
AddComma:
|
|
55
|
+
OpenTok: "[",
|
|
56
|
+
CloseTok: "]",
|
|
57
|
+
Items: items,
|
|
58
|
+
Space: false,
|
|
59
|
+
AddComma: ctx.allowsEs5TrailingComma(),
|
|
60
|
+
Fill: isConciselyPrintedArray(arr.Elements.Nodes),
|
|
61
|
+
ForceBreak: arrayShouldForceBreak(arr.Elements.Nodes),
|
|
62
|
+
BlankBefore: blankBeforeItems(ctx.Source, arr.Elements.Nodes),
|
|
55
63
|
}), covered
|
|
56
64
|
}
|
|
65
|
+
|
|
66
|
+
// arrayShouldForceBreak reports whether an array literal takes Prettier's
|
|
67
|
+
// forced one-element-per-line layout even when it would fit flat: more than one
|
|
68
|
+
// element, every element an array or object literal carrying more than one
|
|
69
|
+
// child, and consecutive elements of the same kind (`[["(", ")"], ["{", "}"]]`
|
|
70
|
+
// and `new Map([[k, v], [k, v]])` break; a mixed `[[1, 2], { c: 3 }]` and a
|
|
71
|
+
// lone `[[1, 2]]` or single-child inners stay flat). Mirrors Prettier's array
|
|
72
|
+
// shouldBreak heuristic.
|
|
73
|
+
func arrayShouldForceBreak(elems []*shimast.Node) bool {
|
|
74
|
+
if len(elems) < 2 {
|
|
75
|
+
return false
|
|
76
|
+
}
|
|
77
|
+
for i, e := range elems {
|
|
78
|
+
if !isMultiChildArrayOrObject(e) {
|
|
79
|
+
return false
|
|
80
|
+
}
|
|
81
|
+
if i+1 < len(elems) && elems[i+1] != nil && elems[i+1].Kind != e.Kind {
|
|
82
|
+
return false
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return true
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// isMultiChildArrayOrObject reports whether `node` is an array or object literal
|
|
89
|
+
// with more than one element/property.
|
|
90
|
+
func isMultiChildArrayOrObject(node *shimast.Node) bool {
|
|
91
|
+
if node == nil {
|
|
92
|
+
return false
|
|
93
|
+
}
|
|
94
|
+
switch node.Kind {
|
|
95
|
+
case shimast.KindArrayLiteralExpression:
|
|
96
|
+
if a := node.AsArrayLiteralExpression(); a != nil && a.Elements != nil {
|
|
97
|
+
return len(a.Elements.Nodes) > 1
|
|
98
|
+
}
|
|
99
|
+
case shimast.KindObjectLiteralExpression:
|
|
100
|
+
if o := node.AsObjectLiteralExpression(); o != nil && o.Properties != nil {
|
|
101
|
+
return len(o.Properties.Nodes) > 1
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return false
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// arrayForcesBreak reports whether `node` is an array literal that Prettier's
|
|
108
|
+
// shouldBreak heuristic explodes regardless of width. The print-width rule
|
|
109
|
+
// consults it so its flat-fit fast path does not leave such an array inline
|
|
110
|
+
// when the source wrote it on one line.
|
|
111
|
+
func arrayForcesBreak(node *shimast.Node) bool {
|
|
112
|
+
if node == nil || node.Kind != shimast.KindArrayLiteralExpression {
|
|
113
|
+
return false
|
|
114
|
+
}
|
|
115
|
+
arr := node.AsArrayLiteralExpression()
|
|
116
|
+
if arr == nil || arr.Elements == nil {
|
|
117
|
+
return false
|
|
118
|
+
}
|
|
119
|
+
return arrayShouldForceBreak(arr.Elements.Nodes)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// isConciselyPrintedArray reports whether an array should use Prettier's
|
|
123
|
+
// concise "fill" layout: more than one element and every element a numeric
|
|
124
|
+
// literal (optionally a `+`/`-` signed numeric). Prettier packs such arrays
|
|
125
|
+
// several per line; mixed / string / identifier arrays stay one-per-line.
|
|
126
|
+
func isConciselyPrintedArray(elems []*shimast.Node) bool {
|
|
127
|
+
if len(elems) < 2 {
|
|
128
|
+
return false
|
|
129
|
+
}
|
|
130
|
+
for _, e := range elems {
|
|
131
|
+
if !isNumericArrayElement(e) {
|
|
132
|
+
return false
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return true
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// isNumericArrayElement reports whether `node` is a numeric literal or a
|
|
139
|
+
// `+`/`-` prefix applied to one.
|
|
140
|
+
func isNumericArrayElement(node *shimast.Node) bool {
|
|
141
|
+
if node == nil {
|
|
142
|
+
return false
|
|
143
|
+
}
|
|
144
|
+
switch node.Kind {
|
|
145
|
+
case shimast.KindNumericLiteral, shimast.KindBigIntLiteral:
|
|
146
|
+
return true
|
|
147
|
+
case shimast.KindPrefixUnaryExpression:
|
|
148
|
+
u := node.AsPrefixUnaryExpression()
|
|
149
|
+
if u == nil || u.Operand == nil {
|
|
150
|
+
return false
|
|
151
|
+
}
|
|
152
|
+
if u.Operator != shimast.KindPlusToken && u.Operator != shimast.KindMinusToken {
|
|
153
|
+
return false
|
|
154
|
+
}
|
|
155
|
+
return u.Operand.Kind == shimast.KindNumericLiteral ||
|
|
156
|
+
u.Operand.Kind == shimast.KindBigIntLiteral
|
|
157
|
+
}
|
|
158
|
+
return false
|
|
159
|
+
}
|