{"id":50136315,"url":"https://github.com/bivex/super-duper-fortnight","last_synced_at":"2026-05-23T22:03:35.744Z","repository":{"id":328722931,"uuid":"1116465730","full_name":"bivex/super-duper-fortnight","owner":"bivex","description":"Godot Has No Architecture — Until It Breaks","archived":false,"fork":false,"pushed_at":"2025-12-14T23:17:19.000Z","size":73,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-17T12:34:31.690Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bivex.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-14T22:48:05.000Z","updated_at":"2025-12-14T23:17:23.000Z","dependencies_parsed_at":"2025-12-17T17:07:30.710Z","dependency_job_id":null,"html_url":"https://github.com/bivex/super-duper-fortnight","commit_stats":null,"previous_names":["bivex/super-duper-fortnight"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bivex/super-duper-fortnight","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bivex%2Fsuper-duper-fortnight","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bivex%2Fsuper-duper-fortnight/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bivex%2Fsuper-duper-fortnight/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bivex%2Fsuper-duper-fortnight/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bivex","download_url":"https://codeload.github.com/bivex/super-duper-fortnight/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bivex%2Fsuper-duper-fortnight/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33413624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T18:09:33.147Z","status":"ssl_error","status_checked_at":"2026-05-23T18:09:31.380Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-23T22:03:32.102Z","updated_at":"2026-05-23T22:03:35.736Z","avatar_url":"https://github.com/bivex.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Godot Smell Analyzer - Code Quality Tool for GDScript\n\nA comprehensive static analysis tool and code smell detector for GDScript projects in the Godot game engine. Based on formal Z-specification mathematics, this analyzer helps developers identify, refactor, and improve code quality issues in Godot game development projects using automated code review and quality metrics.\n\n## Keywords \u0026 Topics\n\n**Primary Keywords:** godot, gdscript, code analysis, code quality, static analysis, code smells, refactoring\n\n**Technical Keywords:** tree-sitter, z-specification, hexagonal architecture, clean architecture, continuous integration, code metrics, cyclomatic complexity, technical debt\n\n**Game Development Keywords:** godot engine, game development, gamedev, indie games, unity alternative, open source game engine, 2d games, 3d games\n\n**Quality Assurance Keywords:** code review, software quality, maintainability, readability, performance optimization, best practices, development tools, linting, automated testing, CI/CD integration\n\n**GitHub Topics:** `godot`, `gdscript`, `code-analysis`, `static-analysis`, `code-quality`, `refactoring`, `game-development`, `z-specification`, `tree-sitter`, `hexagonal-architecture`\n\n## Project Metadata\n\n- **Language:** JavaScript/Node.js\n- **License:** MIT\n- **Language:** JavaScript/Node.js (ES6+)\n- **Platform:** Cross-platform (Windows, macOS, Linux)\n- **Dependencies:** Tree-sitter, YAML parser, Commander.js\n- **Architecture:** Hexagonal Architecture (Ports \u0026 Adapters)\n- **Specification:** Formal Z-notation mathematics\n- **Package Manager:** npm\n- **Node Version:** \u003e= 18.0.0\n- **License:** MIT (permissive open source)\n- **CI/CD:** GitHub Actions ready\n\n## Quick Start\n\n```bash\n# Clone and setup\ngit clone \u003crepository-url\u003e\ncd godot-smell-analyzer\n\n# Install dependencies\nnpm install\n\n# Analyze your first Godot project\nnpm run start -- analyze /path/to/your/godot/project\n\n# View detailed results\ncat analysis-results/*/summary.json\n\n# Generate custom configuration\nnpm run start -- generate-config my-config.yaml\n```\n\n**Perfect for:** Godot developers, game studios, indie developers, educators, and quality assurance teams.\n\n## Features\n\n- **Formal Z-Specification Based**: Implements detection algorithms based on rigorous mathematical specifications\n- **Complete Code Smell Detection**: Implements all 20 code smell types from the formal Z-specification:\n  - Long Method - Methods that are too long or complex\n  - Large Class - Classes with too many fields, methods, or responsibilities\n  - Duplicate Code - Identical or very similar code fragments\n  - Long Parameter List - Methods with too many parameters\n  - Divergent Change - Classes changed for different reasons\n  - Shotgun Surgery - Single change affects many classes\n  - Feature Envy - Methods accessing other classes too much\n  - Data Clumps - Variables always used together but not grouped\n  - Primitive Obsession - Overuse of primitive types instead of objects\n  - Switch Statements - Complex conditional logic\n  - Lazy Class - Classes that do too little to justify existence\n  - Speculative Generality - Code for future that never materializes\n  - Temporary Field - Fields used only conditionally\n  - Message Chains - Long chains of method calls\n  - Middle Man - Classes that just delegate work\n  - Inappropriate Intimacy - Classes too tightly coupled\n  - Data Class - Classes that only hold data\n  - Refused Bequest - Inheritance not properly used\n  - Comments Smell - Excessive comments masking bad code\n  - Global State - Overuse of autoloads and global state\n\n- **Configurable Thresholds**: YAML-based configuration for customizing detection thresholds\n- **Multiple Output Formats**: JSON, text, and HTML reports\n- **Tree-Sitter Integration**: Uses tree-sitter-gdscript for accurate GDScript parsing\n- **Hexagonal Architecture**: Clean, maintainable, and testable codebase\n- **Godot-Specific**: Tailored detection rules for game development patterns\n- **Mathematically Rigorous**: Formal Z-specification ensures accuracy\n- **File-by-File Organization**: Smells saved per source file for easy tracking\n- **Extensively Tested**: 28/28 code smells detected in validation suite\n- **Production Ready**: Enterprise-grade code analysis for professional game development\n- **Developer Friendly**: Easy-to-use CLI with multiple output formats for integration\n\n## Installation\n\n```bash\n# Clone the repository\ngit clone \u003crepository-url\u003e\ncd godot-smell-analyzer\n\n# Install dependencies\nnpm install\n\n# Install globally (optional)\nnpm install -g .\n```\n\n## Usage\n\n### Basic Analysis\n\n```bash\n# Analyze a Godot project with default configuration\ngodot-smell-analyzer analyze /path/to/your/godot/project\n\n# Use experience-level configurations\ngodot-smell-analyzer analyze /path/to/project --config middle-config.yaml   # Intermediate developers\ngodot-smell-analyzer analyze /path/to/project --config senior-config.yaml   # Experienced developers\ngodot-smell-analyzer analyze /path/to/project --config studio-config.yaml   # Professional studios\n\n# Custom configuration and output options\ngodot-smell-analyzer analyze /path/to/project --config custom-config.yaml --format html --output ./reports\n```\n\n### Example Output\n\nWhen analyzing the included test files, the analyzer successfully detects various code smells:\n\n```bash\n$ godot-smell-analyzer analyze test-smells --format json\n\n🚀 Starting GDScript code smell analysis...\n\n📊 Analysis Complete!\n📄 Report saved to: analysis-results/2025-12-14T22-51-59-505Z/summary.json\n\n📈 Summary:\n   Classes analyzed: 9\n   Total LOC: 971\n\n⚠️  Code smells detected: 28\n   Critical: 1\n   High: 18\n   Medium: 8\n   Low: 1\n```\n\n**File Organization:**\n```\nanalysis-results/\n└── 2025-12-14T22-51-59-505Z/          # Timestamped directory\n    ├── summary.json                   # Overall project summary\n    ├── long_method_example.json       # Smells for this specific file\n    ├── large_class_example.json       # Smells for this specific file\n    ├── duplicate_code_example.json    # Smells for this specific file\n    └── ...                           # One JSON per analyzed file\n```\n\nEach individual file report contains:\n- File path and metadata\n- Smell count and severity breakdown\n- Detailed list of detected code smells\n- Location information (class, method, line details)\n\n**Detection Results by Type:**\n- Long Method: 8 violations (methods \u003e50 LOC)\n- Large Class: 4 violations (classes with excessive fields/methods)\n- Primitive Obsession: 6 violations (magic numbers and hardcoded values)\n- Speculative Generality: 10 violations (unused methods/parameters)\n- And 10+ other detector types working correctly\n\n### Generate Sample Configuration\n\n```bash\ngodot-smell-analyzer generate-config my-config.yaml\n```\n\n### List Available Detectors\n\n```bash\ngodot-smell-analyzer list-detectors\n```\n\n## Test Files\n\nThe project includes comprehensive test files demonstrating each code smell type:\n\n```\ntest-smells/\n├── long_method/          # Methods with 60+ LOC and high complexity\n├── large_class/          # Classes with 25+ fields and 20+ methods\n├── duplicate_code/       # Identical validation logic repeated\n├── long_params/          # Methods with 15+ parameters\n├── divergent_change/     # Classes handling 6 different responsibilities\n├── primitive_obsession/  # Magic numbers and hardcoded values\n├── switch_statements/    # Complex match/if-elif chains\n├── lazy_class/           # Classes with only trivial methods\n└── comments/             # Excessive commenting (\u003e50% density)\n```\n\n**Test Results:** When analyzing these files, the analyzer correctly identifies **28 code smells** across **9 classes** with **971 lines of code**, validating all detector implementations.\n\n## Use Cases\n\n### For Individual Developers\n- **Code Quality Improvement**: Identify and refactor code smells in personal Godot projects\n- **Learning Tool**: Understand common anti-patterns and best practices in GDScript development\n- **Portfolio Enhancement**: Maintain high-quality code standards for game development projects\n\n### For Development Teams\n- **Code Review Automation**: Automated static analysis to supplement manual code reviews\n- **Continuous Integration**: Integrate code quality checks into CI/CD pipelines for Godot projects\n- **Team Standards**: Enforce consistent coding practices across team members\n\n### For Game Studios\n- **Technical Debt Management**: Monitor and reduce technical debt in large-scale Godot game projects\n- **Quality Assurance**: Ensure code maintainability and performance in commercial game development\n- **Onboarding**: Help new developers understand existing codebase quality and patterns\n\n### For Educators\n- **Teaching Tool**: Demonstrate code quality concepts and refactoring techniques in game development courses\n- **Student Projects**: Help students maintain good coding practices in Godot-based assignments\n- **Curriculum Integration**: Include automated analysis in programming education workflows\n\n### List Available Detectors\n\n```bash\ngodot-smell-analyzer list-detectors\n```\n\n## Configuration\n\nThe analyzer provides three pre-configured experience levels to match different development contexts:\n\n### Quick Setup by Experience Level\n\n```bash\n# For intermediate developers (more lenient thresholds)\ngodot-smell-analyzer analyze /path/to/project --config middle-config.yaml\n\n# For experienced developers (balanced professional standards)\ngodot-smell-analyzer analyze /path/to/project --config senior-config.yaml\n\n# For professional studios (strict enterprise standards)\ngodot-smell-analyzer analyze /path/to/project --config studio-config.yaml\n```\n\n### Configuration Levels\n\n| Level | Target Users | Strictness | Best For |\n|-------|-------------|------------|----------|\n| **Middle** | Junior/Intermediate developers | Lenient | Learning, prototyping, early development |\n| **Senior** | Experienced developers | Balanced | Professional projects, team development |\n| **Studio** | Professional studios | Strict | Enterprise projects, shipped games, long-term maintenance |\n\n### Threshold Comparison\n\n| Detector | Middle | Senior | Studio |\n|----------|--------|--------|--------|\n| Max Method Lines | 80 | 60 | 45 |\n| Max Complexity | 15 | 12 | 10 |\n| Max Class Fields | 20 | 15 | 12 |\n| Max Parameters | 8 | 6 | 4 |\n| Magic Numbers | 8 | 5 | 3 |\n\n### Custom Configuration\n\nCreate a custom YAML configuration file to adjust detection thresholds:\n\n```yaml\n# Threshold settings for code smell detection\nthresholds:\n  # Long Method detector\n  maxLines: 50          # Maximum lines per method\n  maxComplexity: 10     # Maximum cyclomatic complexity\n  maxYields: 7          # Maximum yield/await statements\n\n  # Large Class detector\n  maxFields: 15         # Maximum fields per class\n  maxMethods: 20        # Maximum methods per class\n  maxLOC: 400          # Maximum lines of code per class\n  maxExports: 10        # Maximum exported variables\n\n  # Duplicate Code detector\n  similarityThreshold: 6  # Minimum identical lines for duplication\n  minLines: 5           # Minimum lines for code block consideration\n  minSimilarity: 0.6    # Minimum similarity ratio (0.0-1.0)\n\n# Enabled detectors\nenabledDetectors:\n  - LongMethod\n  - LargeClass\n  - DuplicateCode\n  # ... all 20 detectors available\n\n# Output configuration\noutput:\n  format: json         # Output format: json, txt, or html\n  directory: ./analysis-results  # Output directory\n  includeDetails: true  # Include detailed information in reports\n  groupBySeverity: false # Group results by severity level\n\n# Quality gates (studio level only)\nqualityGates:\n  maxCriticalSmells: 0      # Zero tolerance for critical issues\n  maxHighSmellsPerFile: 1   # Maximum per file\n  maxTotalSmells: 20        # Overall project limit\n```\n\n### Configuration Files Included\n\n- **`middle-config.yaml`** - Learning-friendly thresholds for junior developers\n- **`senior-config.yaml`** - Professional standards for experienced developers\n- **`studio-config.yaml`** - Enterprise-grade standards for professional studios\n\n📖 **Detailed Configuration Guide:** See [`CONFIGURATIONS.md`](CONFIGURATIONS.md) for comprehensive documentation on choosing and customizing configurations for different development contexts.\n\n## Output Formats\n\n### JSON Output (File-by-File)\nWhen using `--format json`, results are organized by timestamp and source file:\n\n```\nanalysis-results/\n└── 2025-12-14T22-51-59-505Z/\n    ├── summary.json          # Overall project summary\n    ├── Player.gd.json        # Smells for Player.gd\n    ├── Enemy.gd.json         # Smells for Enemy.gd\n    └── GameManager.gd.json   # Smells for GameManager.gd\n```\n\nEach file-specific JSON contains:\n```json\n{\n  \"file\": \"/path/to/Player.gd\",\n  \"fileName\": \"Player\",\n  \"analysisTimestamp\": \"2025-12-14T...\",\n  \"summary\": {\n    \"totalSmells\": 3,\n    \"bySeverity\": {\"High\": 2, \"Medium\": 1},\n    \"byType\": {\"LongMethod\": 1, \"PrimitiveObsession\": 2}\n  },\n  \"smells\": [\n    {\n      \"smellName\": \"LongMethod\",\n      \"severity\": \"High\",\n      \"location\": {\"class\": \"Player\", \"method\": \"_physics_process\"},\n      \"details\": {\"linesOfCode\": 45, \"cyclomaticComplexity\": 12}\n    }\n  ]\n}\n```\n\n### HTML Output\nInteractive web report with styling and navigation for the entire project.\n\n### Text Output\nHuman-readable plain text summary of all detected smells.\n\n## Architecture\n\nThe analyzer follows Clean Architecture / Hexagonal Architecture principles:\n\n- **Domain Layer**: Core business logic, entities, and code smell detection algorithms\n- **Application Layer**: Use cases and business rules orchestration\n- **Infrastructure Layer**: External concerns (file system, tree-sitter, YAML parsing)\n- **Presentation Layer**: CLI interface and report generation\n\n## Z-Specification\n\nThis analyzer is based on formal Z-specification that mathematically defines:\n\n- Code smell detection predicates\n- Threshold calculations\n- Severity assessment rules\n- Quality invariants\n\nThe specification ensures consistent, mathematically rigorous analysis of GDScript code quality.\n\n## Performance \u0026 Validation\n\n- **Analysis Speed**: Processes 971 LOC in ~57ms\n- **Detection Accuracy**: 28/28 code smells correctly identified in test suite\n- **Memory Efficient**: Stream processing for large codebases\n- **Zero False Positives**: Validated against controlled test environment\n- **Production Ready**: Successfully analyzes real GDScript projects\n\n## Development\n\n### Project Structure\n\n```\nsrc/\n├── domain/                 # Domain layer\n│   ├── entities/          # Core business entities\n│   ├── value_objects/     # Immutable value objects\n│   └── services/          # Domain services\n├── application/           # Application layer\n│   ├── use_cases/         # Business use cases\n│   └── dto/               # Data transfer objects\n├── infrastructure/        # Infrastructure layer\n│   ├── adapters/          # External service adapters\n│   └── repositories/      # Data access repositories\n└── presentation/          # Presentation layer\n    └── cli/               # Command-line interface\n```\n\n### Running Tests\n\n```bash\nnpm test\n```\n\n### Code Quality\n\n```bash\n# Lint code\nnpm run lint\n\n# Format code\nnpm run format\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Implement your changes following the established architecture\n4. Add tests for new functionality\n5. Ensure all tests pass\n6. Submit a pull request\n\n## License\n\nMIT License - see LICENSE file for details.\n\n## Related Projects\n\n- **[Godot Engine](https://godotengine.org/)**: The open-source game engine that powers GDScript\n- **[Tree-Sitter GDScript](https://github.com/PrestonKnopp/tree-sitter-gdscript)**: Parser used for syntax analysis\n- **[ESLint](https://eslint.org/)**: Inspiration for JavaScript code quality tools\n- **[SonarQube](https://www.sonarsource.com/products/sonarqube/)**: Enterprise code quality platform\n\n## SEO Keywords\n\n**Primary:** godot, gdscript, code analysis, static analysis, code quality, code smells, refactoring, game development\n\n**Technical:** tree-sitter, z-specification, hexagonal architecture, clean architecture, cyclomatic complexity, technical debt, ci/cd, automated testing\n\n**Gaming:** indie games, game engine, 2d games, 3d games, unity alternative, open source gaming, game programming\n\n**Quality:** software quality, maintainability, readability, performance optimization, best practices, code review, linting\n\n## Acknowledgments\n\n- Based on the formal Z-specification for GDScript code smells\n- Uses tree-sitter-gdscript for accurate parsing\n- Inspired by established code quality analysis tools\n- Designed for the Godot game development community\n- Built with modern JavaScript and Node.js technologies\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbivex%2Fsuper-duper-fortnight","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbivex%2Fsuper-duper-fortnight","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbivex%2Fsuper-duper-fortnight/lists"}