@ttsc/lint 0.14.0-dev.20260529.2 → 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.
Files changed (380) hide show
  1. package/README.md +21 -23
  2. package/lib/defaultFormat.d.ts +10 -6
  3. package/lib/defaultFormat.js +10 -6
  4. package/lib/defaultFormat.js.map +1 -1
  5. package/lib/structures/ITtscLintConfig.d.ts +5 -5
  6. package/lib/structures/TtscLintRuleSetting.d.ts +19 -19
  7. package/lib/structures/{ITtscLintFormat.d.ts → format/ITtscLintFormat.d.ts} +45 -70
  8. package/lib/structures/format/ITtscLintFormat.js.map +1 -0
  9. package/lib/structures/format/ITtscLintFormatJsDoc.d.ts +15 -0
  10. package/lib/structures/format/ITtscLintFormatJsDoc.js +3 -0
  11. package/lib/structures/format/ITtscLintFormatJsDoc.js.map +1 -0
  12. package/lib/structures/format/ITtscLintFormatSortImports.d.ts +54 -0
  13. package/lib/structures/format/ITtscLintFormatSortImports.js +3 -0
  14. package/lib/structures/format/ITtscLintFormatSortImports.js.map +1 -0
  15. package/lib/structures/format/index.d.ts +3 -0
  16. package/lib/structures/format/index.js +20 -0
  17. package/lib/structures/format/index.js.map +1 -0
  18. package/lib/structures/index.d.ts +1 -1
  19. package/lib/structures/index.js +1 -1
  20. package/lib/structures/index.js.map +1 -1
  21. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.d.ts +18 -27
  22. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js +4 -5
  23. package/lib/structures/rules/ITtscLintBoundariesRuleOptions.js.map +1 -1
  24. package/lib/structures/rules/ITtscLintBoundariesRules.d.ts +29 -33
  25. package/lib/structures/rules/ITtscLintContributorRules.d.ts +6 -7
  26. package/lib/structures/rules/ITtscLintCoreRules.d.ts +380 -408
  27. package/lib/structures/rules/ITtscLintCypressRuleOptions.d.ts +5 -5
  28. package/lib/structures/rules/ITtscLintCypressRuleOptions.js +2 -2
  29. package/lib/structures/rules/ITtscLintCypressRules.d.ts +34 -38
  30. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.d.ts +21 -24
  31. package/lib/structures/rules/ITtscLintFunctionalRuleOptions.js +2 -2
  32. package/lib/structures/rules/ITtscLintFunctionalRules.d.ts +51 -56
  33. package/lib/structures/rules/ITtscLintJestRules.d.ts +63 -74
  34. package/lib/structures/rules/ITtscLintJsdocRules.d.ts +47 -54
  35. package/lib/structures/rules/ITtscLintJsxA11yRules.d.ts +94 -102
  36. package/lib/structures/rules/ITtscLintNextjsRules.d.ts +50 -55
  37. package/lib/structures/rules/ITtscLintPlaywrightRules.d.ts +104 -122
  38. package/lib/structures/rules/ITtscLintPromiseRules.d.ts +62 -71
  39. package/lib/structures/rules/ITtscLintReactPerfRuleOptions.d.ts +4 -4
  40. package/lib/structures/rules/ITtscLintReactPerfRules.d.ts +17 -19
  41. package/lib/structures/rules/ITtscLintReactRuleOptions.d.ts +8 -10
  42. package/lib/structures/rules/ITtscLintReactRuleOptions.js +1 -2
  43. package/lib/structures/rules/ITtscLintReactRuleOptions.js.map +1 -1
  44. package/lib/structures/rules/ITtscLintReactRules.d.ts +91 -104
  45. package/lib/structures/rules/ITtscLintRegexpRules.d.ts +46 -54
  46. package/lib/structures/rules/ITtscLintRuleOptionsMap.d.ts +7 -8
  47. package/lib/structures/rules/ITtscLintSecurityRules.d.ts +45 -52
  48. package/lib/structures/rules/ITtscLintSolidRules.d.ts +53 -56
  49. package/lib/structures/rules/ITtscLintStorybookRuleOptions.d.ts +3 -4
  50. package/lib/structures/rules/ITtscLintStorybookRules.d.ts +60 -69
  51. package/lib/structures/rules/ITtscLintTanstackQueryRules.d.ts +31 -37
  52. package/lib/structures/rules/ITtscLintTestingLibraryRuleOptions.d.ts +2 -3
  53. package/lib/structures/rules/ITtscLintTestingLibraryRules.d.ts +102 -119
  54. package/lib/structures/rules/ITtscLintTypeScriptRules.d.ts +460 -518
  55. package/lib/structures/rules/ITtscLintVitestRules.d.ts +43 -51
  56. package/linthost/config.go +89 -72
  57. package/linthost/config_format.go +265 -99
  58. package/linthost/directives.go +5 -1
  59. package/linthost/display_width.go +72 -0
  60. package/linthost/fix.go +26 -1
  61. package/linthost/format.go +222 -25
  62. package/linthost/format_editor_settings.go +262 -0
  63. package/linthost/lsp.go +8 -4
  64. package/linthost/print_dispatch.go +3 -0
  65. package/linthost/print_doc.go +13 -0
  66. package/linthost/print_engine.go +68 -11
  67. package/linthost/print_nodes_array.go +108 -5
  68. package/linthost/print_nodes_call.go +515 -74
  69. package/linthost/print_nodes_function.go +25 -0
  70. package/linthost/print_nodes_imports.go +47 -14
  71. package/linthost/print_nodes_list.go +191 -8
  72. package/linthost/print_nodes_object.go +12 -6
  73. package/linthost/print_nodes_ternary.go +106 -0
  74. package/linthost/rules_boundaries.go +400 -400
  75. package/linthost/rules_camelcase.go +81 -81
  76. package/linthost/rules_complexity.go +52 -51
  77. package/linthost/rules_consistent_return.go +81 -81
  78. package/linthost/rules_core_extra.go +472 -472
  79. package/linthost/rules_curly.go +43 -43
  80. package/linthost/rules_default_case.go +15 -15
  81. package/linthost/rules_default_case_last.go +22 -22
  82. package/linthost/rules_format_arrow_parens.go +167 -0
  83. package/linthost/rules_format_bracket_spacing.go +117 -0
  84. package/linthost/rules_format_clause_join.go +172 -0
  85. package/linthost/rules_format_declaration_header.go +664 -0
  86. package/linthost/rules_format_indent.go +616 -0
  87. package/linthost/rules_format_jsdoc.go +4 -4
  88. package/linthost/rules_format_orphan_semi.go +106 -0
  89. package/linthost/rules_format_parameter_properties.go +175 -0
  90. package/linthost/rules_format_print_width.go +185 -69
  91. package/linthost/rules_format_quote_props.go +169 -0
  92. package/linthost/rules_format_quotes.go +75 -29
  93. package/linthost/rules_format_semi.go +185 -10
  94. package/linthost/rules_format_sort_imports.go +456 -121
  95. package/linthost/rules_format_statement_split.go +368 -0
  96. package/linthost/rules_format_ternary_nullish_parens.go +77 -0
  97. package/linthost/rules_format_trailing_comma.go +21 -2
  98. package/linthost/rules_format_whitespace.go +336 -0
  99. package/linthost/rules_functional.go +688 -688
  100. package/linthost/rules_gap.go +146 -11
  101. package/linthost/rules_grouped_accessor_pairs.go +60 -60
  102. package/linthost/rules_guard_for_in.go +122 -122
  103. package/linthost/rules_id_length.go +44 -44
  104. package/linthost/rules_imports.go +11 -3
  105. package/linthost/rules_init_declarations.go +25 -25
  106. package/linthost/rules_jsx_a11y.go +844 -844
  107. package/linthost/rules_max_classes_per_file.go +24 -24
  108. package/linthost/rules_max_depth.go +43 -43
  109. package/linthost/rules_max_lines.go +53 -53
  110. package/linthost/rules_max_lines_per_function.go +28 -28
  111. package/linthost/rules_max_nested_callbacks.go +26 -26
  112. package/linthost/rules_max_params.go +20 -20
  113. package/linthost/rules_max_statements.go +29 -29
  114. package/linthost/rules_nextjs.go +5 -5
  115. package/linthost/rules_no_else_return.go +38 -38
  116. package/linthost/rules_no_empty_named_blocks.go +45 -45
  117. package/linthost/rules_no_import_assign.go +96 -96
  118. package/linthost/rules_no_invalid_this.go +19 -19
  119. package/linthost/rules_no_loop_func.go +43 -43
  120. package/linthost/rules_no_magic_numbers.go +60 -60
  121. package/linthost/rules_no_mixed_operators.go +44 -44
  122. package/linthost/rules_no_param_reassign.go +64 -64
  123. package/linthost/rules_no_restricted_imports.go +45 -45
  124. package/linthost/rules_no_restricted_syntax.go +17 -17
  125. package/linthost/rules_no_shadow.go +112 -112
  126. package/linthost/rules_no_unreachable.go +36 -36
  127. package/linthost/rules_no_useless_assignment.go +79 -79
  128. package/linthost/rules_no_useless_constructor.go +167 -167
  129. package/linthost/rules_no_useless_return.go +28 -28
  130. package/linthost/rules_prefer_arrow_callback.go +74 -74
  131. package/linthost/rules_prefer_destructuring.go +61 -61
  132. package/linthost/rules_prefer_named_capture_group.go +87 -87
  133. package/linthost/rules_prefer_rest_params.go +61 -61
  134. package/linthost/rules_promise.go +800 -800
  135. package/linthost/rules_react.go +600 -600
  136. package/linthost/rules_react_extras.go +162 -162
  137. package/linthost/rules_react_hooks.go +2 -2
  138. package/linthost/rules_react_perf.go +231 -231
  139. package/linthost/rules_regexp.go +293 -293
  140. package/linthost/rules_security.go +613 -613
  141. package/linthost/rules_sort_imports.go +37 -37
  142. package/linthost/rules_sort_keys.go +88 -88
  143. package/linthost/rules_suggestions.go +13 -0
  144. package/linthost/rules_ts.go +2 -2
  145. package/linthost/rules_ts_async.go +247 -247
  146. package/linthost/rules_ts_class_literal_property_style.go +64 -64
  147. package/linthost/rules_ts_consistent_type_exports.go +209 -209
  148. package/linthost/rules_ts_explicit_function_return_type.go +35 -35
  149. package/linthost/rules_ts_extra.go +6 -2
  150. package/linthost/rules_ts_no_base_to_string.go +140 -140
  151. package/linthost/rules_ts_no_confusing_void.go +28 -28
  152. package/linthost/rules_ts_no_deprecated.go +110 -110
  153. package/linthost/rules_ts_no_for_in_array.go +45 -45
  154. package/linthost/rules_ts_no_magic_numbers.go +67 -67
  155. package/linthost/rules_ts_no_meaningless_void_operator.go +44 -44
  156. package/linthost/rules_ts_no_misused_spread.go +64 -64
  157. package/linthost/rules_ts_no_redundant_type_constituents.go +72 -72
  158. package/linthost/rules_ts_no_restricted_types.go +28 -28
  159. package/linthost/rules_ts_no_unnecessary_boolean_literal_compare.go +87 -87
  160. package/linthost/rules_ts_no_unnecessary_condition.go +184 -184
  161. package/linthost/rules_ts_no_unnecessary_qualifier.go +72 -72
  162. package/linthost/rules_ts_no_unnecessary_template_expression.go +120 -120
  163. package/linthost/rules_ts_no_unnecessary_type_arguments.go +171 -171
  164. package/linthost/rules_ts_no_unnecessary_type_assertion.go +90 -90
  165. package/linthost/rules_ts_no_unsafe_argument.go +50 -50
  166. package/linthost/rules_ts_no_unsafe_assignment.go +60 -60
  167. package/linthost/rules_ts_no_unsafe_call.go +40 -40
  168. package/linthost/rules_ts_no_unsafe_enum_comparison.go +147 -147
  169. package/linthost/rules_ts_no_unsafe_member_access.go +29 -29
  170. package/linthost/rules_ts_no_unsafe_return.go +64 -64
  171. package/linthost/rules_ts_no_unsafe_unary_minus.go +42 -42
  172. package/linthost/rules_ts_no_useless_constructor.go +20 -20
  173. package/linthost/rules_ts_non_nullable_type_assertion_style.go +60 -60
  174. package/linthost/rules_ts_parameter_properties.go +10 -10
  175. package/linthost/rules_ts_prefer_find.go +116 -116
  176. package/linthost/rules_ts_prefer_includes.go +173 -173
  177. package/linthost/rules_ts_prefer_nullish_coalescing.go +54 -54
  178. package/linthost/rules_ts_prefer_optional_chain.go +156 -156
  179. package/linthost/rules_ts_prefer_promise_reject_errors.go +104 -104
  180. package/linthost/rules_ts_prefer_readonly.go +31 -31
  181. package/linthost/rules_ts_prefer_reduce_type_parameter.go +74 -74
  182. package/linthost/rules_ts_prefer_regexp_exec.go +69 -69
  183. package/linthost/rules_ts_prefer_return_this_type.go +79 -79
  184. package/linthost/rules_ts_prefer_string_starts_ends_with.go +237 -237
  185. package/linthost/rules_ts_promise_function_async.go +41 -41
  186. package/linthost/rules_ts_related_getter_setter_pairs.go +61 -61
  187. package/linthost/rules_ts_require_array_sort_compare.go +58 -58
  188. package/linthost/rules_ts_restrict_plus_operands.go +82 -82
  189. package/linthost/rules_ts_restrict_template_expressions.go +50 -50
  190. package/linthost/rules_ts_simple.go +249 -249
  191. package/linthost/rules_ts_sort_type_constituents.go +88 -88
  192. package/linthost/rules_ts_strict_boolean_expressions.go +103 -103
  193. package/linthost/rules_ts_switch_exhaustiveness_check.go +90 -90
  194. package/linthost/rules_ts_unbound_method.go +65 -65
  195. package/linthost/rules_tsdoc.go +88 -88
  196. package/linthost/rules_unicorn_better_regex.go +1 -1
  197. package/linthost/rules_unicorn_catch_error_name.go +19 -19
  198. package/linthost/rules_unicorn_consistent_assert.go +20 -20
  199. package/linthost/rules_unicorn_consistent_date_clone.go +27 -27
  200. package/linthost/rules_unicorn_consistent_destructuring.go +3 -3
  201. package/linthost/rules_unicorn_consistent_empty_array_spread.go +34 -34
  202. package/linthost/rules_unicorn_consistent_existence_index_check.go +42 -42
  203. package/linthost/rules_unicorn_consistent_function_scoping.go +3 -3
  204. package/linthost/rules_unicorn_consistent_template_literal_escape.go +3 -3
  205. package/linthost/rules_unicorn_custom_error_definition.go +92 -92
  206. package/linthost/rules_unicorn_empty_brace_spaces.go +47 -47
  207. package/linthost/rules_unicorn_error_message.go +34 -34
  208. package/linthost/rules_unicorn_escape_case.go +14 -14
  209. package/linthost/rules_unicorn_expiring_todo_comments.go +36 -36
  210. package/linthost/rules_unicorn_explicit_length_check.go +51 -51
  211. package/linthost/rules_unicorn_filename_case.go +1 -1
  212. package/linthost/rules_unicorn_import_style.go +1 -1
  213. package/linthost/rules_unicorn_isolated_functions.go +2 -2
  214. package/linthost/rules_unicorn_new_for_builtins.go +49 -49
  215. package/linthost/rules_unicorn_no_abusive_eslint_disable.go +31 -31
  216. package/linthost/rules_unicorn_no_accessor_recursion.go +69 -69
  217. package/linthost/rules_unicorn_no_anonymous_default_export.go +40 -40
  218. package/linthost/rules_unicorn_no_array_callback_reference.go +33 -33
  219. package/linthost/rules_unicorn_no_array_for_each.go +14 -14
  220. package/linthost/rules_unicorn_no_array_method_this_argument.go +29 -29
  221. package/linthost/rules_unicorn_no_array_reduce.go +15 -15
  222. package/linthost/rules_unicorn_no_array_reverse.go +17 -17
  223. package/linthost/rules_unicorn_no_array_sort.go +17 -17
  224. package/linthost/rules_unicorn_no_await_expression_member.go +12 -12
  225. package/linthost/rules_unicorn_no_await_in_promise_methods.go +38 -38
  226. package/linthost/rules_unicorn_no_console_spaces.go +30 -30
  227. package/linthost/rules_unicorn_no_document_cookie.go +13 -13
  228. package/linthost/rules_unicorn_no_empty_file.go +16 -16
  229. package/linthost/rules_unicorn_no_for_loop.go +58 -58
  230. package/linthost/rules_unicorn_no_hex_escape.go +11 -11
  231. package/linthost/rules_unicorn_no_immediate_mutation.go +55 -55
  232. package/linthost/rules_unicorn_no_instanceof_builtins.go +34 -34
  233. package/linthost/rules_unicorn_no_invalid_fetch_options.go +52 -52
  234. package/linthost/rules_unicorn_no_invalid_remove_event_listener.go +25 -25
  235. package/linthost/rules_unicorn_no_keyword_prefix.go +56 -56
  236. package/linthost/rules_unicorn_no_lonely_if.go +21 -21
  237. package/linthost/rules_unicorn_no_magic_array_flat_depth.go +22 -22
  238. package/linthost/rules_unicorn_no_named_default.go +25 -25
  239. package/linthost/rules_unicorn_no_negated_condition.go +54 -54
  240. package/linthost/rules_unicorn_no_negation_in_equality_check.go +23 -23
  241. package/linthost/rules_unicorn_no_nested_ternary.go +15 -15
  242. package/linthost/rules_unicorn_no_new_array.go +5 -5
  243. package/linthost/rules_unicorn_no_new_buffer.go +5 -5
  244. package/linthost/rules_unicorn_no_null.go +2 -2
  245. package/linthost/rules_unicorn_no_object_as_default_parameter.go +19 -19
  246. package/linthost/rules_unicorn_no_process_exit.go +17 -17
  247. package/linthost/rules_unicorn_no_single_promise_in_promise_methods.go +29 -29
  248. package/linthost/rules_unicorn_no_static_only_class.go +27 -27
  249. package/linthost/rules_unicorn_no_thenable.go +47 -47
  250. package/linthost/rules_unicorn_no_this_assignment.go +10 -10
  251. package/linthost/rules_unicorn_no_typeof_undefined.go +31 -31
  252. package/linthost/rules_unicorn_no_unnecessary_array_flat_depth.go +23 -23
  253. package/linthost/rules_unicorn_no_unnecessary_array_splice_count.go +37 -37
  254. package/linthost/rules_unicorn_no_unnecessary_await.go +24 -24
  255. package/linthost/rules_unicorn_no_unnecessary_slice_end.go +22 -22
  256. package/linthost/rules_unicorn_no_unreadable_array_destructuring.go +67 -67
  257. package/linthost/rules_unicorn_no_unreadable_iife.go +22 -22
  258. package/linthost/rules_unicorn_no_useless_collection_argument.go +34 -34
  259. package/linthost/rules_unicorn_no_useless_error_capture_stack_trace.go +18 -18
  260. package/linthost/rules_unicorn_no_useless_fallback_in_spread.go +49 -49
  261. package/linthost/rules_unicorn_no_useless_iterator_to_array.go +41 -41
  262. package/linthost/rules_unicorn_no_useless_length_check.go +82 -82
  263. package/linthost/rules_unicorn_no_useless_promise_resolve_reject.go +42 -42
  264. package/linthost/rules_unicorn_no_useless_spread.go +38 -38
  265. package/linthost/rules_unicorn_no_useless_switch_case.go +29 -29
  266. package/linthost/rules_unicorn_no_useless_undefined.go +25 -25
  267. package/linthost/rules_unicorn_no_zero_fractions.go +17 -17
  268. package/linthost/rules_unicorn_number_literal_case.go +33 -33
  269. package/linthost/rules_unicorn_numeric_separators_style.go +36 -36
  270. package/linthost/rules_unicorn_prefer_add_event_listener.go +30 -30
  271. package/linthost/rules_unicorn_prefer_array_find.go +27 -27
  272. package/linthost/rules_unicorn_prefer_array_flat.go +25 -25
  273. package/linthost/rules_unicorn_prefer_array_flat_map.go +37 -37
  274. package/linthost/rules_unicorn_prefer_array_index_of.go +108 -108
  275. package/linthost/rules_unicorn_prefer_array_some.go +43 -43
  276. package/linthost/rules_unicorn_prefer_at.go +42 -42
  277. package/linthost/rules_unicorn_prefer_bigint_literals.go +42 -42
  278. package/linthost/rules_unicorn_prefer_blob_reading_methods.go +15 -15
  279. package/linthost/rules_unicorn_prefer_class_fields.go +57 -57
  280. package/linthost/rules_unicorn_prefer_classlist_toggle.go +76 -76
  281. package/linthost/rules_unicorn_prefer_code_point.go +21 -21
  282. package/linthost/rules_unicorn_prefer_date_now.go +47 -47
  283. package/linthost/rules_unicorn_prefer_default_parameters.go +96 -96
  284. package/linthost/rules_unicorn_prefer_dom_node_append.go +14 -14
  285. package/linthost/rules_unicorn_prefer_dom_node_dataset.go +27 -27
  286. package/linthost/rules_unicorn_prefer_dom_node_remove.go +17 -17
  287. package/linthost/rules_unicorn_prefer_dom_node_text_content.go +11 -11
  288. package/linthost/rules_unicorn_prefer_event_target.go +10 -10
  289. package/linthost/rules_unicorn_prefer_export_from.go +99 -99
  290. package/linthost/rules_unicorn_prefer_global_this.go +91 -91
  291. package/linthost/rules_unicorn_prefer_import_meta_properties.go +38 -38
  292. package/linthost/rules_unicorn_prefer_includes.go +108 -108
  293. package/linthost/rules_unicorn_prefer_json_parse_buffer.go +37 -37
  294. package/linthost/rules_unicorn_prefer_keyboard_event_key.go +10 -10
  295. package/linthost/rules_unicorn_prefer_logical_operator_over_ternary.go +20 -20
  296. package/linthost/rules_unicorn_prefer_math_min_max.go +33 -33
  297. package/linthost/rules_unicorn_prefer_math_trunc.go +32 -32
  298. package/linthost/rules_unicorn_prefer_modern_dom_apis.go +18 -18
  299. package/linthost/rules_unicorn_prefer_modern_math_apis.go +38 -38
  300. package/linthost/rules_unicorn_prefer_module.go +22 -22
  301. package/linthost/rules_unicorn_prefer_native_coercion_functions.go +73 -73
  302. package/linthost/rules_unicorn_prefer_negative_index.go +46 -46
  303. package/linthost/rules_unicorn_prefer_node_protocol.go +90 -90
  304. package/linthost/rules_unicorn_prefer_number_properties.go +57 -57
  305. package/linthost/rules_unicorn_prefer_object_from_entries.go +26 -26
  306. package/linthost/rules_unicorn_prefer_optional_catch_binding.go +24 -24
  307. package/linthost/rules_unicorn_prefer_prototype_methods.go +25 -25
  308. package/linthost/rules_unicorn_prefer_query_selector.go +25 -25
  309. package/linthost/rules_unicorn_prefer_reflect_apply.go +10 -10
  310. package/linthost/rules_unicorn_prefer_regexp_test_rule.go +47 -47
  311. package/linthost/rules_unicorn_prefer_response_static_json.go +26 -26
  312. package/linthost/rules_unicorn_prefer_set_has.go +16 -16
  313. package/linthost/rules_unicorn_prefer_set_size.go +22 -22
  314. package/linthost/rules_unicorn_prefer_simple_condition_first.go +3 -3
  315. package/linthost/rules_unicorn_prefer_single_call.go +59 -59
  316. package/linthost/rules_unicorn_prefer_spread.go +24 -24
  317. package/linthost/rules_unicorn_prefer_string_raw.go +12 -12
  318. package/linthost/rules_unicorn_prefer_string_replace_all.go +46 -46
  319. package/linthost/rules_unicorn_prefer_string_slice.go +17 -17
  320. package/linthost/rules_unicorn_prefer_string_starts_ends_with.go +104 -104
  321. package/linthost/rules_unicorn_prefer_string_trim_start_end.go +21 -21
  322. package/linthost/rules_unicorn_prefer_structured_clone.go +36 -36
  323. package/linthost/rules_unicorn_prefer_switch.go +65 -65
  324. package/linthost/rules_unicorn_prefer_ternary.go +35 -35
  325. package/linthost/rules_unicorn_prefer_top_level_await.go +34 -34
  326. package/linthost/rules_unicorn_prefer_type_error.go +84 -84
  327. package/linthost/rules_unicorn_prevent_abbreviations.go +68 -68
  328. package/linthost/rules_unicorn_relative_url_style.go +19 -19
  329. package/linthost/rules_unicorn_require_array_join_separator.go +18 -18
  330. package/linthost/rules_unicorn_require_module_attributes.go +25 -25
  331. package/linthost/rules_unicorn_require_module_specifiers.go +28 -28
  332. package/linthost/rules_unicorn_require_number_to_fixed_digits_argument.go +18 -18
  333. package/linthost/rules_unicorn_require_post_message_target_origin.go +18 -18
  334. package/linthost/rules_unicorn_string_content.go +1 -1
  335. package/linthost/rules_unicorn_switch_case_braces.go +16 -16
  336. package/linthost/rules_unicorn_switch_case_break_position.go +3 -3
  337. package/linthost/rules_unicorn_template_indent.go +1 -1
  338. package/linthost/rules_unicorn_text_encoding_identifier_case.go +36 -36
  339. package/linthost/rules_unicorn_throw_new_error.go +30 -30
  340. package/linthost/rules_var.go +273 -3
  341. package/package.json +3 -3
  342. package/src/defaultFormat.ts +11 -7
  343. package/src/structures/ITtscLintConfig.ts +5 -5
  344. package/src/structures/TtscLintRuleSetting.ts +19 -19
  345. package/src/structures/{ITtscLintFormat.ts → format/ITtscLintFormat.ts} +48 -75
  346. package/src/structures/format/ITtscLintFormatJsDoc.ts +16 -0
  347. package/src/structures/format/ITtscLintFormatSortImports.ts +62 -0
  348. package/src/structures/format/index.ts +3 -0
  349. package/src/structures/index.ts +1 -1
  350. package/src/structures/rules/ITtscLintBoundariesRuleOptions.ts +20 -31
  351. package/src/structures/rules/ITtscLintBoundariesRules.ts +32 -36
  352. package/src/structures/rules/ITtscLintContributorRules.ts +6 -7
  353. package/src/structures/rules/ITtscLintCoreRules.ts +380 -408
  354. package/src/structures/rules/ITtscLintCypressRuleOptions.ts +5 -5
  355. package/src/structures/rules/ITtscLintCypressRules.ts +34 -38
  356. package/src/structures/rules/ITtscLintFunctionalRuleOptions.ts +28 -41
  357. package/src/structures/rules/ITtscLintFunctionalRules.ts +51 -56
  358. package/src/structures/rules/ITtscLintJestRules.ts +63 -74
  359. package/src/structures/rules/ITtscLintJsdocRules.ts +47 -54
  360. package/src/structures/rules/ITtscLintJsxA11yRules.ts +94 -102
  361. package/src/structures/rules/ITtscLintNextjsRules.ts +50 -55
  362. package/src/structures/rules/ITtscLintPlaywrightRules.ts +104 -122
  363. package/src/structures/rules/ITtscLintPromiseRules.ts +62 -71
  364. package/src/structures/rules/ITtscLintReactPerfRuleOptions.ts +4 -4
  365. package/src/structures/rules/ITtscLintReactPerfRules.ts +17 -19
  366. package/src/structures/rules/ITtscLintReactRuleOptions.ts +8 -10
  367. package/src/structures/rules/ITtscLintReactRules.ts +91 -104
  368. package/src/structures/rules/ITtscLintRegexpRules.ts +46 -54
  369. package/src/structures/rules/ITtscLintRuleOptionsMap.ts +7 -8
  370. package/src/structures/rules/ITtscLintSecurityRules.ts +45 -52
  371. package/src/structures/rules/ITtscLintSolidRules.ts +53 -56
  372. package/src/structures/rules/ITtscLintStorybookRuleOptions.ts +3 -4
  373. package/src/structures/rules/ITtscLintStorybookRules.ts +60 -69
  374. package/src/structures/rules/ITtscLintTanstackQueryRules.ts +31 -37
  375. package/src/structures/rules/ITtscLintTestingLibraryRuleOptions.ts +2 -3
  376. package/src/structures/rules/ITtscLintTestingLibraryRules.ts +102 -119
  377. package/src/structures/rules/ITtscLintTypeScriptRules.ts +460 -518
  378. package/src/structures/rules/ITtscLintVitestRules.ts +43 -51
  379. package/lib/structures/ITtscLintFormat.js.map +0 -1
  380. /package/lib/structures/{ITtscLintFormat.js → format/ITtscLintFormat.js} +0 -0
@@ -26,52 +26,52 @@
26
26
  package linthost
27
27
 
28
28
  import (
29
- shimast "github.com/microsoft/typescript-go/shim/ast"
29
+ shimast "github.com/microsoft/typescript-go/shim/ast"
30
30
  )
31
31
 
32
32
  type noMagicNumbers struct{}
33
33
 
34
34
  func (noMagicNumbers) Name() string { return "no-magic-numbers" }
35
35
  func (noMagicNumbers) Visits() []shimast.Kind {
36
- return []shimast.Kind{shimast.KindNumericLiteral}
36
+ return []shimast.Kind{shimast.KindNumericLiteral}
37
37
  }
38
38
  func (noMagicNumbers) Check(ctx *Context, node *shimast.Node) {
39
- if node == nil {
40
- return
41
- }
42
- text := numericLiteralText(node)
43
- if isIgnoredMagicLiteralText(text) {
44
- return
45
- }
46
- parent := node.Parent
47
- if parent == nil {
48
- return
49
- }
50
- // `-N` is a PrefixUnaryExpression whose Operand is the literal. The
51
- // `-1` ignore list lives on the unary expression's combined text;
52
- // recognize the negated form here so the rule does not flag the `1`
53
- // inside `-1`.
54
- if parent.Kind == shimast.KindPrefixUnaryExpression {
55
- pre := parent.AsPrefixUnaryExpression()
56
- if pre != nil && pre.Operator == shimast.KindMinusToken && text == "1" {
57
- return
58
- }
59
- }
60
- // Initializer of a `const x = N` declaration: the named binding the
61
- // rule wants users to introduce.
62
- if isConstVariableInitializer(parent, node) {
63
- return
64
- }
65
- // Enum member value: `enum E { A = 0, B = 1 }` — the literal is
66
- // the binding's value position, so leave it alone.
67
- if parent.Kind == shimast.KindEnumMember {
68
- return
69
- }
70
- // `arr[0]` / `tuple[3]`: numeric index position of an element access.
71
- if isArrayIndexArgument(parent, node) {
72
- return
73
- }
74
- ctx.Report(node, "No magic number: "+text+".")
39
+ if node == nil {
40
+ return
41
+ }
42
+ text := numericLiteralText(node)
43
+ if isIgnoredMagicLiteralText(text) {
44
+ return
45
+ }
46
+ parent := node.Parent
47
+ if parent == nil {
48
+ return
49
+ }
50
+ // `-N` is a PrefixUnaryExpression whose Operand is the literal. The
51
+ // `-1` ignore list lives on the unary expression's combined text;
52
+ // recognize the negated form here so the rule does not flag the `1`
53
+ // inside `-1`.
54
+ if parent.Kind == shimast.KindPrefixUnaryExpression {
55
+ pre := parent.AsPrefixUnaryExpression()
56
+ if pre != nil && pre.Operator == shimast.KindMinusToken && text == "1" {
57
+ return
58
+ }
59
+ }
60
+ // Initializer of a `const x = N` declaration: the named binding the
61
+ // rule wants users to introduce.
62
+ if isConstVariableInitializer(parent, node) {
63
+ return
64
+ }
65
+ // Enum member value: `enum E { A = 0, B = 1 }` — the literal is
66
+ // the binding's value position, so leave it alone.
67
+ if parent.Kind == shimast.KindEnumMember {
68
+ return
69
+ }
70
+ // `arr[0]` / `tuple[3]`: numeric index position of an element access.
71
+ if isArrayIndexArgument(parent, node) {
72
+ return
73
+ }
74
+ ctx.Report(node, "No magic number: "+text+".")
75
75
  }
76
76
 
77
77
  // isIgnoredMagicLiteralText reports whether the literal text falls into
@@ -79,11 +79,11 @@ func (noMagicNumbers) Check(ctx *Context, node *shimast.Node) {
79
79
  // minus lives on a PrefixUnaryExpression parent), so the table here only
80
80
  // needs the two zero / one shapes.
81
81
  func isIgnoredMagicLiteralText(text string) bool {
82
- switch text {
83
- case "0", "1":
84
- return true
85
- }
86
- return false
82
+ switch text {
83
+ case "0", "1":
84
+ return true
85
+ }
86
+ return false
87
87
  }
88
88
 
89
89
  // isConstVariableInitializer reports whether `literal` sits in the
@@ -92,14 +92,14 @@ func isIgnoredMagicLiteralText(text string) bool {
92
92
  // reassigned, so the number is still magic in the position it was
93
93
  // written.
94
94
  func isConstVariableInitializer(parent, literal *shimast.Node) bool {
95
- if parent == nil || parent.Kind != shimast.KindVariableDeclaration {
96
- return false
97
- }
98
- decl := parent.AsVariableDeclaration()
99
- if decl == nil || decl.Initializer != literal {
100
- return false
101
- }
102
- return shimast.IsConst(parent)
95
+ if parent == nil || parent.Kind != shimast.KindVariableDeclaration {
96
+ return false
97
+ }
98
+ decl := parent.AsVariableDeclaration()
99
+ if decl == nil || decl.Initializer != literal {
100
+ return false
101
+ }
102
+ return shimast.IsConst(parent)
103
103
  }
104
104
 
105
105
  // isArrayIndexArgument reports whether `literal` sits in the
@@ -108,16 +108,16 @@ func isConstVariableInitializer(parent, literal *shimast.Node) bool {
108
108
  // baseline enables it because mixing numeric subscripts with renamed
109
109
  // constants reads worse than the literal.
110
110
  func isArrayIndexArgument(parent, literal *shimast.Node) bool {
111
- if parent == nil || parent.Kind != shimast.KindElementAccessExpression {
112
- return false
113
- }
114
- access := parent.AsElementAccessExpression()
115
- if access == nil {
116
- return false
117
- }
118
- return access.ArgumentExpression == literal
111
+ if parent == nil || parent.Kind != shimast.KindElementAccessExpression {
112
+ return false
113
+ }
114
+ access := parent.AsElementAccessExpression()
115
+ if access == nil {
116
+ return false
117
+ }
118
+ return access.ArgumentExpression == literal
119
119
  }
120
120
 
121
121
  func init() {
122
- Register(noMagicNumbers{})
122
+ Register(noMagicNumbers{})
123
123
  }
@@ -18,63 +18,63 @@ import shimast "github.com/microsoft/typescript-go/shim/ast"
18
18
  type noMixedOperators struct{}
19
19
 
20
20
  const (
21
- mixedGroupLogical = 1
22
- mixedGroupBitwise = 2
23
- mixedGroupComparison = 3
21
+ mixedGroupLogical = 1
22
+ mixedGroupBitwise = 2
23
+ mixedGroupComparison = 3
24
24
  )
25
25
 
26
- func (noMixedOperators) Name() string { return "no-mixed-operators" }
26
+ func (noMixedOperators) Name() string { return "no-mixed-operators" }
27
27
  func (noMixedOperators) Visits() []shimast.Kind { return []shimast.Kind{shimast.KindBinaryExpression} }
28
28
  func (noMixedOperators) Check(ctx *Context, node *shimast.Node) {
29
- expr := node.AsBinaryExpression()
30
- if expr == nil || expr.OperatorToken == nil {
31
- return
32
- }
33
- parent := noMixedOperatorsGroup(expr.OperatorToken.Kind)
34
- if parent == 0 {
35
- return
36
- }
37
- op := expr.OperatorToken.Kind
38
- if noMixedOperatorsConflicts(parent, op, expr.Left) ||
39
- noMixedOperatorsConflicts(parent, op, expr.Right) {
40
- ctx.Report(node, "Unexpected mix of different operators. Wrap the inner expression in parentheses to make the grouping explicit.")
41
- }
29
+ expr := node.AsBinaryExpression()
30
+ if expr == nil || expr.OperatorToken == nil {
31
+ return
32
+ }
33
+ parent := noMixedOperatorsGroup(expr.OperatorToken.Kind)
34
+ if parent == 0 {
35
+ return
36
+ }
37
+ op := expr.OperatorToken.Kind
38
+ if noMixedOperatorsConflicts(parent, op, expr.Left) ||
39
+ noMixedOperatorsConflicts(parent, op, expr.Right) {
40
+ ctx.Report(node, "Unexpected mix of different operators. Wrap the inner expression in parentheses to make the grouping explicit.")
41
+ }
42
42
  }
43
43
 
44
44
  // noMixedOperatorsConflicts returns true when `child` is an
45
45
  // unparenthesized BinaryExpression whose operator group is confusing
46
46
  // next to the parent group. Same operator never conflicts.
47
47
  func noMixedOperatorsConflicts(parent int, parentOp shimast.Kind, child *shimast.Node) bool {
48
- if child == nil || child.Kind != shimast.KindBinaryExpression {
49
- return false
50
- }
51
- inner := child.AsBinaryExpression()
52
- if inner == nil || inner.OperatorToken == nil || inner.OperatorToken.Kind == parentOp {
53
- return false
54
- }
55
- g := noMixedOperatorsGroup(inner.OperatorToken.Kind)
56
- if g == 0 {
57
- return false
58
- }
59
- if parent == mixedGroupLogical {
60
- return g == mixedGroupLogical || g == mixedGroupBitwise
61
- }
62
- return parent == mixedGroupBitwise && (g == mixedGroupLogical || g == mixedGroupComparison)
48
+ if child == nil || child.Kind != shimast.KindBinaryExpression {
49
+ return false
50
+ }
51
+ inner := child.AsBinaryExpression()
52
+ if inner == nil || inner.OperatorToken == nil || inner.OperatorToken.Kind == parentOp {
53
+ return false
54
+ }
55
+ g := noMixedOperatorsGroup(inner.OperatorToken.Kind)
56
+ if g == 0 {
57
+ return false
58
+ }
59
+ if parent == mixedGroupLogical {
60
+ return g == mixedGroupLogical || g == mixedGroupBitwise
61
+ }
62
+ return parent == mixedGroupBitwise && (g == mixedGroupLogical || g == mixedGroupComparison)
63
63
  }
64
64
 
65
65
  func noMixedOperatorsGroup(op shimast.Kind) int {
66
- switch op {
67
- case shimast.KindAmpersandAmpersandToken, shimast.KindBarBarToken, shimast.KindQuestionQuestionToken:
68
- return mixedGroupLogical
69
- case shimast.KindAmpersandToken, shimast.KindBarToken, shimast.KindCaretToken:
70
- return mixedGroupBitwise
71
- case shimast.KindEqualsEqualsToken, shimast.KindEqualsEqualsEqualsToken,
72
- shimast.KindExclamationEqualsToken, shimast.KindExclamationEqualsEqualsToken,
73
- shimast.KindLessThanToken, shimast.KindLessThanEqualsToken,
74
- shimast.KindGreaterThanToken, shimast.KindGreaterThanEqualsToken:
75
- return mixedGroupComparison
76
- }
77
- return 0
66
+ switch op {
67
+ case shimast.KindAmpersandAmpersandToken, shimast.KindBarBarToken, shimast.KindQuestionQuestionToken:
68
+ return mixedGroupLogical
69
+ case shimast.KindAmpersandToken, shimast.KindBarToken, shimast.KindCaretToken:
70
+ return mixedGroupBitwise
71
+ case shimast.KindEqualsEqualsToken, shimast.KindEqualsEqualsEqualsToken,
72
+ shimast.KindExclamationEqualsToken, shimast.KindExclamationEqualsEqualsToken,
73
+ shimast.KindLessThanToken, shimast.KindLessThanEqualsToken,
74
+ shimast.KindGreaterThanToken, shimast.KindGreaterThanEqualsToken:
75
+ return mixedGroupComparison
76
+ }
77
+ return 0
78
78
  }
79
79
 
80
80
  func init() { Register(noMixedOperators{}) }
@@ -20,79 +20,79 @@ type noParamReassign struct{}
20
20
 
21
21
  func (noParamReassign) Name() string { return "no-param-reassign" }
22
22
  func (noParamReassign) Visits() []shimast.Kind {
23
- return []shimast.Kind{
24
- shimast.KindFunctionDeclaration,
25
- shimast.KindFunctionExpression,
26
- shimast.KindArrowFunction,
27
- shimast.KindMethodDeclaration,
28
- shimast.KindConstructor,
29
- shimast.KindGetAccessor,
30
- shimast.KindSetAccessor,
31
- }
23
+ return []shimast.Kind{
24
+ shimast.KindFunctionDeclaration,
25
+ shimast.KindFunctionExpression,
26
+ shimast.KindArrowFunction,
27
+ shimast.KindMethodDeclaration,
28
+ shimast.KindConstructor,
29
+ shimast.KindGetAccessor,
30
+ shimast.KindSetAccessor,
31
+ }
32
32
  }
33
33
  func (noParamReassign) Check(ctx *Context, node *shimast.Node) {
34
- body := node.Body()
35
- if body == nil {
36
- return
37
- }
38
- names := map[string]bool{}
39
- for _, p := range node.Parameters() {
40
- if decl := p.AsParameterDeclaration(); decl != nil {
41
- if name := identifierText(decl.Name()); name != "" {
42
- names[name] = true
43
- }
44
- }
45
- }
46
- if len(names) == 0 {
47
- return
48
- }
49
- walkParamReassignBody(body, names, func(target *shimast.Node) {
50
- ctx.Report(target, "Assignment to function parameter.")
51
- })
34
+ body := node.Body()
35
+ if body == nil {
36
+ return
37
+ }
38
+ names := map[string]bool{}
39
+ for _, p := range node.Parameters() {
40
+ if decl := p.AsParameterDeclaration(); decl != nil {
41
+ if name := identifierText(decl.Name()); name != "" {
42
+ names[name] = true
43
+ }
44
+ }
45
+ }
46
+ if len(names) == 0 {
47
+ return
48
+ }
49
+ walkParamReassignBody(body, names, func(target *shimast.Node) {
50
+ ctx.Report(target, "Assignment to function parameter.")
51
+ })
52
52
  }
53
53
 
54
54
  // walkParamReassignBody visits every assignment-like write in `root`
55
55
  // without crossing nested function-like scopes. The target identifier
56
56
  // must be a bare name in `names` for `report` to fire.
57
57
  func walkParamReassignBody(root *shimast.Node, names map[string]bool, report func(*shimast.Node)) {
58
- if root == nil {
59
- return
60
- }
61
- var walk func(*shimast.Node)
62
- hits := func(operand *shimast.Node) bool {
63
- name := identifierText(stripParens(operand))
64
- return name != "" && names[name]
65
- }
66
- walk = func(node *shimast.Node) {
67
- if node == nil || (node != root && isFunctionLikeKind(node)) {
68
- return
69
- }
70
- switch node.Kind {
71
- case shimast.KindBinaryExpression:
72
- expr := node.AsBinaryExpression()
73
- if expr != nil && expr.OperatorToken != nil &&
74
- isAssignmentOperator(expr.OperatorToken.Kind) && hits(expr.Left) {
75
- report(node)
76
- }
77
- case shimast.KindPrefixUnaryExpression:
78
- pre := node.AsPrefixUnaryExpression()
79
- if pre != nil && (pre.Operator == shimast.KindPlusPlusToken || pre.Operator == shimast.KindMinusMinusToken) && hits(pre.Operand) {
80
- report(node)
81
- }
82
- case shimast.KindPostfixUnaryExpression:
83
- post := node.AsPostfixUnaryExpression()
84
- if post != nil && (post.Operator == shimast.KindPlusPlusToken || post.Operator == shimast.KindMinusMinusToken) && hits(post.Operand) {
85
- report(node)
86
- }
87
- }
88
- node.ForEachChild(func(child *shimast.Node) bool {
89
- walk(child)
90
- return false
91
- })
92
- }
93
- walk(root)
58
+ if root == nil {
59
+ return
60
+ }
61
+ var walk func(*shimast.Node)
62
+ hits := func(operand *shimast.Node) bool {
63
+ name := identifierText(stripParens(operand))
64
+ return name != "" && names[name]
65
+ }
66
+ walk = func(node *shimast.Node) {
67
+ if node == nil || (node != root && isFunctionLikeKind(node)) {
68
+ return
69
+ }
70
+ switch node.Kind {
71
+ case shimast.KindBinaryExpression:
72
+ expr := node.AsBinaryExpression()
73
+ if expr != nil && expr.OperatorToken != nil &&
74
+ isAssignmentOperator(expr.OperatorToken.Kind) && hits(expr.Left) {
75
+ report(node)
76
+ }
77
+ case shimast.KindPrefixUnaryExpression:
78
+ pre := node.AsPrefixUnaryExpression()
79
+ if pre != nil && (pre.Operator == shimast.KindPlusPlusToken || pre.Operator == shimast.KindMinusMinusToken) && hits(pre.Operand) {
80
+ report(node)
81
+ }
82
+ case shimast.KindPostfixUnaryExpression:
83
+ post := node.AsPostfixUnaryExpression()
84
+ if post != nil && (post.Operator == shimast.KindPlusPlusToken || post.Operator == shimast.KindMinusMinusToken) && hits(post.Operand) {
85
+ report(node)
86
+ }
87
+ }
88
+ node.ForEachChild(func(child *shimast.Node) bool {
89
+ walk(child)
90
+ return false
91
+ })
92
+ }
93
+ walk(root)
94
94
  }
95
95
 
96
96
  func init() {
97
- Register(noParamReassign{})
97
+ Register(noParamReassign{})
98
98
  }
@@ -17,9 +17,9 @@
17
17
  package linthost
18
18
 
19
19
  import (
20
- "encoding/json"
20
+ "encoding/json"
21
21
 
22
- shimast "github.com/microsoft/typescript-go/shim/ast"
22
+ shimast "github.com/microsoft/typescript-go/shim/ast"
23
23
  )
24
24
 
25
25
  type noRestrictedImports struct{}
@@ -29,7 +29,7 @@ type noRestrictedImports struct{}
29
29
  // future ESLint-compatible keys (e.g. `patterns`) can be layered in
30
30
  // without changing existing configs.
31
31
  type noRestrictedImportsOptions struct {
32
- Paths []string `json:"paths"`
32
+ Paths []string `json:"paths"`
33
33
  }
34
34
 
35
35
  // hardCodedRestrictedImports is the default deny list used when the
@@ -42,47 +42,47 @@ var hardCodedRestrictedImports = []string{"lodash", "underscore"}
42
42
 
43
43
  func (noRestrictedImports) Name() string { return "no-restricted-imports" }
44
44
  func (noRestrictedImports) Visits() []shimast.Kind {
45
- return []shimast.Kind{
46
- shimast.KindImportDeclaration,
47
- shimast.KindExportDeclaration,
48
- }
45
+ return []shimast.Kind{
46
+ shimast.KindImportDeclaration,
47
+ shimast.KindExportDeclaration,
48
+ }
49
49
  }
50
50
  func (noRestrictedImports) Check(ctx *Context, node *shimast.Node) {
51
- specifierNode := moduleSpecifierOf(node)
52
- if specifierNode == nil {
53
- return
54
- }
55
- specifier := stringLiteralText(specifierNode)
56
- if specifier == "" {
57
- return
58
- }
59
- denied := resolveNoRestrictedImportsPaths(ctx)
60
- for _, target := range denied {
61
- if specifier == target {
62
- ctx.Report(specifierNode, "'"+specifier+"' import is restricted from being used.")
63
- return
64
- }
65
- }
51
+ specifierNode := moduleSpecifierOf(node)
52
+ if specifierNode == nil {
53
+ return
54
+ }
55
+ specifier := stringLiteralText(specifierNode)
56
+ if specifier == "" {
57
+ return
58
+ }
59
+ denied := resolveNoRestrictedImportsPaths(ctx)
60
+ for _, target := range denied {
61
+ if specifier == target {
62
+ ctx.Report(specifierNode, "'"+specifier+"' import is restricted from being used.")
63
+ return
64
+ }
65
+ }
66
66
  }
67
67
 
68
68
  // moduleSpecifierOf returns the `from "…"` string-literal node of the
69
69
  // import / re-export declaration. `export { x }` (no `from`) and
70
70
  // every other shape returns nil so the caller short-circuits.
71
71
  func moduleSpecifierOf(node *shimast.Node) *shimast.Node {
72
- if node == nil {
73
- return nil
74
- }
75
- switch node.Kind {
76
- case shimast.KindImportDeclaration:
77
- if imp := node.AsImportDeclaration(); imp != nil {
78
- return imp.ModuleSpecifier
79
- }
80
- case shimast.KindExportDeclaration:
81
- if exp := node.AsExportDeclaration(); exp != nil {
82
- return exp.ModuleSpecifier
83
- }
84
- }
85
- return nil
72
+ if node == nil {
73
+ return nil
74
+ }
75
+ switch node.Kind {
76
+ case shimast.KindImportDeclaration:
77
+ if imp := node.AsImportDeclaration(); imp != nil {
78
+ return imp.ModuleSpecifier
79
+ }
80
+ case shimast.KindExportDeclaration:
81
+ if exp := node.AsExportDeclaration(); exp != nil {
82
+ return exp.ModuleSpecifier
83
+ }
84
+ }
85
+ return nil
86
86
  }
87
87
 
88
88
  // resolveNoRestrictedImportsPaths returns the active deny list for the
@@ -90,16 +90,16 @@ func moduleSpecifierOf(node *shimast.Node) *shimast.Node {
90
90
  // empty / missing blob falls back to `hardCodedRestrictedImports` so
91
91
  // the AST-layer test fires deterministically.
92
92
  func resolveNoRestrictedImportsPaths(ctx *Context) []string {
93
- if ctx == nil || len(ctx.Options) == 0 {
94
- return hardCodedRestrictedImports
95
- }
96
- var opts noRestrictedImportsOptions
97
- if err := json.Unmarshal(ctx.Options, &opts); err != nil || len(opts.Paths) == 0 {
98
- return hardCodedRestrictedImports
99
- }
100
- return opts.Paths
93
+ if ctx == nil || len(ctx.Options) == 0 {
94
+ return hardCodedRestrictedImports
95
+ }
96
+ var opts noRestrictedImportsOptions
97
+ if err := json.Unmarshal(ctx.Options, &opts); err != nil || len(opts.Paths) == 0 {
98
+ return hardCodedRestrictedImports
99
+ }
100
+ return opts.Paths
101
101
  }
102
102
 
103
103
  func init() {
104
- Register(noRestrictedImports{})
104
+ Register(noRestrictedImports{})
105
105
  }
@@ -12,38 +12,38 @@
12
12
  package linthost
13
13
 
14
14
  import (
15
- shimast "github.com/microsoft/typescript-go/shim/ast"
15
+ shimast "github.com/microsoft/typescript-go/shim/ast"
16
16
  )
17
17
 
18
18
  // noRestrictedSyntaxDefault is the built-in denylist surfaced when no
19
19
  // config is supplied. Each entry pairs a banned node kind with the
20
20
  // short, actionable message reported at the offending node.
21
21
  var noRestrictedSyntaxDefault = map[shimast.Kind]string{
22
- shimast.KindWithStatement: "`with` statements are restricted — use explicit property access instead.",
23
- shimast.KindLabeledStatement: "Labeled statements are restricted — refactor the surrounding control flow instead.",
22
+ shimast.KindWithStatement: "`with` statements are restricted — use explicit property access instead.",
23
+ shimast.KindLabeledStatement: "Labeled statements are restricted — refactor the surrounding control flow instead.",
24
24
  }
25
25
 
26
26
  type noRestrictedSyntax struct{}
27
27
 
28
28
  func (noRestrictedSyntax) Name() string { return "no-restricted-syntax" }
29
29
  func (noRestrictedSyntax) Visits() []shimast.Kind {
30
- kinds := make([]shimast.Kind, 0, len(noRestrictedSyntaxDefault))
31
- for kind := range noRestrictedSyntaxDefault {
32
- kinds = append(kinds, kind)
33
- }
34
- return kinds
30
+ kinds := make([]shimast.Kind, 0, len(noRestrictedSyntaxDefault))
31
+ for kind := range noRestrictedSyntaxDefault {
32
+ kinds = append(kinds, kind)
33
+ }
34
+ return kinds
35
35
  }
36
36
  func (noRestrictedSyntax) Check(ctx *Context, node *shimast.Node) {
37
- if node == nil {
38
- return
39
- }
40
- message, banned := noRestrictedSyntaxDefault[node.Kind]
41
- if !banned {
42
- return
43
- }
44
- ctx.Report(node, message)
37
+ if node == nil {
38
+ return
39
+ }
40
+ message, banned := noRestrictedSyntaxDefault[node.Kind]
41
+ if !banned {
42
+ return
43
+ }
44
+ ctx.Report(node, message)
45
45
  }
46
46
 
47
47
  func init() {
48
- Register(noRestrictedSyntax{})
48
+ Register(noRestrictedSyntax{})
49
49
  }