mirror of
https://github.com/kevinveenbirkenbach/directory-content-scanner.git
synced 2025-12-19 15:12:59 +00:00
This commit introduces a complete structural and architectural refactor of
Analysis-Ready Code (ARC). The project is now fully migrated to a modern src/-based Python package layout, with proper packaging via pyproject.toml, a clean Nix flake, and improved CLI entry points. Major changes: • Add `src/arc/` package with clean module structure: - arc/__init__.py now contains the main() dispatcher and clipboard helpers - arc/__main__.py provides a proper `python -m arc` entry point - arc/cli.py rewritten with full argparse-based interface - arc/code_processor.py modernized and relocated - arc/directory_handler.py rewritten with output_stream support - arc/tee.py added for multi-stream output (stdout + buffer) • Remove legacy top-level modules: - cli.py - directory_handler.py - main.py • Introduce fully PEP-517 compliant pyproject.toml with console script: - arc = arc.__main__:main • Add Nix flake (`flake.nix`) providing: - buildPythonApplication package `arc` - `nix run .#arc` app - development shell with Python + xclip • Add Makefile overhaul: - automatic detection of Nix vs Python installation - unified install/uninstall targets - Nix wrapper installation into ~/.local/bin - improved help text and shell safety • Add GitHub CI pipelines: - ci-python.yml for Python builds + Makefile tests + arc --help - ci-nix.yml for Nix builds, flake checks, dev-shell tests, and `nix run .#arc` • Refactor and extend unit tests: - test_arc.py updated for src/ imports - new tests: test_cli.py, test_main.py, test_tee.py - improved CodeProcessor and DirectoryHandler tests • Add egg-info metadata for local builds • Add build/lib/ tree for compatibility with setuptools (generated) Overall, this commit modernizes ARC into a clean, robust, and fully packaged Python/Nix hybrid tool, enabling reproducible builds, solid CLI behavior, testable architecture, and CI automation. https://chatgpt.com/share/693933a0-e280-800f-9cf0-26036d15be04
This commit is contained in:
@@ -6,13 +6,14 @@ import tempfile
|
||||
import unittest
|
||||
from contextlib import redirect_stdout
|
||||
|
||||
# Ensure project root is on sys.path when running via discover
|
||||
# Ensure src/ is on sys.path when running via discover
|
||||
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))
|
||||
if PROJECT_ROOT not in sys.path:
|
||||
sys.path.insert(0, PROJECT_ROOT)
|
||||
SRC_ROOT = os.path.join(PROJECT_ROOT, "src")
|
||||
if SRC_ROOT not in sys.path:
|
||||
sys.path.insert(0, SRC_ROOT)
|
||||
|
||||
from code_processor import CodeProcessor
|
||||
from directory_handler import DirectoryHandler
|
||||
from arc.code_processor import CodeProcessor
|
||||
from arc.directory_handler import DirectoryHandler
|
||||
|
||||
|
||||
class TestCodeProcessor(unittest.TestCase):
|
||||
@@ -35,7 +36,7 @@ def f():
|
||||
self.assertNotIn("# a comment", out)
|
||||
# tolerate whitespace normalization from tokenize.untokenize
|
||||
self.assertRegex(out, r'y\s*=\s*"string with # not a comment"')
|
||||
self.assertIn('triple quoted but not a docstring', out)
|
||||
self.assertIn("triple quoted but not a docstring", out)
|
||||
|
||||
def test_cstyle_comment_stripping(self):
|
||||
src = '''\
|
||||
@@ -170,8 +171,12 @@ class TestDirectoryHandler(unittest.TestCase):
|
||||
with open(p, "w") as f:
|
||||
f.write("# comment only\nx=1\n")
|
||||
buf = io.StringIO()
|
||||
with redirect_stdout(buf):
|
||||
DirectoryHandler.print_file_content(p, no_comments=True, compress=False)
|
||||
DirectoryHandler.print_file_content(
|
||||
p,
|
||||
no_comments=True,
|
||||
compress=False,
|
||||
output_stream=buf,
|
||||
)
|
||||
out = buf.getvalue()
|
||||
self.assertIn("<< START:", out)
|
||||
# be whitespace-tolerant (tokenize may insert spaces)
|
||||
@@ -179,8 +184,12 @@ class TestDirectoryHandler(unittest.TestCase):
|
||||
self.assertNotIn("# comment only", out)
|
||||
|
||||
buf = io.StringIO()
|
||||
with redirect_stdout(buf):
|
||||
DirectoryHandler.print_file_content(p, no_comments=True, compress=True)
|
||||
DirectoryHandler.print_file_content(
|
||||
p,
|
||||
no_comments=True,
|
||||
compress=True,
|
||||
output_stream=buf,
|
||||
)
|
||||
out = buf.getvalue()
|
||||
self.assertIn("COMPRESSED CODE:", out)
|
||||
self.assertIn("<< END >>", out)
|
||||
|
||||
Reference in New Issue
Block a user