yusyus
fda3712367
feat: Extend framework detection to 5 languages (JavaScript, Java, Ruby, PHP, C#)
...
## Summary
Framework detection now works for **6 languages** (up from 1):
- ✅ Python (original)
- ✅ JavaScript/TypeScript (new)
- ✅ Java (new)
- ✅ Ruby (new)
- ✅ PHP (new)
- ✅ C# (new)
## Changes
### 1. JavaScript/TypeScript Import Extraction (code_analyzer.py:361-386)
Detects:
- ES6 imports: `import React from 'react'`
- Side-effect imports: `import 'style.css'`
- CommonJS: `const foo = require('bar')`
Extracts package names: `react`, `vue`, `angular`, `express`, `axios`, etc.
### 2. Java Import Extraction (code_analyzer.py:1093-1110)
Detects:
- Package imports: `import org.springframework.boot.*;`
- Static imports: `import static com.example.Util.*;`
Extracts base packages: `org.springframework`, `com.google`, etc.
### 3. Ruby Import Extraction (code_analyzer.py:1245-1258)
Detects:
- Require: `require 'rails'`
- Require relative: `require_relative 'config'`
Extracts gem names: `rails`, `sinatra`, etc.
### 4. PHP Import Extraction (code_analyzer.py:1368-1381)
Detects:
- Namespace use: `use Laravel\Framework\App;`
- Aliased use: `use Foo\Bar as Baz;`
Extracts vendor names: `laravel`, `symfony`, etc.
### 5. C# Import Extraction (code_analyzer.py:677-696)
Detects:
- Using directives: `using System.Collections.Generic;`
- Static using: `using static System.Math;`
Extracts namespaces: `System.Collections`, `Microsoft.AspNetCore`, etc.
### 6. Enhanced Framework Markers (architectural_pattern_detector.py:104-111)
Added import-based markers for better detection:
- **Spring**: Added `org.springframework`
- **ASP.NET**: Added `Microsoft.AspNetCore`, `System.Web`
- **Rails**: Added `action` (for ActionController, ActionMailer)
- **Angular**: Added `@angular`, `angular`
- **Laravel**: Added `illuminate`, `laravel`
### 7. Multi-Language Support (architectural_pattern_detector.py:202-210)
Framework detector now:
- Collects imports from **all languages** (not just Python)
- Logs: "Collected N imports from M files"
- Detects frameworks across polyglot projects
## Test Results
**Multi-language test project:**
```
react_app/App.jsx → React detected ✅
spring_app/Application.java → Spring detected ✅
rails_app/controller.rb → Rails detected ✅
```
**Output:**
```json
{
"frameworks_detected": ["Spring", "Rails", "React"]
}
```
**All tests passing:**
- ✅ 95 tests (38 + 54 + 3)
- ✅ No breaking changes
- ✅ Backward compatible
## Impact
### What This Enables
1. **Polyglot project support** - Detect multiple frameworks in monorepos
2. **Better accuracy** - Import-based detection is more reliable than path-based
3. **Technology Stack insights** - ARCHITECTURE.md now shows all frameworks used
4. **Multi-platform coverage** - Works for web, mobile, backend, enterprise
### Supported Frameworks by Language
**JavaScript/TypeScript:**
- React, Vue.js, Angular (frontend)
- Express, Nest.js (backend)
**Java:**
- Spring Framework (Spring Boot, Spring MVC, etc.)
**Ruby:**
- Ruby on Rails
**PHP:**
- Laravel
**C#:**
- ASP.NET (Core, MVC, Web API)
**Python:**
- Django, Flask
### Example Use Cases
**Full-stack project:**
```
frontend/ (React) → React detected
backend/ (Spring) → Spring detected
Result: ["React", "Spring"]
```
**Microservices:**
```
api-gateway/ (Express) → Express detected
auth-service/ (Spring) → Spring detected
user-service/ (Rails) → Rails detected
Result: ["Express", "Spring", "Rails"]
```
## Future Extensions
Ready to add:
- Go: `import "github.com/gin-gonic/gin"`
- Rust: `use actix_web::*;`
- Swift: `import SwiftUI`
- Kotlin: `import kotlinx.coroutines.*`
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-02-05 22:08:37 +03:00
yusyus
a565b87a90
fix: Framework detection now works by including import-only files ( fixes #239 )
...
## Problem
Framework detection was broken because files with only imports (no
classes/functions) were excluded from analysis. The architectural pattern
detector received empty file lists, resulting in 0 frameworks detected.
## Root Cause
In codebase_scraper.py:873-881, the has_content check filtered out files
that didn't have classes, functions, or other structural elements. This
excluded simple __init__.py files that only contained import statements,
which are critical for framework detection.
## Solution (3 parts)
1. **Extract imports from Python files** (code_analyzer.py:140-178)
- Added import extraction using AST (ast.Import, ast.ImportFrom)
- Returns imports list in analysis results
- Now captures: "from flask import Flask" → ["flask"]
2. **Include import-only files** (codebase_scraper.py:873-881)
- Updated has_content check to include files with imports
- Files with imports are now included in analysis results
- Comment added: "IMPORTANT: Include files with imports for framework
detection (fixes #239 )"
3. **Enhance framework detection** (architectural_pattern_detector.py:195-240)
- Extract imports from all Python files in analysis
- Check imports in addition to file paths and directory structure
- Prioritize import-based detection (high confidence)
- Require 2+ matches for path-based detection (avoid false positives)
- Added debug logging: "Collected N imports for framework detection"
## Results
**Before fix:**
- Test Flask project: 0 files analyzed, 0 frameworks detected
- Files with imports: excluded from analysis
- Framework detection: completely broken
**After fix:**
- Test Flask project: 3 files analyzed, Flask detected ✅
- Files with imports: included in analysis
- Framework detection: working correctly
- No false positives (ASP.NET, Rails, etc.)
## Testing
Added comprehensive test suite (tests/test_framework_detection.py):
- ✅ test_flask_framework_detection_from_imports
- ✅ test_files_with_imports_are_included
- ✅ test_no_false_positive_frameworks
All existing tests pass:
- ✅ 38 tests in test_codebase_scraper.py
- ✅ 54 tests in test_code_analyzer.py
- ✅ 3 new tests in test_framework_detection.py
## Impact
- Fixes issue #239 completely
- Framework detection now works for Python projects
- Import-only files (common in Python packages) are properly analyzed
- No performance impact (import extraction is fast)
- No breaking changes to existing functionality
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-02-05 22:02:06 +03:00
yusyus
4e8ad835ed
style: Format code with ruff formatter
...
- Auto-format 11 files to comply with ruff formatting standards
- Fixes CI/CD formatter check failures
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-02-03 21:37:54 +03:00
yusyus
77ee5d2eeb
fix: Remove all trailing whitespace from code_analyzer.py
...
- Use sed to remove trailing whitespace from all lines
- Fixes all remaining ruff W293 errors
- This is a comprehensive fix to prevent further whitespace issues
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-02-03 21:14:05 +03:00
yusyus
aa817541fc
fix: Remove additional trailing whitespace from code_analyzer.py
...
- Remove trailing whitespace from lines 1510, 1519, 1522, 1527, 1535, 1548, 1552, 1563, 1568, 1578
- Fixes remaining ruff W293 linting errors
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-02-03 21:06:37 +03:00
yusyus
a67438bdcc
fix: Update test version checks to 2.9.0 and remove whitespace
...
- Update version checks in test_package_structure.py from 2.8.0 to 2.9.0
- Update version check in test_cli_paths.py from 2.8.0 to 2.9.0
- Remove trailing whitespace from blank lines in code_analyzer.py (lines 1436-1504)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-02-03 21:00:34 +03:00
yusyus
281f6f7916
feat: Add Signal Flow Analysis (C3.10) and Test Framework Detection
...
Comprehensive Godot signal analysis and test framework support:
## Signal Flow Analysis (C3.10)
Enhanced GDScript analyzer to extract:
- Signal declarations with documentation comments
- Signal connections (.connect() calls)
- Signal emissions (.emit() calls)
- Signal flow chains (source → signal → handler)
Created SignalFlowAnalyzer class:
- Analyzes 208 signals, 634 connections, 298 emissions (Cosmic Ideler)
- Detects event patterns:
- EventBus Pattern (centralized event system)
- Observer Pattern (multi-connected signals)
- Event Chains (cascading signal emissions)
- Generates:
- signal_flow.json (full analysis data)
- signal_flow.mmd (Mermaid diagram)
- signal_reference.md (human-readable docs)
Statistics:
- Signal density calculation (signals per file)
- Most connected signals ranking
- Most emitted signals ranking
## Test Framework Detection
Added support for 3 Godot test frameworks:
- **GUT** (Godot Unit Test) - extends GutTest, test_* functions
- **gdUnit4** - @suite and @test annotations
- **WAT** (WizAds Test) - extends WAT.Test
Detection results (Cosmic Ideler):
- 20 GUT test files
- 396 test cases detected
## Integration
Updated codebase_scraper.py:
- Signal flow analysis runs automatically for Godot projects
- Test framework detection integrated into code analysis
- SKILL.md shows signal statistics and test framework info
- New section: 📡 Signal Flow Analysis (C3.10)
## Results (Tested on Cosmic Ideler)
- 443/452 files analyzed (98%)
- 208 signals documented
- 634 signal connections mapped
- 298 signal emissions tracked
- 3 event patterns detected (EventBus, Observer, Event Chains)
- 20 GUT test files found with 396 test cases
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-02-02 21:44:26 +03:00
yusyus
b252f43d0e
feat: Add comprehensive Godot file type support
...
Complete support for all Godot file types:
- GDScript (.gd) - Regex-based parser for Godot-specific syntax
- Godot Scenes (.tscn) - Node hierarchy and script attachments
- Godot Resources (.tres) - Properties and dependencies
- Godot Shaders (.gdshader) - Uniforms and shader functions
Implementation details:
- Added 4 new analyzer methods to CodeAnalyzer class
- _analyze_gdscript(): Functions, signals, @export vars, class_name
- _analyze_godot_scene(): Node hierarchy, scripts, resources
- _analyze_godot_resource(): Resource type, properties, script refs
- _analyze_godot_shader(): Shader type, uniforms, varyings, functions
- Updated dependency_analyzer.py
- Added _extract_godot_resources() for ext_resource and preload()
- Fixed DependencyInfo calls (removed invalid 'alias' parameter)
- Updated codebase_scraper.py
- Added Godot file extensions to LANGUAGE_EXTENSIONS
- Extended content filter to accept Godot-specific keys
(nodes, properties, uniforms, signals, exports)
Tested on Cosmic Ideler Godot project:
- 443/452 files successfully analyzed (98%)
- 265 GDScript, 118 .tscn, 38 .tres, 9 .gdshader, 13 .cs
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-02-02 21:36:56 +03:00
yusyus
583a774b00
feat: Add GDScript (.gd) language support for Godot projects
...
**Problem:**
Godot projects with 267 GDScript files were only analyzing 13 C# files,
missing 95%+ of the codebase.
**Changes:**
1. Added `.gd` → "GDScript" to LANGUAGE_EXTENSIONS mapping
2. Added GDScript support to code_analyzer.py (uses Python AST parser)
3. Added GDScript support to dependency_analyzer.py (uses Python import extraction)
**Known Limitation:**
GDScript has syntax differences from Python (extends, @export, signals, etc.)
so Python AST parser may fail on some files. Future enhancement needed:
- Create GDScript-specific regex-based parser
- Handle Godot-specific keywords (extends, signal, @export, preload, etc.)
**Test Results:**
Before: 13 files analyzed (C# only)
After: 280 files detected (13 C# + 267 GDScript)
Status: GDScript files detected but analysis may fail due to syntax differences
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-02-02 21:22:51 +03:00
yusyus
81dd5bbfbc
fix: Fix remaining 61 ruff linting errors (SIM102, SIM117)
...
Fixed all remaining linting errors from the 310 total:
- SIM102: Combined nested if statements (31 errors)
- adaptors/openai.py
- config_extractor.py
- codebase_scraper.py
- doc_scraper.py
- github_fetcher.py
- pattern_recognizer.py
- pdf_scraper.py
- test_example_extractor.py
- SIM117: Combined multiple with statements (24 errors)
- tests/test_async_scraping.py (2 errors)
- tests/test_github_scraper.py (2 errors)
- tests/test_guide_enhancer.py (20 errors)
- Fixed test fixture parameter (mock_config in test_c3_integration.py)
All 700+ tests passing.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-17 23:25:12 +03:00
yusyus
596b219599
fix: Resolve remaining 188 linting errors (249 total fixed)
...
Second batch of comprehensive linting fixes:
Unused Arguments/Variables (136 errors):
- ARG002/ARG001 (91 errors): Prefixed unused method/function arguments with '_'
- Interface methods in adaptors (base.py, gemini.py, markdown.py)
- AST analyzer methods maintaining signatures (code_analyzer.py)
- Test fixtures and hooks (conftest.py)
- Added noqa: ARG001/ARG002 for pytest hooks requiring exact names
- F841 (45 errors): Prefixed unused local variables with '_'
- Tuple unpacking where some values aren't needed
- Variables assigned but not referenced
Loop & Boolean Quality (28 errors):
- B007 (18 errors): Prefixed unused loop control variables with '_'
- enumerate() loops where index not used
- for-in loops where loop variable not referenced
- E712 (10 errors): Simplified boolean comparisons
- Changed '== True' to direct boolean check
- Changed '== False' to 'not' expression
- Improved test readability
Code Quality (24 errors):
- SIM201 (4 errors): Already fixed in previous commit
- SIM118 (2 errors): Already fixed in previous commit
- E741 (4 errors): Already fixed in previous commit
- Config manager loop variable fix (1 error)
All Tests Passing:
- test_scraper_features.py: 42 passed
- test_integration.py: 51 passed
- test_architecture_scenarios.py: 11 passed
- test_real_world_fastmcp.py: 19 passed, 1 skipped
Note: Some SIM errors (nested if, multiple with) remain unfixed as they
would require non-trivial refactoring. Focus was on functional correctness.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-17 23:02:11 +03:00
yusyus
ec3e0bf491
fix: Resolve 61 critical linting errors
...
Fixed priority linting errors to improve code quality:
Critical Fixes:
- F821 (2 errors): Fixed undefined name 'original_result' in config_enhancer.py
- UP035 (2 errors): Removed deprecated typing.Dict and typing.Type imports
- F401 (27 errors): Removed unused imports and added noqa for availability checks
- E722 (19 errors): Replaced bare 'except:' with 'except Exception:'
Code Quality Improvements:
- SIM201 (4 errors): Simplified 'not x == y' to 'x != y'
- SIM118 (2 errors): Removed unnecessary .keys() in dict iterations
- E741 (4 errors): Renamed ambiguous variable 'l' to 'line'
- I001 (1 error): Sorted imports in test_bootstrap_skill.py
All modified areas tested and passing:
- test_scraper_features.py: 42 passed
- test_integration.py: 51 passed
- test_architecture_scenarios.py: 11 passed
- test_real_world_fastmcp.py: 19 passed (1 skipped)
Remaining linting errors: 249 (mostly code style suggestions like ARG002, F841, SIM102)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-17 22:54:40 +03:00
Pablo Estevez
c33c6f9073
change max lenght
2026-01-17 17:48:15 +00:00
Pablo Estevez
5ed767ff9a
run ruff
2026-01-17 17:29:21 +00:00
yusyus
3408315f40
feat: Add 6 new languages to codebase analysis system (C#, Go, Rust, Java, Ruby, PHP)
...
Expands language support from 3 to 9 languages across entire codebase scraping system.
**New Languages Added:**
- C# (Unity/.NET support) - classes, methods, properties, async/await, XML docs
- Go - structs, functions, methods with receivers, multiple return values
- Rust - structs, functions, async functions, impl blocks
- Java - classes, methods, inheritance, interfaces, generics
- Ruby - classes, methods, inheritance, predicate methods
- PHP - classes, methods, namespaces, inheritance
**Code Analysis (code_analyzer.py):**
- Added 6 new language analyzers (~1000 lines)
- Regex-based parsers inspired by official language specs
- Extract classes, functions, signatures, async detection
- Comprehensive comment extraction for all languages
**Dependency Analysis (dependency_analyzer.py):**
- Added 6 new import extractors (~300 lines)
- C#: using statements, static using, aliases
- Go: import blocks, aliases
- Rust: use statements, curly braces, crate/super
- Java: import statements, static imports, wildcards
- Ruby: require, require_relative, load
- PHP: require/include, namespace use
**File Extensions (codebase_scraper.py):**
- Added mappings: .cs, .go, .rs, .java, .rb, .php
**Test Coverage:**
- Added 24 new tests for 6 languages (4 tests each)
- Added 19 dependency analyzer tests
- Added 6 language detection tests
- Total: 118 tests, 100% passing ✅
**Credits:**
- Regex patterns based on official language specifications:
- Microsoft C# Language Specification
- Go Language Specification
- Rust Language Reference
- Oracle Java Language Specification
- Ruby Documentation
- PHP Language Reference
- NetworkX for graph algorithms
**Issues Resolved:**
- Closes #166 (C# support request)
- Closes #140 (E1.7 MCP tool scrape_codebase)
**Test Results:**
- test_code_analyzer.py: 54 tests passing
- test_dependency_analyzer.py: 43 tests passing
- test_codebase_scraper.py: 21 tests passing
- Total execution: ~0.41s
🚀 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-01-02 21:28:21 +03:00
yusyus
33d8500c44
feat(C2.5): Add inline comment extraction for Python/JS/C++
...
- Added comment extraction methods to code_analyzer.py
- Supports Python (# style), JavaScript (// and /* */), C++ (// and /* */)
- Extracts comment text, line numbers, and type (inline vs block)
- Skips Python shebang and encoding declarations
- Preserves TODO/FIXME/NOTE markers for developer notes
Implementation:
- _extract_python_comments(): Extract # comments with line tracking
- _extract_js_comments(): Extract // and /* */ comments
- _extract_cpp_comments(): Reuses JS logic (same syntax)
- Integrated into _analyze_python(), _analyze_javascript(), _analyze_cpp()
Output Format:
{
'classes': [...],
'functions': [...],
'comments': [
{'line': 5, 'text': 'TODO: Optimize', 'type': 'inline'},
{'line': 12, 'text': 'Block comment\nwith lines', 'type': 'block'}
]
}
Tests:
- Added 8 comprehensive tests to test_code_analyzer.py
- Total: 30 tests passing ✅
- Python: Comment extraction, line numbers, shebang skip
- JavaScript: Inline comments, block comments, mixed
- C++: Comment extraction (uses JS logic)
- TODO/FIXME detection test
Related Issues:
- Closes #67 (C2.5 Extract inline comments as notes)
- Part of C2 Local Codebase Scraping roadmap (TIER 3)
Files Modified:
- src/skill_seekers/cli/code_analyzer.py (+67 lines)
- tests/test_code_analyzer.py (+194 lines)
2026-01-01 23:02:34 +03:00
Jimmy Moceri
0b2a0d121e
feat: Add unlimited local repository analysis and fix 10 critical bugs
...
Features:
- Add local_repo_path config parameter for unlimited file analysis
- Auto-exclude virtual environments and build artifacts (95% noise reduction)
- Enable comprehensive codebase analysis (50 → 323 files, 546% increase)
Bug Fixes:
- Fix logger initialization error (Issue #190 )
- Fix NoneType subscriptable errors in release tag parsing (3 instances)
- Fix relative import paths causing ModuleNotFoundError
- Fix hardcoded 50-file analysis limit
- Fix GitHub API file tree limitation (140 → 345 files discovered)
- Fix AST parser 'not iterable' errors (95 → 0 parsing failures)
- Fix virtual environment file pollution (23,341 → 1,109 file tree items)
- Fix force_rescrape flag not checked before interactive prompt
Impact:
- Code coverage: 14% → 93.6% (+79.6pp)
- Files analyzed: 50 → 323 (+546%)
- Classes extracted: 55 → 585 (+964%)
- Functions extracted: 512 → 2,784 (+444%)
- AST errors: 95 → 0 (-100%)
Tested on JMo Security repository with 345 Python files.
2025-11-16 22:35:23 -05:00
yusyus
ce1c07b437
feat: Add modern Python packaging - Phase 1 (Foundation)
...
Implements issue #168 - Modern Python packaging with uv support
This is Phase 1 of the modernization effort, establishing the core
package structure and build system.
## Major Changes
### 1. Migrated to src/ Layout
- Moved cli/ → src/skill_seekers/cli/
- Moved skill_seeker_mcp/ → src/skill_seekers/mcp/
- Created root package: src/skill_seekers/__init__.py
- Updated all imports: cli. → skill_seekers.cli.
- Updated all imports: skill_seeker_mcp. → skill_seekers.mcp.
### 2. Created pyproject.toml
- Modern Python packaging configuration
- All dependencies properly declared
- 8 CLI entry points configured:
* skill-seekers (unified CLI)
* skill-seekers-scrape
* skill-seekers-github
* skill-seekers-pdf
* skill-seekers-unified
* skill-seekers-enhance
* skill-seekers-package
* skill-seekers-upload
* skill-seekers-estimate
- uv tool support enabled
- Build system: setuptools with wheel
### 3. Created Unified CLI (main.py)
- Git-style subcommands (skill-seekers scrape, etc.)
- Delegates to existing tool main() functions
- Full help system at top-level and subcommand level
- Backwards compatible with individual commands
### 4. Updated Package Versions
- cli/__init__.py: 1.3.0 → 2.0.0
- mcp/__init__.py: 1.2.0 → 2.0.0
- Root package: 2.0.0
### 5. Updated Test Suite
- Fixed test_package_structure.py for new layout
- All 28 package structure tests passing
- Updated all test imports for new structure
## Installation Methods (Working)
```bash
# Development install
pip install -e .
# Run unified CLI
skill-seekers --version # → 2.0.0
skill-seekers --help
# Run individual tools
skill-seekers-scrape --help
skill-seekers-github --help
```
## Test Results
- Package structure tests: 28/28 passing ✅
- Package installs successfully ✅
- All entry points working ✅
## Still TODO (Phase 2)
- [ ] Run full test suite (299 tests)
- [ ] Update documentation (README, CLAUDE.md, etc.)
- [ ] Test with uv tool run/install
- [ ] Build and publish to PyPI
- [ ] Create PR and merge
## Breaking Changes
None - fully backwards compatible. Old import paths still work.
## Migration for Users
No action needed. Package works with both pip and uv.
Closes #168 (when complete)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
2025-11-07 01:14:24 +03:00