UNPKG

@sun-asterisk/sunlint

Version:

โ˜€๏ธ SunLint - Multi-language static analysis tool for code quality and security | Sun* Engineering Standards

253 lines (208 loc) โ€ข 8.56 kB
# SunLint Heuristic Rules System Enhanced heuristic rules engine with organized rule categories and migration support. ## ๐Ÿ“ Structure ``` rules/ โ”œโ”€โ”€ # SunLint Heuristic Rules Structure ## ๐Ÿ“ Clean Rule Organization ``` rules/ โ”œโ”€โ”€ ๐Ÿ“š docs/ # Rule documentation โ”‚ โ”œโ”€โ”€ C002_no_duplicate_code.md โ”‚ โ””โ”€โ”€ C031_validation_separation.md โ”œโ”€โ”€ ๐Ÿงช tests/ # Rule unit tests โ”‚ โ””โ”€โ”€ C002_no_duplicate_code.test.js โ”œโ”€โ”€ ๐Ÿ› ๏ธ utils/ # Shared utilities โ”‚ โ”œโ”€โ”€ ast-utils.js # AST parsing helpers โ”‚ โ”œโ”€โ”€ pattern-matchers.js # Pattern matching utilities โ”‚ โ””โ”€โ”€ rule-helpers.js # Rule helper functions โ”œโ”€โ”€ ๐Ÿ”น common/ # C-series rules (Common standards) โ”‚ โ”œโ”€โ”€ C002_no_duplicate_code/ โ”‚ โ”‚ โ”œโ”€โ”€ analyzer.js # ๐Ÿ” Core analysis logic โ”‚ โ”‚ โ””โ”€โ”€ config.json # โš™๏ธ Rule configuration โ”‚ โ”œโ”€โ”€ C006_function_naming/ โ”‚ โ”œโ”€โ”€ C019_log_level_usage/ โ”‚ โ”œโ”€โ”€ C029_catch_block_logging/ โ”‚ โ””โ”€โ”€ C031_validation_separation/ โ”œโ”€โ”€ ๐Ÿ”’ security/ # S-series rules (Security standards) โ””โ”€โ”€ ๐Ÿ“˜ typescript/ # T-series rules (TypeScript specific) ``` ## โœ… Key Improvements ### **1. Clean Rule Folders** - **Before**: `README.md`, `test.js`, `analyzer.js`, `config.json` mixed together - **After**: Only **core files** in rule folders (`analyzer.js`, `config.json`) ### **2. Centralized Documentation** - **Before**: README scattered in each rule folder - **After**: All docs in `rules/docs/[RuleId].md` ### **3. Centralized Testing** - **Before**: `test.js` in each rule folder - **After**: All tests in `rules/tests/[RuleId].test.js` ### **4. Correct Categorization** - **Before**: โŒ `rules/coding/` (incorrect - C โ‰  Coding) - **After**: โœ… `rules/common/` (correct - C = Common) ## ๐Ÿ” Rule Analyzer Structure Each rule analyzer follows a clean structure: ```javascript // rules/common/C019_log_level_usage/analyzer.js class C019Analyzer { constructor() { this.ruleId = 'C019'; this.ruleName = 'Log Level Usage'; // ... } async analyze(files, language, config) { // Core analysis logic only } } ``` ```json // rules/common/C019_log_level_usage/config.json { "ruleId": "C019", "name": "Log Level Usage", "description": "Don't use error level for non-critical issues", "severity": "warning", "languages": ["typescript", "javascript", "dart"] } ``` ## ๐Ÿš€ Benefits 1. **Clean Separation**: Core logic separated from docs/tests 2. **Easy Maintenance**: Find docs/tests in centralized locations 3. **Correct Semantics**: C = Common (not Coding) 4. **Scalable**: Easy to add new rules/categories 5. **Engine Compatible**: Heuristic engine auto-discovers all rules ## ๐Ÿ“Š Migration Summary | **Aspect** | **Before** | **After** | |------------|------------|-----------| | **Rule Folders** | Mixed content | Core only (`analyzer.js`, `config.json`) | | **Documentation** | Scattered | Centralized in `docs/` | | **Tests** | Scattered | Centralized in `tests/` | | **Categories** | โŒ `coding/` | โœ… `common/` | | **Structure** | Flat | Nested by category | | **Discoverable Rules** | 0 (broken) | 5 (working) | --- *Rules structure cleaned and optimized for maintainability! ๐ŸŽ‰* โ”œโ”€โ”€ index.js # Rule registry and loader โ”œโ”€โ”€ common/ # ๐Ÿ› ๏ธ Shared utilities โ”‚ โ”œโ”€โ”€ ast-utils.js # AST parsing utilities โ”‚ โ”œโ”€โ”€ pattern-matchers.js # Common pattern matching โ”‚ โ””โ”€โ”€ rule-helpers.js # Rule development helpers โ”œโ”€โ”€ coding/ # ๐Ÿ”น C-series: Coding standards (4 โ†’ expanding) โ”‚ โ”œโ”€โ”€ C006_function_naming/ # Function naming conventions โ”‚ โ”œโ”€โ”€ C019_log_level_usage/ # Log level usage patterns โ”‚ โ”œโ”€โ”€ C029_catch_block_logging/ # Exception logging standards โ”‚ โ””โ”€โ”€ C031_validation_separation/ # Input validation separation โ”œโ”€โ”€ security/ # ๐Ÿ”’ S-series: Security rules (0 โ†’ 49 planned) โ”‚ โ””โ”€โ”€ (ready for migration from ESLint) โ”œโ”€โ”€ typescript/ # ๐Ÿ“˜ T-series: TypeScript rules (0 โ†’ 10 planned) โ”‚ โ””โ”€โ”€ (ready for migration from ESLint) โ””โ”€โ”€ migration/ # ๐Ÿ”„ ESLint โ†’ Heuristic migration โ”œโ”€โ”€ mapping.json # Rule mapping configuration โ”œโ”€โ”€ converter.js # Auto-migration tool โ””โ”€โ”€ compatibility.js # Compatibility layer ``` ## ๐ŸŽฏ Current Status ### โœ… **Active Heuristic Rules (4)** | Rule ID | Name | Type | Status | |---------|------|------|--------| | **C006** | Function Naming | Coding | โœ… Production | | **C019** | Log Level Usage | Coding | โœ… Production | | **C029** | Catch Block Logging | Coding | โœ… Production | | **C031** | Validation Separation | Coding | โœ… Production | ### ๐Ÿš€ **Migration Pipeline (77 rules)** | Category | ESLint Rules | Heuristic Target | Status | |----------|--------------|------------------|--------| | **Coding** | 22 rules | rules/coding/ | ๐Ÿ”„ Ready for migration | | **Security** | 49 rules | rules/security/ | ๐Ÿ”„ Ready for migration | | **TypeScript** | 10 rules | rules/typescript/ | ๐Ÿ”„ Ready for migration | ## ๐Ÿ› ๏ธ Rule Development ### **Heuristic Rule Structure** Each rule follows this standard structure: ``` rules/{category}/{RULE_ID}/ โ”œโ”€โ”€ analyzer.js # Core heuristic logic โ”œโ”€โ”€ config.json # Rule configuration โ”œโ”€โ”€ test.js # Rule-specific tests โ””โ”€โ”€ README.md # Rule documentation ``` ### **Rule Development Helpers** Use shared utilities in `rules/common/`: - `ast-utils.js` - AST traversal and analysis - `pattern-matchers.js` - Common code pattern detection - `rule-helpers.js` - Rule configuration and reporting ### **Example: Adding New Rule** ```bash # Create new coding rule mkdir rules/coding/C045_new_rule/ cd rules/coding/C045_new_rule/ # Create rule files touch analyzer.js config.json test.js README.md ``` ## ๐Ÿ”„ Migration Process ### **ESLint โ†’ Heuristic Migration** 1. **Mapping**: Define rule equivalencies in `migration/mapping.json` ```json { "eslint": "c006-function-name-verb-noun", "heuristic": "C006_function_naming", "compatibility": "partial", "migration_priority": "high" } ``` 2. **Conversion**: Use `migration/converter.js` for automated migration ```bash node rules/migration/converter.js --rule=C006 --target=heuristic ``` 3. **Testing**: Validate against existing ESLint rule behavior ```bash node rules/migration/compatibility.js --test=C006 ``` ## ๐Ÿš€ Future Expansion ### **Phase 2A: Security Rules Migration** Target: Migrate 49 security rules to heuristic engine - Priority: S001, S003, S012 (critical security) - Timeline: After ESLint deprecation decision ### **Phase 2B: TypeScript Rules Migration** Target: Migrate 10 TypeScript rules to heuristic engine - Priority: T002, T003, T004 (interface standards) - Timeline: Post security migration ### **Phase 3: Advanced Heuristics** - Multi-file analysis capabilities - Cross-language rule support - AI-assisted pattern detection ## ๐Ÿ“Š Engine Comparison | Feature | ESLint Engine | Heuristic Engine | Status | |---------|---------------|------------------|--------| | **Rules Count** | 81 rules | 4 โ†’ 81 rules | ๐Ÿ”„ Migration | | **Performance** | AST heavy | Pattern optimized | ๐Ÿš€ Faster | | **Languages** | JS/TS only | Multi-language | ๐ŸŒŸ Flexible | | **Customization** | Limited | Full control | โœ… Better | | **Maintenance** | ESLint dependent | Self-contained | ๐Ÿ›ก๏ธ Stable | ## ๐ŸŽฏ Integration ### **Engine Loading** The heuristic engine automatically loads rules from this structure: ```javascript // core/analysis-orchestrator.js const heuristicRules = require('../rules/index.js'); ``` ### **Rule Registry** All rules are registered in `rules/index.js`: ```javascript module.exports = { coding: { C006: require('./coding/C006_function_naming/analyzer.js'), C019: require('./coding/C019_log_level_usage/analyzer.js'), // ... }, security: { // Ready for S-series rules }, typescript: { // Ready for T-series rules } }; ``` --- **๐Ÿ—๏ธ Architecture**: Scalable, organized, migration-ready **๐ŸŽฏ Goal**: 81 heuristic rules (ESLint independence) **๐Ÿš€ Status**: 4 active, 77 ready for migration