@sun-asterisk/sunlint 1.0.5 โ†’ 1.0.7

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 (119) hide show
  1. package/CHANGELOG.md +108 -169
  2. package/README.md +124 -383
  3. package/config/presets/beginner.json +1 -1
  4. package/config/presets/ci.json +3 -2
  5. package/config/presets/recommended.json +1 -1
  6. package/config/presets/strict.json +3 -2
  7. package/config/rules-registry.json +60 -0
  8. package/config/sunlint-schema.json +0 -7
  9. package/config/typescript/eslint.config.js +4 -0
  10. package/core/cli-action-handler.js +169 -4
  11. package/core/cli-program.js +20 -4
  12. package/core/config-manager.js +91 -11
  13. package/core/config-merger.js +12 -0
  14. package/core/file-targeting-service.js +381 -0
  15. package/core/multi-rule-runner.js +9 -27
  16. package/core/output-service.js +5 -6
  17. package/core/rule-mapping-service.js +8 -0
  18. package/package.json +3 -5
  19. package/cli-legacy.js +0 -355
  20. package/docs/AI.md +0 -163
  21. package/docs/ARCHITECTURE.md +0 -78
  22. package/docs/CI-CD-GUIDE.md +0 -315
  23. package/docs/COMMAND-EXAMPLES.md +0 -256
  24. package/docs/DEBUG.md +0 -86
  25. package/docs/DISTRIBUTION.md +0 -153
  26. package/docs/ESLINT-INTEGRATION-STRATEGY.md +0 -392
  27. package/docs/ESLINT_INTEGRATION.md +0 -238
  28. package/docs/FOLDER_STRUCTURE.md +0 -59
  29. package/docs/HEURISTIC_VS_AI.md +0 -113
  30. package/docs/README.md +0 -32
  31. package/docs/RELEASE_GUIDE.md +0 -230
  32. package/docs/RULE-RESPONSIBILITY-MATRIX.md +0 -204
  33. package/eslint-integration/.eslintrc.js +0 -98
  34. package/eslint-integration/cli.js +0 -35
  35. package/eslint-integration/eslint-plugin-custom/c002-no-duplicate-code.js +0 -204
  36. package/eslint-integration/eslint-plugin-custom/c003-no-vague-abbreviations.js +0 -246
  37. package/eslint-integration/eslint-plugin-custom/c006-function-name-verb-noun.js +0 -207
  38. package/eslint-integration/eslint-plugin-custom/c010-limit-block-nesting.js +0 -90
  39. package/eslint-integration/eslint-plugin-custom/c013-no-dead-code.js +0 -43
  40. package/eslint-integration/eslint-plugin-custom/c014-abstract-dependency-preferred.js +0 -38
  41. package/eslint-integration/eslint-plugin-custom/c017-limit-constructor-logic.js +0 -39
  42. package/eslint-integration/eslint-plugin-custom/c018-no-generic-throw.js +0 -335
  43. package/eslint-integration/eslint-plugin-custom/c023-no-duplicate-variable-name-in-scope.js +0 -142
  44. package/eslint-integration/eslint-plugin-custom/c027-limit-function-nesting.js +0 -50
  45. package/eslint-integration/eslint-plugin-custom/c029-catch-block-logging.js +0 -80
  46. package/eslint-integration/eslint-plugin-custom/c030-use-custom-error-classes.js +0 -294
  47. package/eslint-integration/eslint-plugin-custom/c034-no-implicit-return.js +0 -34
  48. package/eslint-integration/eslint-plugin-custom/c035-no-empty-catch.js +0 -32
  49. package/eslint-integration/eslint-plugin-custom/c041-no-config-inline.js +0 -64
  50. package/eslint-integration/eslint-plugin-custom/c042-boolean-name-prefix.js +0 -406
  51. package/eslint-integration/eslint-plugin-custom/c043-no-console-or-print.js +0 -300
  52. package/eslint-integration/eslint-plugin-custom/c047-no-duplicate-retry-logic.js +0 -239
  53. package/eslint-integration/eslint-plugin-custom/c048-no-var-declaration.js +0 -31
  54. package/eslint-integration/eslint-plugin-custom/c076-one-assert-per-test.js +0 -184
  55. package/eslint-integration/eslint-plugin-custom/index.js +0 -155
  56. package/eslint-integration/eslint-plugin-custom/package.json +0 -13
  57. package/eslint-integration/eslint-plugin-custom/package.json.bak +0 -9
  58. package/eslint-integration/eslint-plugin-custom/s003-no-unvalidated-redirect.js +0 -86
  59. package/eslint-integration/eslint-plugin-custom/s005-no-origin-auth.js +0 -95
  60. package/eslint-integration/eslint-plugin-custom/s006-activation-recovery-secret-not-plaintext.js +0 -69
  61. package/eslint-integration/eslint-plugin-custom/s008-crypto-agility.js +0 -62
  62. package/eslint-integration/eslint-plugin-custom/s009-no-insecure-crypto.js +0 -103
  63. package/eslint-integration/eslint-plugin-custom/s010-no-insecure-random-in-sensitive-context.js +0 -123
  64. package/eslint-integration/eslint-plugin-custom/s011-no-insecure-uuid.js +0 -66
  65. package/eslint-integration/eslint-plugin-custom/s012-hardcode-secret.js +0 -71
  66. package/eslint-integration/eslint-plugin-custom/s014-insecure-tls-version.js +0 -50
  67. package/eslint-integration/eslint-plugin-custom/s015-insecure-tls-certificate.js +0 -43
  68. package/eslint-integration/eslint-plugin-custom/s016-sensitive-query-parameter.js +0 -59
  69. package/eslint-integration/eslint-plugin-custom/s017-no-sql-injection.js +0 -193
  70. package/eslint-integration/eslint-plugin-custom/s018-positive-input-validation.js +0 -56
  71. package/eslint-integration/eslint-plugin-custom/s019-no-raw-user-input-in-email.js +0 -113
  72. package/eslint-integration/eslint-plugin-custom/s020-no-eval-dynamic-execution.js +0 -89
  73. package/eslint-integration/eslint-plugin-custom/s022-output-encoding.js +0 -78
  74. package/eslint-integration/eslint-plugin-custom/s023-no-json-injection.js +0 -300
  75. package/eslint-integration/eslint-plugin-custom/s025-server-side-input-validation.js +0 -217
  76. package/eslint-integration/eslint-plugin-custom/s026-json-schema-validation.js +0 -68
  77. package/eslint-integration/eslint-plugin-custom/s027-no-hardcoded-secrets.js +0 -80
  78. package/eslint-integration/eslint-plugin-custom/s029-require-csrf-protection.js +0 -79
  79. package/eslint-integration/eslint-plugin-custom/s030-no-directory-browsing.js +0 -78
  80. package/eslint-integration/eslint-plugin-custom/s033-require-samesite-cookie.js +0 -80
  81. package/eslint-integration/eslint-plugin-custom/s034-require-host-cookie-prefix.js +0 -77
  82. package/eslint-integration/eslint-plugin-custom/s035-cookie-specific-path.js +0 -74
  83. package/eslint-integration/eslint-plugin-custom/s036-no-unsafe-file-include.js +0 -68
  84. package/eslint-integration/eslint-plugin-custom/s037-require-anti-cache-headers.js +0 -70
  85. package/eslint-integration/eslint-plugin-custom/s038-no-version-disclosure.js +0 -74
  86. package/eslint-integration/eslint-plugin-custom/s039-no-session-token-in-url.js +0 -63
  87. package/eslint-integration/eslint-plugin-custom/s041-require-session-invalidate-on-logout.js +0 -211
  88. package/eslint-integration/eslint-plugin-custom/s042-require-periodic-reauthentication.js +0 -294
  89. package/eslint-integration/eslint-plugin-custom/s043-terminate-sessions-on-password-change.js +0 -254
  90. package/eslint-integration/eslint-plugin-custom/s044-require-full-session-for-sensitive-operations.js +0 -292
  91. package/eslint-integration/eslint-plugin-custom/s045-anti-automation-controls.js +0 -46
  92. package/eslint-integration/eslint-plugin-custom/s046-secure-notification-on-auth-change.js +0 -44
  93. package/eslint-integration/eslint-plugin-custom/s047-secure-random-passwords.js +0 -108
  94. package/eslint-integration/eslint-plugin-custom/s048-password-credential-recovery.js +0 -54
  95. package/eslint-integration/eslint-plugin-custom/s050-session-token-weak-hash.js +0 -94
  96. package/eslint-integration/eslint-plugin-custom/s052-secure-random-authentication-code.js +0 -66
  97. package/eslint-integration/eslint-plugin-custom/s054-verification-default-account.js +0 -109
  98. package/eslint-integration/eslint-plugin-custom/s055-verification-rest-check-the-incoming-content-type.js +0 -143
  99. package/eslint-integration/eslint-plugin-custom/s057-utc-logging.js +0 -54
  100. package/eslint-integration/eslint-plugin-custom/s058-no-ssrf.js +0 -73
  101. package/eslint-integration/eslint-plugin-custom/t002-interface-prefix-i.js +0 -42
  102. package/eslint-integration/eslint-plugin-custom/t003-ts-ignore-reason.js +0 -48
  103. package/eslint-integration/eslint-plugin-custom/t004-interface-public-only.js +0 -160
  104. package/eslint-integration/eslint-plugin-custom/t007-no-fn-in-constructor.js +0 -52
  105. package/eslint-integration/eslint-plugin-custom/t011-no-real-time-dependency.js +0 -175
  106. package/eslint-integration/eslint-plugin-custom/t019-no-empty-type.js +0 -95
  107. package/eslint-integration/eslint-plugin-custom/t025-no-nested-union-tuple.js +0 -48
  108. package/eslint-integration/eslint-plugin-custom/t026-limit-nested-generics.js +0 -377
  109. package/eslint-integration/eslint.config.js +0 -125
  110. package/eslint-integration/eslint.config.simple.js +0 -24
  111. package/eslint-integration/node_modules/eslint-plugin-custom/package.json +0 -0
  112. package/eslint-integration/package.json +0 -23
  113. package/eslint-integration/sample.ts +0 -53
  114. package/eslint-integration/test-s003.js +0 -5
  115. package/eslint-integration/tsconfig.json +0 -27
  116. package/examples/.github/workflows/code-quality.yml +0 -111
  117. package/examples/.sunlint.json +0 -42
  118. package/examples/README.md +0 -47
  119. package/examples/package.json +0 -33
package/CHANGELOG.md CHANGED
@@ -1,202 +1,141 @@
1
- # Changelog
1
+ # ๐ŸŽ‰ SunLint v1.0.7 Release Notes
2
2
 
3
- All notable changes to Sun Lint will be documented in this file.
3
+ **Release Date**: July 20, 2025
4
+ **Type**: Minor Release (Bug Fixes & Configuration Improvements)
4
5
 
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+ ---
7
7
 
8
- ## [1.0.4] - 2025-07-08
8
+ ## ๐Ÿš€ **Key Improvements**
9
9
 
10
- ### ๐Ÿ”’ **Security Rules Integration**
10
+ ### ๐Ÿ”ง **Configuration Cleanup**
11
+ - **BREAKING**: Deprecated `ignorePatterns` in favor of `exclude` for better consistency
12
+ - **Auto-migration**: Existing configs with `ignorePatterns` will auto-migrate with deprecation warning
13
+ - **Unified logic**: Removed duplicate pattern processing for better performance
11
14
 
12
- #### Added
13
- - **40 Security Rules** - Complete integration of TypeScript security rules (S005-S058)
14
- - **Security Category Support** - New `--security` CLI option to run security rules only
15
- - **Quality Category Support** - New `--quality` CLI option to run quality rules only
16
- - **Dynamic Rule Configuration** - ESLint rules enabled/disabled based on user selection
17
- - **Enhanced ESLint Integration** - TypeScript parser support and improved plugin loading
15
+ ### ๐ŸŽฏ **File Targeting Fixes**
16
+ - **Fixed**: Specific file input (`--input=file.js`) now works correctly with config patterns
17
+ - **Enhanced**: Better include/exclude pattern resolution for both CLI and config
18
+ - **Improved**: Default include patterns for JavaScript/TypeScript files
18
19
 
19
- #### **Security Rules Implemented**
20
- - **S005**: No Origin Header Authentication
21
- - **S006**: Activation Recovery Secret Not Plaintext
22
- - **S008**: Crypto Agility
23
- - **S009**: No Insecure Crypto
24
- - **S010**: No Insecure Random in Sensitive Context
25
- - **S011**: No Insecure UUID
26
- - **S012**: No Hardcoded Secrets
27
- - **S014-S058**: 35 additional security rules (TLS, validation, session, auth, etc.)
20
+ ### ๐Ÿ›ก๏ธ **Security Rules Enhancement**
21
+ - **Verified**: All security rules (S001, S002, S007, S013, etc.) working correctly
22
+ - **Tested**: Comprehensive rule detection across TypeScript and JavaScript files
23
+ - **Stable**: 20,000+ violation detection capability validated
28
24
 
29
- *Complete list of all 43 security rules available in rules registry*
25
+ ---
30
26
 
31
- #### **CLI Enhancements**
32
- ```bash
33
- # Run security rules only
34
- sunlint --security --typescript --input=src/
27
+ ## ๐Ÿ“‹ **Changes in Detail**
35
28
 
36
- # Run quality rules only
37
- sunlint --quality --typescript --input=src/
29
+ ### โœ… **Configuration Changes**
30
+ - **Deprecated**: `ignorePatterns` โ†’ Use `exclude` instead
31
+ - **New**: Default include patterns: `["**/*.js", "**/*.ts", "**/*.jsx", "**/*.tsx"]`
32
+ - **Migration**: Automatic conversion with warning for backward compatibility
38
33
 
39
- # Run all rules (quality + security + typescript)
40
- sunlint --all --typescript --input=src/
34
+ **Before (Deprecated):**
35
+ ```json
36
+ {
37
+ "ignorePatterns": ["node_modules/**", "dist/**"]
38
+ }
41
39
  ```
42
40
 
43
- #### **Architecture Improvements**
44
- - Enhanced rule registry with security rule metadata
45
- - Improved category-based rule filtering
46
- - Dynamic ESLint configuration based on selected rules
47
- - Better TypeScript parsing support in ESLint integration
48
- - Modular plugin architecture for custom security rules
41
+ **After (Recommended):**
42
+ ```json
43
+ {
44
+ "include": ["**/*.js", "**/*.ts", "**/*.jsx", "**/*.tsx"],
45
+ "exclude": ["node_modules/**", "dist/**"]
46
+ }
47
+ ```
49
48
 
50
- ### Fixed
51
- - ESLint TypeScript parser configuration
52
- - Plugin resolution for custom security rules
53
- - Rule mapping between SunLint and ESLint formats
49
+ ### ๐Ÿ› **Bug Fixes**
50
+ - Fixed file targeting when using specific file input (`--input=cli.js`)
51
+ - Resolved circular symlink issues in `node_modules` traversal
52
+ - Eliminated duplicate ignore pattern processing
54
53
 
55
- ### Changed
56
- - Updated rules registry structure to support security categories
57
- - Enhanced CLI with category-specific options
58
- - Improved rule configuration system
54
+ ### ๐Ÿ—๏ธ **Internal Improvements**
55
+ - Cleaner file targeting service logic
56
+ - Better config merger with deprecation warnings
57
+ - Updated preset configurations to use `exclude`
59
58
 
60
59
  ---
61
60
 
62
- ## [1.0.0] - 2024-01-XX (Previous Release)
63
-
64
- ### ๐ŸŽ‰ **Initial Release**
65
-
66
- #### Added
67
- - **โ˜€๏ธ Sun Lint CLI** - Universal coding standards checker
68
- - **Multi-rule support** - Run single, multiple, or all rules
69
- - **Quality & Security categories** - Separate analysis domains
70
- - **Multi-language support** - TypeScript, Dart, Kotlin
71
- - **Configuration system** - `.sunlint.json` with presets
72
- - **Multiple output formats** - ESLint, Summary, Detailed, GitHub
73
-
74
- #### **Quality Rules Implemented**
75
- - **C005** - Single Responsibility Principle
76
- - **C006** - Function Naming (verb/verb-noun)
77
- - **C007** - Comment Quality (avoid code description)
78
- - **C012** - Command Query Separation (CQS)
79
- - **C014** - Dependency Injection usage
80
- - **C015** - Domain Language usage
81
- - **C019** - Log Level Usage (stable from previous version)
82
- - **C031** - Validation Separation
83
- - **C037** - API Response Format
84
- - **C040** - Centralized Validation Logic
85
-
86
- #### **Security Rules Planned**
87
- - **S001** - SQL Injection Prevention
88
- - **S002** - XSS Prevention
89
- - **S003** - Authentication Checks
90
- - **S004** - Data Encryption
91
-
92
- #### **CLI Features**
93
- - `sunlint --quality` - Run all quality rules
94
- - `sunlint --security` - Run all security rules
95
- - `sunlint --all` - Run all available rules
96
- - `sunlint --rule=C019` - Run specific rule
97
- - `sunlint --rules=C019,C006` - Run multiple rules
98
- - `sunlint --config=.sunlint.json` - Use configuration file
99
- - `sunlint --preset=@sun/sunlint/recommended` - Use preset
100
-
101
- #### **Configuration**
102
- - **Preset configurations** - recommended, strict, security, quality
103
- - **Rule-specific settings** - error, warn, off severity levels
104
- - **Language targeting** - Filter by programming language
105
- - **Ignore patterns** - Exclude files/directories
106
- - **Custom rule paths** - Extend with custom rules
107
-
108
- #### **Output Formats**
109
- - **ESLint format** - Compatible with IDEs and CI/CD
110
- - **Summary format** - Human-readable overview
111
- - **Detailed format** - Complete analysis results
112
- - **GitHub format** - GitHub Actions integration
113
-
114
- #### **Development Features**
115
- - **Extensible architecture** - Easy to add new rules
116
- - **Test framework** - Unit and integration tests
117
- - **VS Code integration** - Problems panel support
118
- - **CI/CD ready** - GitHub Actions and GitLab CI examples
119
-
120
- #### **Documentation**
121
- - **Comprehensive README** - Installation and usage guide
122
- - **Contributing guide** - Development workflow and standards
123
- - **Rule documentation** - Detailed rule explanations
124
- - **Configuration examples** - Real-world configurations
125
-
126
- ### ๐Ÿ— **Architecture**
127
- - **Modular design** - Separate core, rules, and config
128
- - **Plugin system** - Extensible rule loading
129
- - **Multi-format output** - Flexible reporting
130
- - **Configuration inheritance** - Preset and custom configs
131
-
132
- ### ๐Ÿš€ **Performance**
133
- - **Fast analysis** - Optimized rule execution
134
- - **Incremental scanning** - Only analyze changed files
135
- - **Parallel processing** - Multi-rule concurrent execution
136
- - **Memory efficient** - Minimal resource usage
137
-
138
- ### ๐Ÿ“ฆ **Distribution**
139
- - **NPM package** - `@sun/sunlint`
140
- - **Global installation** - `npm install -g @sun/sunlint`
141
- - **Local project use** - Development dependency support
142
- - **VS Code extension** - Future integration planned
61
+ ## ๐Ÿ“ฆ **Updated Files**
143
62
 
144
- ---
63
+ ### **Core Components**
64
+ - `core/file-targeting-service.js` - Simplified pattern processing
65
+ - `core/config-merger.js` - Added deprecation handling
66
+ - `core/config-manager.js` - Updated default config structure
67
+
68
+ ### **Configuration**
69
+ - `config/presets/*.json` - Updated all presets to use `exclude`
70
+ - `config/sunlint-schema.json` - Removed deprecated `ignorePatterns`
71
+ - `.sunlint.json` - Updated with include patterns
145
72
 
146
- ## **Migration from coding-standards**
73
+ ### **Documentation**
74
+ - `README.md` - Added breaking change notice and migration guide
147
75
 
148
- Sun Lint is the evolution of the previous `coding-standards` tool with enhanced features:
76
+ ---
149
77
 
150
- ### **What Changed**
151
- - **Name**: `coding-standards` โ†’ `sunlint`
152
- - **Command**: `coding-standards` โ†’ `sunlint`
153
- - **Config**: `.coding-standards.json` โ†’ `.sunlint.json`
154
- - **Package**: `@coding-quality/standards` โ†’ `@sun/sunlint`
78
+ ## ๐Ÿงช **Validation Results**
155
79
 
156
- ### **Migration Guide**
157
- ```bash
158
- # Uninstall old tool
159
- npm uninstall -g @coding-quality/standards
80
+ โœ… **Global Installation**: `npm install -g @sun-asterisk/sunlint`
81
+ โœ… **Project Installation**: `npm install --save-dev @sun-asterisk/sunlint`
82
+ โœ… **CLI Commands**: All CLI options tested and working
83
+ โœ… **Rule Detection**: 20,263 violations detected across 4,272 files
84
+ โœ… **Performance**: 17s analysis time for large codebase
160
85
 
161
- # Install Sun Lint
162
- npm install -g @sun/sunlint
86
+ ---
163
87
 
164
- # Update configuration file
165
- mv .coding-standards.json .sunlint.json
88
+ ## ๐Ÿ”„ **Migration Guide**
89
+
90
+ ### **For Existing Users**
91
+ 1. **Update your `.sunlint.json`:**
92
+ ```bash
93
+ # Replace ignorePatterns with exclude
94
+ sed -i 's/ignorePatterns/exclude/g' .sunlint.json
95
+ ```
96
+
97
+ 2. **Add include patterns (recommended):**
98
+ ```json
99
+ {
100
+ "include": ["**/*.js", "**/*.ts", "**/*.jsx", "**/*.tsx"],
101
+ "exclude": ["node_modules/**", "dist/**", "**/*.min.*"]
102
+ }
103
+ ```
104
+
105
+ 3. **Test your configuration:**
106
+ ```bash
107
+ sunlint --dry-run --verbose
108
+ ```
109
+
110
+ ### **No Action Required**
111
+ - Existing configs with `ignorePatterns` will continue to work
112
+ - Automatic migration with deprecation warning
113
+ - Remove deprecated properties when convenient
166
114
 
167
- # Update config contents
168
- sed -i 's/coding-standards/sunlint/g' .sunlint.json
115
+ ---
169
116
 
170
- # Update scripts in package.json
171
- sed -i 's/coding-standards/sunlint/g' package.json
172
- ```
117
+ ## ๐Ÿ“ˆ **Statistics**
173
118
 
174
- ### **What's Compatible**
175
- - โœ… All existing rules (C005, C006, C007, etc.)
176
- - โœ… Rule configurations and severity levels
177
- - โœ… Output formats (eslint, summary, detailed)
178
- - โœ… Command-line arguments and options
179
- - โœ… Language support (TypeScript, Dart, Kotlin)
180
-
181
- ### **What's New**
182
- - โ˜€๏ธ **Sun* branding** and unified tooling
183
- - ๐Ÿ”’ **Security rule category** with planned security rules
184
- - ๐ŸŽฏ **Quality/Security separation** with `--quality` and `--security` flags
185
- - ๐Ÿ“ฆ **Preset configurations** for common use cases
186
- - ๐Ÿ”ง **Enhanced configuration** with extends and inheritance
187
- - ๐Ÿ“Š **GitHub Actions format** for better CI/CD integration
119
+ | Metric | Value |
120
+ |--------|-------|
121
+ | **Rules Available** | 97+ (Security + Quality) |
122
+ | **File Processing** | 4,272 files analyzed |
123
+ | **Violation Detection** | 20,263 issues found |
124
+ | **Performance** | ~17 seconds for full analysis |
125
+ | **Languages Supported** | TypeScript, JavaScript, Dart |
188
126
 
189
127
  ---
190
128
 
191
- **Release Notes Format:**
192
- - ๐ŸŽ‰ Major features
193
- - โœจ Enhancements
194
- - ๐Ÿ› Bug fixes
195
- - ๐Ÿ”’ Security updates
196
- - ๐Ÿ“š Documentation
197
- - ๐Ÿ— Architecture changes
198
- - ๐Ÿš€ Performance improvements
129
+ ## ๐ŸŽฏ **Next Steps**
130
+
131
+ - **v1.0.8**: Enhanced TypeScript analysis engine
132
+ - **v1.1.0**: Dart language support expansion
133
+ - **v1.2.0**: Custom rule authoring framework
199
134
 
200
135
  ---
201
136
 
202
- **Built with โ˜€๏ธ by Sun* Engineering Team**
137
+ ## ๐Ÿ’ซ **Acknowledgments**
138
+
139
+ Thanks to the Sun* Engineering team for continuous feedback and testing. Special recognition for helping identify and resolve the file targeting issues.
140
+
141
+ **Happy Linting!** โ˜€๏ธ