@sun-asterisk/sunlint 1.3.43 → 1.3.44

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 (137) hide show
  1. package/dart_analyzer/README.md +226 -0
  2. package/dart_analyzer/analysis_options.yaml +66 -0
  3. package/dart_analyzer/bin/sunlint-dart-macos +0 -0
  4. package/dart_analyzer/bin/sunlint_dart_analyzer.dart +124 -0
  5. package/dart_analyzer/lib/analyzer_service.dart +625 -0
  6. package/dart_analyzer/lib/json_rpc_server.dart +275 -0
  7. package/dart_analyzer/lib/models/rule.dart +67 -0
  8. package/dart_analyzer/lib/models/symbol_table.dart +607 -0
  9. package/dart_analyzer/lib/models/violation.dart +69 -0
  10. package/dart_analyzer/lib/rules/base_analyzer.dart +52 -0
  11. package/dart_analyzer/lib/rules/common/C002_no_duplicate_code.dart +344 -0
  12. package/dart_analyzer/lib/rules/common/C003_no_vague_abbreviations.dart +318 -0
  13. package/dart_analyzer/lib/rules/common/C006_function_naming.dart +219 -0
  14. package/dart_analyzer/lib/rules/common/C008_variable_declaration_locality.dart +205 -0
  15. package/dart_analyzer/lib/rules/common/C010_limit_block_nesting.dart +162 -0
  16. package/dart_analyzer/lib/rules/common/C012_command_query_separation.dart +214 -0
  17. package/dart_analyzer/lib/rules/common/C013_no_dead_code.dart +225 -0
  18. package/dart_analyzer/lib/rules/common/C014_dependency_injection.dart +249 -0
  19. package/dart_analyzer/lib/rules/common/C017_constructor_logic.dart +158 -0
  20. package/dart_analyzer/lib/rules/common/C018_no_throw_generic_error.dart +141 -0
  21. package/dart_analyzer/lib/rules/common/C019_log_level_usage.dart +165 -0
  22. package/dart_analyzer/lib/rules/common/C020_unused_imports.dart +128 -0
  23. package/dart_analyzer/lib/rules/common/C021_import_organization.dart +86 -0
  24. package/dart_analyzer/lib/rules/common/C023_no_duplicate_variable.dart +112 -0
  25. package/dart_analyzer/lib/rules/common/C024_no_scatter_hardcoded_constants.dart +79 -0
  26. package/dart_analyzer/lib/rules/common/C029_catch_block_logging.dart +81 -0
  27. package/dart_analyzer/lib/rules/common/C030_use_custom_error_classes.dart +77 -0
  28. package/dart_analyzer/lib/rules/common/C031_validation_separation.dart +90 -0
  29. package/dart_analyzer/lib/rules/common/C033_separate_service_repository.dart +80 -0
  30. package/dart_analyzer/lib/rules/common/C035_error_logging_context.dart +148 -0
  31. package/dart_analyzer/lib/rules/common/C040_centralized_validation.dart +84 -0
  32. package/dart_analyzer/lib/rules/common/C041_no_sensitive_hardcode.dart +103 -0
  33. package/dart_analyzer/lib/rules/common/C042_boolean_name_prefix.dart +105 -0
  34. package/dart_analyzer/lib/rules/common/C043_no_console_or_print.dart +101 -0
  35. package/dart_analyzer/lib/rules/common/C047_no_duplicate_retry_logic.dart +94 -0
  36. package/dart_analyzer/lib/rules/common/C048_no_bypass_architectural_layers.dart +132 -0
  37. package/dart_analyzer/lib/rules/common/C052_parsing_or_data_transformation.dart +95 -0
  38. package/dart_analyzer/lib/rules/common/C060_no_override_superclass.dart +81 -0
  39. package/dart_analyzer/lib/rules/common/C065_one_behavior_per_test.dart +83 -0
  40. package/dart_analyzer/lib/rules/common/C067_no_hardcoded_config.dart +89 -0
  41. package/dart_analyzer/lib/rules/common/C070_no_real_time_tests.dart +99 -0
  42. package/dart_analyzer/lib/rules/common/C072_single_test_behavior.dart +78 -0
  43. package/dart_analyzer/lib/rules/common/C073_validate_required_config_on_startup.dart +82 -0
  44. package/dart_analyzer/lib/rules/common/C075_explicit_return_types.dart +85 -0
  45. package/dart_analyzer/lib/rules/common/C076_explicit_function_types.dart +104 -0
  46. package/dart_analyzer/lib/rules/dart/D001_recommended_lint_rules.dart +309 -0
  47. package/dart_analyzer/lib/rules/dart/D002_dispose_resources.dart +338 -0
  48. package/dart_analyzer/lib/rules/dart/D003_prefer_widgets_over_methods.dart +273 -0
  49. package/dart_analyzer/lib/rules/dart/D004_avoid_shrinkwrap_listview.dart +154 -0
  50. package/dart_analyzer/lib/rules/dart/D005_limit_widget_nesting.dart +265 -0
  51. package/dart_analyzer/lib/rules/dart/D006_prefer_extracting_large_callbacks.dart +135 -0
  52. package/dart_analyzer/lib/rules/dart/D007_prefer_init_first_dispose_last.dart +150 -0
  53. package/dart_analyzer/lib/rules/dart/D008_avoid_long_functions.dart +394 -0
  54. package/dart_analyzer/lib/rules/dart/D009_limit_function_parameters.dart +179 -0
  55. package/dart_analyzer/lib/rules/dart/D010_limit_cyclomatic_complexity.dart +257 -0
  56. package/dart_analyzer/lib/rules/dart/D011_prefer_named_parameters.dart +152 -0
  57. package/dart_analyzer/lib/rules/dart/D012_prefer_named_boolean_parameters.dart +156 -0
  58. package/dart_analyzer/lib/rules/dart/D013_single_public_class.dart +246 -0
  59. package/dart_analyzer/lib/rules/dart/D014_unsafe_collection_access.dart +202 -0
  60. package/dart_analyzer/lib/rules/dart/D015_copywith_all_parameters.dart +125 -0
  61. package/dart_analyzer/lib/rules/dart/D016_project_should_have_tests.dart +134 -0
  62. package/dart_analyzer/lib/rules/dart/D017_pubspec_dependencies_review.dart +187 -0
  63. package/dart_analyzer/lib/rules/dart/D018_remove_commented_code.dart +196 -0
  64. package/dart_analyzer/lib/rules/dart/D019_avoid_single_child_multi_child_widget.dart +161 -0
  65. package/dart_analyzer/lib/rules/dart/D020_limit_if_else_branches.dart +125 -0
  66. package/dart_analyzer/lib/rules/dart/D021_avoid_negated_boolean_checks.dart +227 -0
  67. package/dart_analyzer/lib/rules/dart/D022_use_setstate_correctly.dart +269 -0
  68. package/dart_analyzer/lib/rules/dart/D023_avoid_unnecessary_method_overrides.dart +191 -0
  69. package/dart_analyzer/lib/rules/dart/D024_avoid_unnecessary_stateful_widget.dart +194 -0
  70. package/dart_analyzer/lib/rules/dart/D025_avoid_nested_conditional_expressions.dart +90 -0
  71. package/dart_analyzer/lib/rules/security/S001_backend_auth_communications.dart +155 -0
  72. package/dart_analyzer/lib/rules/security/S002_os_command_injection.dart +159 -0
  73. package/dart_analyzer/lib/rules/security/S003_open_redirect_protection.dart +208 -0
  74. package/dart_analyzer/lib/rules/security/S004_sensitive_data_logging.dart +391 -0
  75. package/dart_analyzer/lib/rules/security/S005_trusted_service_authorization.dart +182 -0
  76. package/dart_analyzer/lib/rules/security/S006_no_default_credentials.dart +208 -0
  77. package/dart_analyzer/lib/rules/security/S007_output_encoding.dart +224 -0
  78. package/dart_analyzer/lib/rules/security/S008_svg_content_sanitization.dart +211 -0
  79. package/dart_analyzer/lib/rules/security/S009_no_insecure_encryption.dart +160 -0
  80. package/dart_analyzer/lib/rules/security/S010_use_csprng.dart +184 -0
  81. package/dart_analyzer/lib/rules/security/S011_ech_tls_config.dart +175 -0
  82. package/dart_analyzer/lib/rules/security/S012_hardcoded_secrets.dart +255 -0
  83. package/dart_analyzer/lib/rules/security/S013_tls_enforcement.dart +148 -0
  84. package/dart_analyzer/lib/rules/security/S014_tls_version_enforcement.dart +117 -0
  85. package/dart_analyzer/lib/rules/security/S015_insecure_tls_certificate.dart +315 -0
  86. package/dart_analyzer/lib/rules/security/S016_no_sensitive_querystring.dart +244 -0
  87. package/dart_analyzer/lib/rules/security/S017_use_parameterized_queries.dart +191 -0
  88. package/dart_analyzer/lib/rules/security/S018_no_sensitive_browser_storage.dart +175 -0
  89. package/dart_analyzer/lib/rules/security/S019_smtp_injection_protection.dart +166 -0
  90. package/dart_analyzer/lib/rules/security/S020_no_eval_dynamic_code.dart +149 -0
  91. package/dart_analyzer/lib/rules/security/S021_referrer_policy.dart +146 -0
  92. package/dart_analyzer/lib/rules/security/S022_escape_output_context.dart +111 -0
  93. package/dart_analyzer/lib/rules/security/S023_no_json_injection.dart +550 -0
  94. package/dart_analyzer/lib/rules/security/S024_xpath_xxe_protection.dart +299 -0
  95. package/dart_analyzer/lib/rules/security/S025_server_side_validation.dart +140 -0
  96. package/dart_analyzer/lib/rules/security/S026_tls_all_connections.dart +196 -0
  97. package/dart_analyzer/lib/rules/security/S027_mtls_certificate_validation.dart +195 -0
  98. package/dart_analyzer/lib/rules/security/S028_file_upload_size_limits.dart +186 -0
  99. package/dart_analyzer/lib/rules/security/S029_csrf_protection.dart +171 -0
  100. package/dart_analyzer/lib/rules/security/S030_directory_browsing_protection.dart +144 -0
  101. package/dart_analyzer/lib/rules/security/S031_secure_session_cookies.dart +118 -0
  102. package/dart_analyzer/lib/rules/security/S032_httponly_session_cookies.dart +114 -0
  103. package/dart_analyzer/lib/rules/security/S033_samesite_session_cookies.dart +120 -0
  104. package/dart_analyzer/lib/rules/security/S034_host_prefix_session_cookies.dart +160 -0
  105. package/dart_analyzer/lib/rules/security/S035_separate_app_hostnames.dart +117 -0
  106. package/dart_analyzer/lib/rules/security/S036_lfi_rfi_protection.dart +188 -0
  107. package/dart_analyzer/lib/rules/security/S037_cache_headers.dart +113 -0
  108. package/dart_analyzer/lib/rules/security/S038_no_version_headers.dart +114 -0
  109. package/dart_analyzer/lib/rules/security/S039_tls_certificate_validation.dart +131 -0
  110. package/dart_analyzer/lib/rules/security/S040_session_fixation_protection.dart +155 -0
  111. package/dart_analyzer/lib/rules/security/S041_session_token_invalidation.dart +201 -0
  112. package/dart_analyzer/lib/rules/security/S042_require_re_authentication_for_long_lived.dart +158 -0
  113. package/dart_analyzer/lib/rules/security/S043_password_changes_invalidate_all_sessions.dart +88 -0
  114. package/dart_analyzer/lib/rules/security/S044_re_authentication_required.dart +119 -0
  115. package/dart_analyzer/lib/rules/security/S045_brute_force_protection.dart +253 -0
  116. package/dart_analyzer/lib/rules/security/S046_jwt_algorithm_allowlist.dart +113 -0
  117. package/dart_analyzer/lib/rules/security/S047_oauth_pkce_protection.dart +124 -0
  118. package/dart_analyzer/lib/rules/security/S048_oauth_redirect_uri_validation.dart +134 -0
  119. package/dart_analyzer/lib/rules/security/S049_short_validity_tokens.dart +145 -0
  120. package/dart_analyzer/lib/rules/security/S050_reference_tokens_entropy.dart +234 -0
  121. package/dart_analyzer/lib/rules/security/S051_password_length_policy.dart +171 -0
  122. package/dart_analyzer/lib/rules/security/S052_weak_otp_entropy.dart +107 -0
  123. package/dart_analyzer/lib/rules/security/S053_generic_error_messages.dart +159 -0
  124. package/dart_analyzer/lib/rules/security/S054_no_default_accounts.dart +141 -0
  125. package/dart_analyzer/lib/rules/security/S055_content_type_validation.dart +324 -0
  126. package/dart_analyzer/lib/rules/security/S056_log_injection_protection.dart +119 -0
  127. package/dart_analyzer/lib/rules/security/S057_utc_logging.dart +114 -0
  128. package/dart_analyzer/lib/rules/security/S058_no_ssrf.dart +175 -0
  129. package/dart_analyzer/lib/rules/security/S059_disable_debug_mode.dart +172 -0
  130. package/dart_analyzer/lib/rules/security/S060_password_minimum_length.dart +170 -0
  131. package/dart_analyzer/lib/symbol_table_extractor.dart +510 -0
  132. package/dart_analyzer/lib/utils/common_utils.dart +26 -0
  133. package/dart_analyzer/pubspec.lock +557 -0
  134. package/dart_analyzer/pubspec.yaml +39 -0
  135. package/dart_analyzer/test/fixtures/complex_code.dart +95 -0
  136. package/docs/GENERATED_FILE_HANDLING_SUMMARY.md +2 -2
  137. package/package.json +3 -2
@@ -0,0 +1,557 @@
1
+ # Generated by pub
2
+ # See https://dart.dev/tools/pub/glossary#lockfile
3
+ packages:
4
+ _fe_analyzer_shared:
5
+ dependency: transitive
6
+ description:
7
+ name: _fe_analyzer_shared
8
+ sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
9
+ url: "https://pub.dev"
10
+ source: hosted
11
+ version: "67.0.0"
12
+ analyzer:
13
+ dependency: "direct main"
14
+ description:
15
+ name: analyzer
16
+ sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
17
+ url: "https://pub.dev"
18
+ source: hosted
19
+ version: "6.4.1"
20
+ args:
21
+ dependency: transitive
22
+ description:
23
+ name: args
24
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
25
+ url: "https://pub.dev"
26
+ source: hosted
27
+ version: "2.7.0"
28
+ async:
29
+ dependency: "direct main"
30
+ description:
31
+ name: async
32
+ sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
33
+ url: "https://pub.dev"
34
+ source: hosted
35
+ version: "2.13.0"
36
+ boolean_selector:
37
+ dependency: transitive
38
+ description:
39
+ name: boolean_selector
40
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
41
+ url: "https://pub.dev"
42
+ source: hosted
43
+ version: "2.1.2"
44
+ build:
45
+ dependency: transitive
46
+ description:
47
+ name: build
48
+ sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0"
49
+ url: "https://pub.dev"
50
+ source: hosted
51
+ version: "2.4.1"
52
+ build_config:
53
+ dependency: transitive
54
+ description:
55
+ name: build_config
56
+ sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33"
57
+ url: "https://pub.dev"
58
+ source: hosted
59
+ version: "1.1.2"
60
+ build_daemon:
61
+ dependency: transitive
62
+ description:
63
+ name: build_daemon
64
+ sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957
65
+ url: "https://pub.dev"
66
+ source: hosted
67
+ version: "4.1.1"
68
+ build_resolvers:
69
+ dependency: transitive
70
+ description:
71
+ name: build_resolvers
72
+ sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a"
73
+ url: "https://pub.dev"
74
+ source: hosted
75
+ version: "2.4.2"
76
+ build_runner:
77
+ dependency: "direct dev"
78
+ description:
79
+ name: build_runner
80
+ sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d"
81
+ url: "https://pub.dev"
82
+ source: hosted
83
+ version: "2.4.13"
84
+ build_runner_core:
85
+ dependency: transitive
86
+ description:
87
+ name: build_runner_core
88
+ sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0
89
+ url: "https://pub.dev"
90
+ source: hosted
91
+ version: "7.3.2"
92
+ built_collection:
93
+ dependency: transitive
94
+ description:
95
+ name: built_collection
96
+ sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
97
+ url: "https://pub.dev"
98
+ source: hosted
99
+ version: "5.1.1"
100
+ built_value:
101
+ dependency: transitive
102
+ description:
103
+ name: built_value
104
+ sha256: "426cf75afdb23aa74bd4e471704de3f9393f3c7b04c1e2d9c6f1073ae0b8b139"
105
+ url: "https://pub.dev"
106
+ source: hosted
107
+ version: "8.12.1"
108
+ checked_yaml:
109
+ dependency: transitive
110
+ description:
111
+ name: checked_yaml
112
+ sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
113
+ url: "https://pub.dev"
114
+ source: hosted
115
+ version: "2.0.3"
116
+ cli_config:
117
+ dependency: transitive
118
+ description:
119
+ name: cli_config
120
+ sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec
121
+ url: "https://pub.dev"
122
+ source: hosted
123
+ version: "0.2.0"
124
+ code_builder:
125
+ dependency: transitive
126
+ description:
127
+ name: code_builder
128
+ sha256: "11654819532ba94c34de52ff5feb52bd81cba1de00ef2ed622fd50295f9d4243"
129
+ url: "https://pub.dev"
130
+ source: hosted
131
+ version: "4.11.0"
132
+ collection:
133
+ dependency: "direct main"
134
+ description:
135
+ name: collection
136
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
137
+ url: "https://pub.dev"
138
+ source: hosted
139
+ version: "1.19.1"
140
+ convert:
141
+ dependency: transitive
142
+ description:
143
+ name: convert
144
+ sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
145
+ url: "https://pub.dev"
146
+ source: hosted
147
+ version: "3.1.2"
148
+ coverage:
149
+ dependency: transitive
150
+ description:
151
+ name: coverage
152
+ sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d"
153
+ url: "https://pub.dev"
154
+ source: hosted
155
+ version: "1.15.0"
156
+ crypto:
157
+ dependency: "direct main"
158
+ description:
159
+ name: crypto
160
+ sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
161
+ url: "https://pub.dev"
162
+ source: hosted
163
+ version: "3.0.7"
164
+ dart_style:
165
+ dependency: transitive
166
+ description:
167
+ name: dart_style
168
+ sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
169
+ url: "https://pub.dev"
170
+ source: hosted
171
+ version: "2.3.6"
172
+ file:
173
+ dependency: transitive
174
+ description:
175
+ name: file
176
+ sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
177
+ url: "https://pub.dev"
178
+ source: hosted
179
+ version: "7.0.1"
180
+ fixnum:
181
+ dependency: transitive
182
+ description:
183
+ name: fixnum
184
+ sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
185
+ url: "https://pub.dev"
186
+ source: hosted
187
+ version: "1.1.1"
188
+ frontend_server_client:
189
+ dependency: transitive
190
+ description:
191
+ name: frontend_server_client
192
+ sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
193
+ url: "https://pub.dev"
194
+ source: hosted
195
+ version: "4.0.0"
196
+ glob:
197
+ dependency: transitive
198
+ description:
199
+ name: glob
200
+ sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
201
+ url: "https://pub.dev"
202
+ source: hosted
203
+ version: "2.1.3"
204
+ graphs:
205
+ dependency: transitive
206
+ description:
207
+ name: graphs
208
+ sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
209
+ url: "https://pub.dev"
210
+ source: hosted
211
+ version: "2.3.2"
212
+ http_multi_server:
213
+ dependency: transitive
214
+ description:
215
+ name: http_multi_server
216
+ sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
217
+ url: "https://pub.dev"
218
+ source: hosted
219
+ version: "3.2.2"
220
+ http_parser:
221
+ dependency: transitive
222
+ description:
223
+ name: http_parser
224
+ sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
225
+ url: "https://pub.dev"
226
+ source: hosted
227
+ version: "4.1.2"
228
+ io:
229
+ dependency: transitive
230
+ description:
231
+ name: io
232
+ sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
233
+ url: "https://pub.dev"
234
+ source: hosted
235
+ version: "1.0.5"
236
+ js:
237
+ dependency: transitive
238
+ description:
239
+ name: js
240
+ sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
241
+ url: "https://pub.dev"
242
+ source: hosted
243
+ version: "0.7.2"
244
+ json_annotation:
245
+ dependency: "direct main"
246
+ description:
247
+ name: json_annotation
248
+ sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
249
+ url: "https://pub.dev"
250
+ source: hosted
251
+ version: "4.9.0"
252
+ json_serializable:
253
+ dependency: "direct dev"
254
+ description:
255
+ name: json_serializable
256
+ sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b
257
+ url: "https://pub.dev"
258
+ source: hosted
259
+ version: "6.8.0"
260
+ lints:
261
+ dependency: "direct dev"
262
+ description:
263
+ name: lints
264
+ sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
265
+ url: "https://pub.dev"
266
+ source: hosted
267
+ version: "3.0.0"
268
+ logging:
269
+ dependency: transitive
270
+ description:
271
+ name: logging
272
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
273
+ url: "https://pub.dev"
274
+ source: hosted
275
+ version: "1.3.0"
276
+ matcher:
277
+ dependency: transitive
278
+ description:
279
+ name: matcher
280
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
281
+ url: "https://pub.dev"
282
+ source: hosted
283
+ version: "0.12.17"
284
+ meta:
285
+ dependency: transitive
286
+ description:
287
+ name: meta
288
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
289
+ url: "https://pub.dev"
290
+ source: hosted
291
+ version: "1.17.0"
292
+ mime:
293
+ dependency: transitive
294
+ description:
295
+ name: mime
296
+ sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
297
+ url: "https://pub.dev"
298
+ source: hosted
299
+ version: "2.0.0"
300
+ node_preamble:
301
+ dependency: transitive
302
+ description:
303
+ name: node_preamble
304
+ sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
305
+ url: "https://pub.dev"
306
+ source: hosted
307
+ version: "2.0.2"
308
+ package_config:
309
+ dependency: transitive
310
+ description:
311
+ name: package_config
312
+ sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
313
+ url: "https://pub.dev"
314
+ source: hosted
315
+ version: "2.2.0"
316
+ path:
317
+ dependency: "direct main"
318
+ description:
319
+ name: path
320
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
321
+ url: "https://pub.dev"
322
+ source: hosted
323
+ version: "1.9.1"
324
+ pool:
325
+ dependency: transitive
326
+ description:
327
+ name: pool
328
+ sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d"
329
+ url: "https://pub.dev"
330
+ source: hosted
331
+ version: "1.5.2"
332
+ pub_semver:
333
+ dependency: transitive
334
+ description:
335
+ name: pub_semver
336
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
337
+ url: "https://pub.dev"
338
+ source: hosted
339
+ version: "2.2.0"
340
+ pubspec_parse:
341
+ dependency: transitive
342
+ description:
343
+ name: pubspec_parse
344
+ sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
345
+ url: "https://pub.dev"
346
+ source: hosted
347
+ version: "1.5.0"
348
+ shelf:
349
+ dependency: transitive
350
+ description:
351
+ name: shelf
352
+ sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
353
+ url: "https://pub.dev"
354
+ source: hosted
355
+ version: "1.4.2"
356
+ shelf_packages_handler:
357
+ dependency: transitive
358
+ description:
359
+ name: shelf_packages_handler
360
+ sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
361
+ url: "https://pub.dev"
362
+ source: hosted
363
+ version: "3.0.2"
364
+ shelf_static:
365
+ dependency: transitive
366
+ description:
367
+ name: shelf_static
368
+ sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3
369
+ url: "https://pub.dev"
370
+ source: hosted
371
+ version: "1.1.3"
372
+ shelf_web_socket:
373
+ dependency: transitive
374
+ description:
375
+ name: shelf_web_socket
376
+ sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67
377
+ url: "https://pub.dev"
378
+ source: hosted
379
+ version: "2.0.1"
380
+ source_gen:
381
+ dependency: transitive
382
+ description:
383
+ name: source_gen
384
+ sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832"
385
+ url: "https://pub.dev"
386
+ source: hosted
387
+ version: "1.5.0"
388
+ source_helper:
389
+ dependency: transitive
390
+ description:
391
+ name: source_helper
392
+ sha256: "86d247119aedce8e63f4751bd9626fc9613255935558447569ad42f9f5b48b3c"
393
+ url: "https://pub.dev"
394
+ source: hosted
395
+ version: "1.3.5"
396
+ source_map_stack_trace:
397
+ dependency: transitive
398
+ description:
399
+ name: source_map_stack_trace
400
+ sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b
401
+ url: "https://pub.dev"
402
+ source: hosted
403
+ version: "2.1.2"
404
+ source_maps:
405
+ dependency: transitive
406
+ description:
407
+ name: source_maps
408
+ sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812"
409
+ url: "https://pub.dev"
410
+ source: hosted
411
+ version: "0.10.13"
412
+ source_span:
413
+ dependency: transitive
414
+ description:
415
+ name: source_span
416
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
417
+ url: "https://pub.dev"
418
+ source: hosted
419
+ version: "1.10.1"
420
+ stack_trace:
421
+ dependency: transitive
422
+ description:
423
+ name: stack_trace
424
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
425
+ url: "https://pub.dev"
426
+ source: hosted
427
+ version: "1.12.1"
428
+ stream_channel:
429
+ dependency: transitive
430
+ description:
431
+ name: stream_channel
432
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
433
+ url: "https://pub.dev"
434
+ source: hosted
435
+ version: "2.1.4"
436
+ stream_transform:
437
+ dependency: transitive
438
+ description:
439
+ name: stream_transform
440
+ sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871
441
+ url: "https://pub.dev"
442
+ source: hosted
443
+ version: "2.1.1"
444
+ string_scanner:
445
+ dependency: transitive
446
+ description:
447
+ name: string_scanner
448
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
449
+ url: "https://pub.dev"
450
+ source: hosted
451
+ version: "1.4.1"
452
+ term_glyph:
453
+ dependency: transitive
454
+ description:
455
+ name: term_glyph
456
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
457
+ url: "https://pub.dev"
458
+ source: hosted
459
+ version: "1.2.2"
460
+ test:
461
+ dependency: "direct dev"
462
+ description:
463
+ name: test
464
+ sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7"
465
+ url: "https://pub.dev"
466
+ source: hosted
467
+ version: "1.26.3"
468
+ test_api:
469
+ dependency: transitive
470
+ description:
471
+ name: test_api
472
+ sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
473
+ url: "https://pub.dev"
474
+ source: hosted
475
+ version: "0.7.7"
476
+ test_core:
477
+ dependency: transitive
478
+ description:
479
+ name: test_core
480
+ sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0"
481
+ url: "https://pub.dev"
482
+ source: hosted
483
+ version: "0.6.12"
484
+ timing:
485
+ dependency: transitive
486
+ description:
487
+ name: timing
488
+ sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe"
489
+ url: "https://pub.dev"
490
+ source: hosted
491
+ version: "1.0.2"
492
+ typed_data:
493
+ dependency: transitive
494
+ description:
495
+ name: typed_data
496
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
497
+ url: "https://pub.dev"
498
+ source: hosted
499
+ version: "1.4.0"
500
+ vm_service:
501
+ dependency: transitive
502
+ description:
503
+ name: vm_service
504
+ sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
505
+ url: "https://pub.dev"
506
+ source: hosted
507
+ version: "15.0.2"
508
+ watcher:
509
+ dependency: transitive
510
+ description:
511
+ name: watcher
512
+ sha256: f52385d4f73589977c80797e60fe51014f7f2b957b5e9a62c3f6ada439889249
513
+ url: "https://pub.dev"
514
+ source: hosted
515
+ version: "1.2.0"
516
+ web:
517
+ dependency: transitive
518
+ description:
519
+ name: web
520
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
521
+ url: "https://pub.dev"
522
+ source: hosted
523
+ version: "1.1.1"
524
+ web_socket:
525
+ dependency: transitive
526
+ description:
527
+ name: web_socket
528
+ sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
529
+ url: "https://pub.dev"
530
+ source: hosted
531
+ version: "1.0.1"
532
+ web_socket_channel:
533
+ dependency: transitive
534
+ description:
535
+ name: web_socket_channel
536
+ sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
537
+ url: "https://pub.dev"
538
+ source: hosted
539
+ version: "3.0.3"
540
+ webkit_inspection_protocol:
541
+ dependency: transitive
542
+ description:
543
+ name: webkit_inspection_protocol
544
+ sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
545
+ url: "https://pub.dev"
546
+ source: hosted
547
+ version: "1.2.1"
548
+ yaml:
549
+ dependency: transitive
550
+ description:
551
+ name: yaml
552
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
553
+ url: "https://pub.dev"
554
+ source: hosted
555
+ version: "3.1.3"
556
+ sdks:
557
+ dart: ">=3.7.0 <4.0.0"
@@ -0,0 +1,39 @@
1
+ name: sunlint_dart_analyzer
2
+ description: Dart language analyzer for SunLint - provides AST analysis and rule checking via JSON-RPC
3
+ version: 1.0.0
4
+ publish_to: none
5
+
6
+ environment:
7
+ sdk: '>=3.0.0 <4.0.0'
8
+
9
+ dependencies:
10
+ # Dart analysis framework
11
+ analyzer: ^6.0.0
12
+
13
+ # JSON handling
14
+ json_annotation: ^4.8.0
15
+
16
+ # Utility packages
17
+ path: ^1.8.0
18
+ collection: ^1.18.0
19
+
20
+ # Async utilities
21
+ async: ^2.11.0
22
+
23
+ # Cryptography (for hashing in C002)
24
+ crypto: ^3.0.0
25
+
26
+ dev_dependencies:
27
+ # Testing
28
+ test: ^1.24.0
29
+
30
+ # Code generation
31
+ json_serializable: ^6.7.0
32
+ build_runner: ^2.4.0
33
+
34
+ # Linting
35
+ lints: ^3.0.0
36
+
37
+ executables:
38
+ sunlint_dart_analyzer:
39
+ # This creates the executable from bin/sunlint_dart_analyzer.dart
@@ -0,0 +1,95 @@
1
+ // Test file for C001 (complexity) and C008 (deep nesting) rules
2
+
3
+ class ComplexClass {
4
+ // Method with high cyclomatic complexity (many branches)
5
+ String processData(int type, bool flag1, bool flag2, bool flag3) {
6
+ String result = '';
7
+
8
+ if (type == 1) {
9
+ if (flag1) {
10
+ result = 'type1-flag1';
11
+ } else if (flag2) {
12
+ result = 'type1-flag2';
13
+ } else if (flag3) {
14
+ result = 'type1-flag3';
15
+ } else {
16
+ result = 'type1-default';
17
+ }
18
+ } else if (type == 2) {
19
+ if (flag1 && flag2) {
20
+ result = 'type2-both';
21
+ } else if (flag1 || flag2) {
22
+ result = 'type2-either';
23
+ } else {
24
+ result = 'type2-none';
25
+ }
26
+ } else if (type == 3) {
27
+ switch (flag1 ? 1 : (flag2 ? 2 : 3)) {
28
+ case 1:
29
+ result = 'type3-case1';
30
+ break;
31
+ case 2:
32
+ result = 'type3-case2';
33
+ break;
34
+ default:
35
+ result = 'type3-default';
36
+ }
37
+ } else if (type == 4) {
38
+ for (var i = 0; i < 10; i++) {
39
+ if (i % 2 == 0) {
40
+ result += 'even';
41
+ }
42
+ }
43
+ } else {
44
+ result = 'unknown';
45
+ }
46
+
47
+ return result;
48
+ }
49
+
50
+ // Method with deep nesting
51
+ void deeplyNestedMethod(List<Map<String, dynamic>> data) {
52
+ for (var item in data) {
53
+ if (item.containsKey('users')) {
54
+ for (var user in item['users'] as List) {
55
+ if (user is Map) {
56
+ if (user.containsKey('roles')) {
57
+ for (var role in user['roles'] as List) {
58
+ if (role is String) {
59
+ if (role.startsWith('admin')) {
60
+ // Level 7 nesting - should trigger C008
61
+ print('Found admin: $role');
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ // Another complex method
73
+ int calculateScore(int a, int b, int c, int d, int e) {
74
+ int score = 0;
75
+
76
+ if (a > 0) score += a;
77
+ if (b > 0) score += b;
78
+ if (c > 0) score += c;
79
+ if (d > 0) score += d;
80
+ if (e > 0) score += e;
81
+
82
+ if (a > b && b > c) score *= 2;
83
+ if (c > d || d > e) score += 10;
84
+
85
+ for (var i = 0; i < a; i++) {
86
+ if (i % 2 == 0) {
87
+ score++;
88
+ } else {
89
+ score--;
90
+ }
91
+ }
92
+
93
+ return score > 100 ? 100 : score;
94
+ }
95
+ }
@@ -129,8 +129,8 @@ if (filePath.endsWith('.g.dart')) { // ❌ Already handled centrally
129
129
  1. ✅ Patterns updated in analyzer_service.dart
130
130
  2. ✅ Documentation updated with new section
131
131
  3. ✅ Test script created and verified
132
- 4. 🔄 Need to rebuild Dart binary: `dart compile exe bin/sunlint_dart_analyzer.dart`
133
- 5. 🔄 Copy binary to sunlint root: `cp bin/sunlint-dart-macos ../sunlint-dart-macos`
132
+ 4. Dart binary rebuilt: `cd dart_analyzer && dart compile exe bin/sunlint_dart_analyzer.dart -o bin/sunlint-dart-macos`
133
+ 5. Binary is in `dart_analyzer/bin/` where the adapter looks for it (no need to copy elsewhere)
134
134
  6. ✅ No changes needed in existing rules - they automatically benefit
135
135
 
136
136
  ## Migration Guide