@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
Markdown
# 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