Supported Frameworks
- Django (views, signals, URL routing)
- Flask (routes, error handlers)
- FastAPI (routes, dependencies)
- Pydantic (models, validators)
- Celery (tasks)
- Starlette (middleware)
How Detection Works
Skylos identifies framework usage through:- Import scanning: Detects
from flask import Flask,import django, etc. - Decorator recognition: Identifies
@app.route,@receiver,@pytest.fixture - Base class analysis: Recognizes
class MyView(APIView),class Config(BaseModel) - Pattern matching: Identifies
urlpatterns,INSTALLED_APPS, etc.
Django
Views
Both function-based and class-based views are recognized:URL Patterns
Functions referenced inurlpatterns are marked as used:
Signals
Signal receivers are recognized:Django REST Framework
ViewSet methods and serializer fields are recognized:Flask
Routes
Route handlers are recognized via decorators:Error Handlers and Middleware
FastAPI
Route Handlers
Dependency Injection
Functions used as dependencies are recognized:Request Models
Pydantic models used as type hints in routes are recognized:Pydantic
Models
Classes inheriting fromBaseModel have special handling:
Validators
Computed Fields
Testing Frameworks
Pytest
Unittest
Decorator Patterns
Skylos recognizes these decorator patterns:Function Name Patterns
Functions matching these patterns are recognized as framework callbacks:Confidence Penalties
When framework patterns are detected, Skylos applies confidence penalties to reduce false positives:| Pattern | Confidence Penalty |
|---|---|
| Framework decorator | -40 |
| Dynamic module access | -40 |
| Test-related code | -100 |
| Settings/Config class attributes | 0 (fully excluded) |
Configuration Class Handling
Classes namedSettings, Config, or ending with those suffixes have their attributes excluded from dead code detection:
Limitations
Framework awareness is based on static analysis and cannot detect all usage patterns:- Dynamic routing: Routes defined at runtime may not be detected
- Plugin systems: Code loaded via plugins may appear unused
- Meta-programming: Heavily meta-programmed code may produce false positives
