Title: Feature Request: Refactor Configuration Architecture for Better CLI/Library Separation · Issue #12 · codellm-devkit/codeanalyzer-python · GitHub
Open Graph Title: Feature Request: Refactor Configuration Architecture for Better CLI/Library Separation · Issue #12 · codellm-devkit/codeanalyzer-python
X Title: Feature Request: Refactor Configuration Architecture for Better CLI/Library Separation · Issue #12 · codellm-devkit/codeanalyzer-python
Description: Summary Refactor the current parameter-passing approach to use a layered configuration pattern that cleanly separates CLI concerns from core analysis configuration, improving both library usability and maintainability. Current State The ...
Open Graph Description: Summary Refactor the current parameter-passing approach to use a layered configuration pattern that cleanly separates CLI concerns from core analysis configuration, improving both library usability...
X Description: Summary Refactor the current parameter-passing approach to use a layered configuration pattern that cleanly separates CLI concerns from core analysis configuration, improving both library usability...
Opengraph URL: https://github.com/codellm-devkit/codeanalyzer-python/issues/12
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Feature Request: Refactor Configuration Architecture for Better CLI/Library Separation","articleBody":"## Summary\nRefactor the current parameter-passing approach to use a layered configuration pattern that cleanly separates CLI concerns from core analysis configuration, improving both library usability and maintainability.\n\n## Current State\nThe `Codeanalyzer` class currently accepts individual parameters in its constructor:\n```python\nwith Codeanalyzer(\n input, analysis_level, using_codeql, rebuild_analysis, cache_dir, clear_cache\n) as analyzer:\n```\n\nThis approach has several limitations:\n- **Library users** must pass CLI-specific parameters (like `clear_cache`)\n- **Parameter explosion** as new options are added\n- **Tight coupling** between CLI and core analysis logic\n- **Hard to test** - requires mocking many individual parameters\n- **No validation** of parameter combinations\n- **No config file support** - difficult to extend\n\n## Proposed Solution\n\n### 1. Core Configuration Object\nCreate an `AnalysisOptions` class that contains only analysis-relevant settings:\n\n```python\n@dataclass\nclass AnalysisOptions:\n input_path: Path\n analysis_level: int = 1\n using_codeql: bool = False\n rebuild_analysis: bool = False\n cache_dir: Optional[Path] = None\n \n def validate(self):\n # Centralized validation logic\n pass\n \n @classmethod\n def from_dict(cls, config: dict):\n # Support for config files\n pass\n```\n\n### 2. CLI Configuration Layer\nCreate a `CLIOptions` class for CLI-specific concerns:\n\n```python\n@dataclass\nclass CLIOptions:\n output_dir: Optional[Path] = None\n output_format: OutputFormat = OutputFormat.JSON\n verbosity: int = 0\n clear_cache: bool = True\n \n def setup_logging(self):\n # Handle CLI-specific setup\n pass\n```\n\n### 3. Updated Core Interface\nModify `Codeanalyzer` to accept the configuration object:\n\n```python\nclass Codeanalyzer:\n def __init__(self, options: AnalysisOptions):\n self.options = options\n # Clean, single source of configuration\n```\n\n## Benefits\n\n### For Library Users\n- **Clean API**: Single configuration object instead of many parameters\n- **Type Safety**: Better IDE support and validation\n- **Extensibility**: Easy to add new options without breaking existing code\n- **Testability**: Simple to create test configurations\n\n```python\n# Clean library usage\noptions = AnalysisOptions(\n input_path=Path(\"my_project\"),\n analysis_level=2,\n using_codeql=True\n)\nwith Codeanalyzer(options) as analyzer:\n results = analyzer.analyze()\n```\n\n### For CLI Users\n- **No breaking changes**: CLI interface remains the same\n- **Better error messages**: Centralized validation\n- **Future extensibility**: Config file support, presets, etc.\n\n### For Maintainers\n- **Separation of concerns**: CLI logic separate from analysis logic\n- **Easier testing**: Mock configuration objects instead of individual parameters\n- **Better validation**: Centralized parameter validation and type checking\n- **Extensibility**: Easy to add features like config files, environment variables\n\n## Backward Compatibility\n- CLI interface remains unchanged\n- Library interface change is breaking, but provides clear migration path\n- Consider deprecation warnings for old constructor signature\n\n## Testing Strategy\n- Unit tests for configuration validation\n- Integration tests for CLI/library interfaces\n- Test configuration serialization/deserialization\n- Test error handling and validation\n\n## Success Metrics\n- Reduced coupling between CLI and core analysis\n- Improved library API usability\n- Foundation for future configuration enhancements\n- Better test coverage of configuration logic\n\n## References\nSimilar patterns used successfully in:\n- MyPy (`mypy.options.Options`)\n- Black (`black.FileMode`)\n- Pylint (`pylint.config.Configuration`)\n- WALA (`AnalysisOptions`)","author":{"url":"https://github.com/rahlk","@type":"Person","name":"rahlk"},"datePublished":"2025-07-11T17:23:22.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/12/codeanalyzer-python/issues/12"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:1fd665e7-f879-ae75-d769-3a16d8798062 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8CE2:3EAA26:93FAA3:C94CE4:698E3CC2 |
| html-safe-nonce | cf69e3c5c39f16e0879c4cf9a08465c8c4a6fa964741816a1155178f2e0877c1 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4Q0UyOjNFQUEyNjo5M0ZBQTM6Qzk0Q0U0OjY5OEUzQ0MyIiwidmlzaXRvcl9pZCI6IjI1MDc3Njg1NDkwNTg5NTIzODYiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 0ed9d054469f7976395431279669a04075688cb17aac1e5edd1a34ba7038adba |
| hovercard-subject-tag | issue:3223687347 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/codellm-devkit/codeanalyzer-python/12/issue_layout |
| twitter:image | https://opengraph.githubassets.com/9753a124702258c9dfe6070ad0b7fd54cc5985a18bf93d717e9e400b52e610ce/codellm-devkit/codeanalyzer-python/issues/12 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/9753a124702258c9dfe6070ad0b7fd54cc5985a18bf93d717e9e400b52e610ce/codellm-devkit/codeanalyzer-python/issues/12 |
| og:image:alt | Summary Refactor the current parameter-passing approach to use a layered configuration pattern that cleanly separates CLI concerns from core analysis configuration, improving both library usability... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | rahlk |
| hostname | github.com |
| expected-hostname | github.com |
| None | a5632af64f7fed7bff1d6a428d1aca1b94fa7a48f760de2d39d9b1effdbf0082 |
| turbo-cache-control | no-preview |
| go-import | github.com/codellm-devkit/codeanalyzer-python git https://github.com/codellm-devkit/codeanalyzer-python.git |
| octolytics-dimension-user_id | 197800760 |
| octolytics-dimension-user_login | codellm-devkit |
| octolytics-dimension-repository_id | 978344904 |
| octolytics-dimension-repository_nwo | codellm-devkit/codeanalyzer-python |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 978344904 |
| octolytics-dimension-repository_network_root_nwo | codellm-devkit/codeanalyzer-python |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | aa1fa9100f85cd8b602c63c7e337f9151e70024f |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width