From 88d5122a84940fcf241fe90ac6adacce3ca5656e Mon Sep 17 00:00:00 2001 From: DaisukeYoda <27394393+DaisukeYoda@users.noreply.github.com> Date: Tue, 9 Sep 2025 11:03:35 +0900 Subject: [PATCH] chore: finalize repository for public release (#76) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: standardize project name to pyscn throughout codebase - Fix project name inconsistency from pyqol to pyscn in all files - Update HTML report titles and branding to pyscn - Rename config file: pyqol.yaml.example → .pyscn.yaml.example - Update test function names and documentation references - Clean copyright attribution in LICENSE file - Remove temporary files (.DS_Store, coverage files, venv) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude * docs: clean up CHANGELOG and remove legacy beta versions - Update CHANGELOG.md to reflect current state with v0.1.0-beta.13 - Remove references to deleted beta versions (beta.1-12, b7) - Add explanation note about removed versions with distribution issues - Update installation instructions to use latest beta version 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --------- Co-authored-by: DaisukeYoda Co-authored-by: Claude --- .gitignore | 1 - pyqol.yaml.example => .pyscn.yaml.example | 2 +- CHANGELOG.md | 14 +++++++------- LICENSE | 2 +- docs/ARCHITECTURE.md | 2 +- docs/DEVELOPMENT.md | 2 +- e2e/clone_e2e_test.go | 18 +++++++++--------- e2e/complexity_e2e_test.go | 12 ++++++------ e2e/dead_code_e2e_test.go | 14 +++++++------- service/analyze_formatter.go | 6 +++--- service/html_formatter.go | 4 ++-- service/html_formatter_test.go | 2 +- service/output_formatter_test.go | 2 +- 13 files changed, 40 insertions(+), 41 deletions(-) rename pyqol.yaml.example => .pyscn.yaml.example (98%) diff --git a/.gitignore b/.gitignore index 05466f6..3288979 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,6 @@ vendor/ /pyscn /pyscan /pyscn.exe -/pyqol /dist/ /build/ diff --git a/pyqol.yaml.example b/.pyscn.yaml.example similarity index 98% rename from pyqol.yaml.example rename to .pyscn.yaml.example index ebdb0f7..9bfd7ad 100644 --- a/pyqol.yaml.example +++ b/.pyscn.yaml.example @@ -1,4 +1,4 @@ -# pyqol Configuration File +# pyscn Configuration File # This is an example configuration file showing all available options # Complexity analysis configuration diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a451cf..c40e33d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,9 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.1.0-beta.1] - 2025-09-07 +## [0.1.0-beta.13] - 2025-09-08 -### Initial Beta Release +### Latest Beta Release + +*Note: Previous beta versions (0.1.0-beta.1 through 0.1.0-beta.12) contained distribution issues and have been removed from both PyPI and GitHub releases.* #### Features - **Complexity Analysis**: CFG-based cyclomatic complexity calculation with risk thresholds @@ -69,11 +71,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 #### Installation ```bash -# Install beta version +# Install latest beta version pip install --pre pyscn # Or specify exact version -pip install pyscn==0.1.0b1 +pip install pyscn==0.1.0b13 ``` #### Usage @@ -89,6 +91,4 @@ pyscn complexity src/ pyscn deadcode src/ pyscn clone src/ pyscn cbo src/ -``` - -[0.1.0-beta.1]: https://github.com/pyscn/pyscn/releases/tag/v0.1.0-beta.1 \ No newline at end of file +``` \ No newline at end of file diff --git a/LICENSE b/LICENSE index b14cef6..07735ff 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 pyqol +Copyright (c) 2025 pyscn Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 80710df..f626bd3 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -636,7 +636,7 @@ Test complete user workflows through the CLI interface. // e2e/complexity_e2e_test.go func TestComplexityE2EBasic(t *testing.T) { // Build actual binary - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) // Create test Python files diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 84f50af..04327db 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -421,7 +421,7 @@ go tool pprof -http=:8080 cpu.prof go build -gcflags="all=-N -l" ./cmd/pyscn # Run with debug logging -PYQOL_DEBUG=1 ./pyscn analyze test.py +PYSCN_DEBUG=1 ./pyscn analyze test.py # Use delve debugger dlv debug ./cmd/pyscn -- analyze test.py diff --git a/e2e/clone_e2e_test.go b/e2e/clone_e2e_test.go index 8401357..9139735 100644 --- a/e2e/clone_e2e_test.go +++ b/e2e/clone_e2e_test.go @@ -15,7 +15,7 @@ import ( // TestCloneE2EBasic tests basic clone detection command func TestCloneE2EBasic(t *testing.T) { // Build the binary first - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) // Create test directory with Python files containing simple clones @@ -53,7 +53,7 @@ def func2(): // TestCloneE2EJSONOutput tests JSON output format func TestCloneE2EJSONOutput(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -168,7 +168,7 @@ def function_b(arg): // TestCloneE2ETypes tests different clone types filtering func TestCloneE2ETypes(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -224,7 +224,7 @@ def func_b(): // TestCloneE2EThreshold tests similarity threshold configuration func TestCloneE2EThreshold(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -289,7 +289,7 @@ def low_similarity(): // TestCloneE2EFlags tests various command line flags func TestCloneE2EFlags(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -381,7 +381,7 @@ def sample_func2(arg): // TestCloneE2EErrorHandling tests error scenarios func TestCloneE2EErrorHandling(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) tests := []struct { @@ -433,7 +433,7 @@ func TestCloneE2EErrorHandling(t *testing.T) { // TestCloneE2EMultipleFiles tests clone detection across multiple files func TestCloneE2EMultipleFiles(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -470,7 +470,7 @@ def another_func(): // TestCloneE2EAdvancedOptions tests advanced configuration options func TestCloneE2EAdvancedOptions(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -531,7 +531,7 @@ def function_with_different_literals(): // TestCloneE2ERecursiveAnalysis tests recursive directory analysis func TestCloneE2ERecursiveAnalysis(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() diff --git a/e2e/complexity_e2e_test.go b/e2e/complexity_e2e_test.go index c2b097a..7c5b5c7 100644 --- a/e2e/complexity_e2e_test.go +++ b/e2e/complexity_e2e_test.go @@ -13,7 +13,7 @@ import ( // TestComplexityE2EBasic tests basic complexity analysis command func TestComplexityE2EBasic(t *testing.T) { // Build the binary first - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) // Create test directory with Python files @@ -59,7 +59,7 @@ def complex_function(x): // TestComplexityE2EJSONOutput tests JSON output format func TestComplexityE2EJSONOutput(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -127,7 +127,7 @@ def sample_function(x): // TestComplexityE2EFlags tests various command line flags func TestComplexityE2EFlags(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -187,7 +187,7 @@ def medium_complexity(x): // TestComplexityE2EErrorHandling tests error scenarios func TestComplexityE2EErrorHandling(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) tests := []struct { @@ -240,7 +240,7 @@ func TestComplexityE2EErrorHandling(t *testing.T) { // TestComplexityE2EMultipleFiles tests analysis of multiple files func TestComplexityE2EMultipleFiles(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -282,7 +282,7 @@ def func2(x): // Helper functions -func buildPyqolBinary(t *testing.T) string { +func buildPyscnBinary(t *testing.T) string { t.Helper() // Create temporary binary diff --git a/e2e/dead_code_e2e_test.go b/e2e/dead_code_e2e_test.go index 80ee521..1c56109 100644 --- a/e2e/dead_code_e2e_test.go +++ b/e2e/dead_code_e2e_test.go @@ -13,7 +13,7 @@ import ( // TestDeadCodeE2EBasic tests basic dead code analysis command func TestDeadCodeE2EBasic(t *testing.T) { // Build the binary first - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) // Create test directory with Python files containing dead code @@ -77,7 +77,7 @@ def function_with_raise(): // TestDeadCodeE2EJSONOutput tests JSON output format func TestDeadCodeE2EJSONOutput(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -153,7 +153,7 @@ def simple_function(): // TestDeadCodeE2EFlags tests various command line flags func TestDeadCodeE2EFlags(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -234,7 +234,7 @@ def warning_dead_code(x): // TestDeadCodeE2ESeverityFiltering tests severity filtering functionality func TestDeadCodeE2ESeverityFiltering(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -289,7 +289,7 @@ def warning_example(x): // TestDeadCodeE2EErrorHandling tests error scenarios func TestDeadCodeE2EErrorHandling(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) tests := []struct { @@ -350,7 +350,7 @@ func TestDeadCodeE2EErrorHandling(t *testing.T) { // TestDeadCodeE2EMultipleFiles tests analysis of multiple files func TestDeadCodeE2EMultipleFiles(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() @@ -410,7 +410,7 @@ def func3(): // TestDeadCodeE2EContextDisplay tests context line display functionality func TestDeadCodeE2EContextDisplay(t *testing.T) { - binaryPath := buildPyqolBinary(t) + binaryPath := buildPyscnBinary(t) defer os.Remove(binaryPath) testDir := t.TempDir() diff --git a/service/analyze_formatter.go b/service/analyze_formatter.go index 3bce320..9058934 100644 --- a/service/analyze_formatter.go +++ b/service/analyze_formatter.go @@ -46,7 +46,7 @@ func (f *AnalyzeFormatter) Write(response *domain.AnalyzeResponse, format domain // writeText formats the response as plain text func (f *AnalyzeFormatter) writeText(response *domain.AnalyzeResponse, writer io.Writer) error { - fmt.Fprintf(writer, "PyQOL Comprehensive Analysis Report\n") + fmt.Fprintf(writer, "pyscn Comprehensive Analysis Report\n") fmt.Fprintf(writer, "====================================\n\n") fmt.Fprintf(writer, "Generated: %s\n\n", response.GeneratedAt.Format(time.RFC3339)) @@ -145,7 +145,7 @@ const analyzeHTMLTemplate = ` - PyQOL Analysis Report + pyscn Analysis Report