code2logic 1.0.6__tar.gz → 1.0.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {code2logic-1.0.6 → code2logic-1.0.7}/PKG-INFO +8 -5
- {code2logic-1.0.6 → code2logic-1.0.7}/README.md +7 -4
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/__init__.py +1 -1
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/analyzer.py +17 -3
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/cli.py +69 -14
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/generators.py +867 -142
- code2logic-1.0.7/code2logic/models.py +337 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/parsers.py +510 -84
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/schemas/yaml_schema.py +24 -3
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/toon_format.py +153 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/pyproject.toml +2 -2
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/test_yaml_compact.py +39 -9
- code2logic-1.0.6/code2logic/models.py +0 -177
- {code2logic-1.0.6 → code2logic-1.0.7}/.gitignore +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/CHANGELOG.md +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/LICENSE +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/__main__.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/adaptive.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/base.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/benchmark.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/benchmarks/__init__.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/benchmarks/common.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/benchmarks/results.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/benchmarks/runner.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/chunked_reproduction.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/code_review.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/config.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/core/__init__.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/dependency.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/errors.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/file_formats.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/formats/__init__.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/gherkin.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/integrations/__init__.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/intent.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/llm/__init__.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/llm.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/llm_clients.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/llm_profiler.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/logicml.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/markdown_format.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/mcp_server.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/metrics.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/project_reproducer.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/prompts.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/py.typed +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/quality.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/refactor.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/reproducer.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/reproduction.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/schemas/__init__.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/schemas/json_schema.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/schemas/logicml_schema.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/schemas/markdown_schema.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/shared_utils.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/similarity.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/terminal.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/tools/__init__.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/universal.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/code2logic/utils.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/__init__.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/conftest.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_algorithms.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_api.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_async.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_class.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_dataclasses.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_enum.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_functions.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_go.go +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_javascript.js +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_pydantic.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_reexport/__init__.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_reexport/exceptions.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_reexport/models.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_reexport/utils.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_rust.rs +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_sql.sql +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_sql_dsl.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/samples/sample_typescript.ts +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/test_analyzer.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/test_error_handling.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/test_formats.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/test_generators.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/test_intent.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/test_llm_priority.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/test_llm_profiler.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/test_parser_integrity.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/test_reproduction.py +0 -0
- {code2logic-1.0.6 → code2logic-1.0.7}/tests/test_shared_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code2logic
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.7
|
|
4
4
|
Summary: Convert source code to logical representation for LLM analysis
|
|
5
5
|
Project-URL: Homepage, https://github.com/wronai/code2logic
|
|
6
6
|
Project-URL: Documentation, https://code2logic.readthedocs.io
|
|
@@ -318,11 +318,14 @@ pip install code2logic[nlp] # Enhanced intents
|
|
|
318
318
|
# Standard Markdown output
|
|
319
319
|
code2logic /path/to/project
|
|
320
320
|
|
|
321
|
-
# Compact
|
|
322
|
-
code2logic /path/to/project -f compact
|
|
321
|
+
# Compact YAML (14% smaller, meta.legend transparency)
|
|
322
|
+
code2logic /path/to/project -f yaml --compact -o analysis-compact.yaml
|
|
323
323
|
|
|
324
|
-
#
|
|
325
|
-
code2logic /path/to/project -f
|
|
324
|
+
# Ultra-compact TOON (71% smaller, single-letter keys)
|
|
325
|
+
code2logic /path/to/project -f toon --ultra-compact -o analysis-ultra.toon
|
|
326
|
+
|
|
327
|
+
# Generate schema alongside output
|
|
328
|
+
code2logic /path/to/project -f yaml --compact --with-schema
|
|
326
329
|
|
|
327
330
|
# With detailed analysis
|
|
328
331
|
code2logic /path/to/project -d detailed
|
|
@@ -49,11 +49,14 @@ pip install code2logic[nlp] # Enhanced intents
|
|
|
49
49
|
# Standard Markdown output
|
|
50
50
|
code2logic /path/to/project
|
|
51
51
|
|
|
52
|
-
# Compact
|
|
53
|
-
code2logic /path/to/project -f compact
|
|
52
|
+
# Compact YAML (14% smaller, meta.legend transparency)
|
|
53
|
+
code2logic /path/to/project -f yaml --compact -o analysis-compact.yaml
|
|
54
54
|
|
|
55
|
-
#
|
|
56
|
-
code2logic /path/to/project -f
|
|
55
|
+
# Ultra-compact TOON (71% smaller, single-letter keys)
|
|
56
|
+
code2logic /path/to/project -f toon --ultra-compact -o analysis-ultra.toon
|
|
57
|
+
|
|
58
|
+
# Generate schema alongside output
|
|
59
|
+
code2logic /path/to/project -f yaml --compact --with-schema
|
|
57
60
|
|
|
58
61
|
# With detailed analysis
|
|
59
62
|
code2logic /path/to/project -d detailed
|
|
@@ -157,6 +157,7 @@ class ProjectAnalyzer:
|
|
|
157
157
|
similar_functions=similar,
|
|
158
158
|
total_files=len(self.modules),
|
|
159
159
|
total_lines=sum(m.lines_total for m in self.modules),
|
|
160
|
+
total_bytes=sum(getattr(m, 'file_bytes', 0) for m in self.modules),
|
|
160
161
|
generated_at=datetime.now().isoformat()
|
|
161
162
|
)
|
|
162
163
|
|
|
@@ -192,13 +193,26 @@ class ProjectAnalyzer:
|
|
|
192
193
|
|
|
193
194
|
# Try Tree-sitter first, then fallback
|
|
194
195
|
module = None
|
|
195
|
-
|
|
196
|
-
|
|
196
|
+
try:
|
|
197
|
+
if self.ts_parser and self.ts_parser.is_available(language):
|
|
198
|
+
module = self.ts_parser.parse(rel_path, content, language)
|
|
199
|
+
except Exception as e:
|
|
200
|
+
if self.verbose:
|
|
201
|
+
print(f"Tree-sitter parser failed for {rel_path}: {e}", file=sys.stderr)
|
|
197
202
|
|
|
198
203
|
if module is None:
|
|
199
|
-
|
|
204
|
+
try:
|
|
205
|
+
module = self.fallback_parser.parse(rel_path, content, language)
|
|
206
|
+
except Exception as e:
|
|
207
|
+
if self.verbose:
|
|
208
|
+
print(f"Fallback parser failed for {rel_path}: {e}", file=sys.stderr)
|
|
209
|
+
continue
|
|
200
210
|
|
|
201
211
|
if module:
|
|
212
|
+
try:
|
|
213
|
+
module.file_bytes = fp.stat().st_size
|
|
214
|
+
except Exception:
|
|
215
|
+
module.file_bytes = len(content.encode('utf-8', errors='ignore'))
|
|
202
216
|
self.modules.append(module)
|
|
203
217
|
|
|
204
218
|
def _detect_entrypoints(self) -> List[str]:
|
|
@@ -540,6 +540,7 @@ Output formats (token efficiency):
|
|
|
540
540
|
yaml - Readable (~35K tokens/100 files) - nested/flat
|
|
541
541
|
logicml - Compressed (best compression) - reproduction-oriented
|
|
542
542
|
toon - Token-oriented (~JSON-size, more LLM-friendly) - tabular arrays
|
|
543
|
+
hybrid - Optimal balance (70% YAML size, 90% info, best LLM quality)
|
|
543
544
|
gherkin - Behavioral scenarios - good for minimal implementations
|
|
544
545
|
markdown - Documentation (~55K tokens/100 files)
|
|
545
546
|
|
|
@@ -610,6 +611,26 @@ code2logic [path] [options]
|
|
|
610
611
|
action='store_true',
|
|
611
612
|
help='Use flat structure (for json/yaml) - better for comparisons'
|
|
612
613
|
)
|
|
614
|
+
parser.add_argument(
|
|
615
|
+
'--compact',
|
|
616
|
+
action='store_true',
|
|
617
|
+
help='Use compact YAML format (14% smaller, meta.legend transparency)'
|
|
618
|
+
)
|
|
619
|
+
parser.add_argument(
|
|
620
|
+
'--ultra-compact',
|
|
621
|
+
action='store_true',
|
|
622
|
+
help='Use ultra-compact TOON format (71% smaller, single-letter keys)'
|
|
623
|
+
)
|
|
624
|
+
parser.add_argument(
|
|
625
|
+
'--hybrid',
|
|
626
|
+
action='store_true',
|
|
627
|
+
help='Use hybrid format (70% of YAML size, 90% of info, best LLM quality)'
|
|
628
|
+
)
|
|
629
|
+
parser.add_argument(
|
|
630
|
+
'--with-schema',
|
|
631
|
+
action='store_true',
|
|
632
|
+
help='Generate JSON schema alongside output'
|
|
633
|
+
)
|
|
613
634
|
parser.add_argument(
|
|
614
635
|
'--no-install',
|
|
615
636
|
action='store_true',
|
|
@@ -822,22 +843,56 @@ code2logic [path] [options]
|
|
|
822
843
|
output = generator.generate(project, flat=args.flat, detail=args.detail)
|
|
823
844
|
elif args.format == 'yaml':
|
|
824
845
|
generator = YAMLGenerator()
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
846
|
+
compact = args.compact if hasattr(args, 'compact') else False
|
|
847
|
+
hybrid = args.hybrid if hasattr(args, 'hybrid') else False
|
|
848
|
+
|
|
849
|
+
if hybrid:
|
|
850
|
+
output = generator.generate_hybrid(project, detail=args.detail)
|
|
851
|
+
else:
|
|
852
|
+
output = generator.generate(project, flat=args.flat, detail=args.detail, compact=compact)
|
|
853
|
+
|
|
854
|
+
# Generate schema if requested
|
|
855
|
+
if args.with_schema:
|
|
856
|
+
if hybrid:
|
|
857
|
+
schema = generator.generate_schema('hybrid')
|
|
858
|
+
else:
|
|
859
|
+
schema = generator.generate_schema('compact' if compact else 'full')
|
|
860
|
+
base_name = os.path.splitext(args.output)[0] if args.output else 'output'
|
|
861
|
+
schema_path = f"{base_name}.yaml-schema.json"
|
|
862
|
+
with open(schema_path, 'w', encoding='utf-8') as f:
|
|
863
|
+
f.write(schema)
|
|
864
|
+
if args.verbose:
|
|
865
|
+
log.success(f"Schema written to: {schema_path}")
|
|
866
|
+
|
|
833
867
|
elif args.format == 'toon':
|
|
834
868
|
generator = TOONGenerator()
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
869
|
+
# For TOON, --compact means ultra-compact format
|
|
870
|
+
compact = args.compact if hasattr(args, 'compact') else False
|
|
871
|
+
ultra_compact = args.ultra_compact if hasattr(args, 'ultra_compact') else False
|
|
872
|
+
|
|
873
|
+
# Use compact or ultra_compact flag (compact takes precedence for TOON)
|
|
874
|
+
use_ultra_compact = ultra_compact or compact
|
|
875
|
+
|
|
876
|
+
if use_ultra_compact:
|
|
877
|
+
output = generator.generate_ultra_compact(project)
|
|
878
|
+
else:
|
|
879
|
+
detail_map = {
|
|
880
|
+
'minimal': 'compact',
|
|
881
|
+
'standard': 'standard',
|
|
882
|
+
'full': 'full',
|
|
883
|
+
}
|
|
884
|
+
output = generator.generate(project, detail=detail_map.get(args.detail, 'standard'))
|
|
885
|
+
|
|
886
|
+
# Generate schema if requested
|
|
887
|
+
if args.with_schema:
|
|
888
|
+
schema_type = 'ultra_compact' if use_ultra_compact else 'standard'
|
|
889
|
+
schema = generator.generate_schema(schema_type)
|
|
890
|
+
base_name = os.path.splitext(args.output)[0] if args.output else 'output'
|
|
891
|
+
schema_path = f"{base_name}.toon-schema.json"
|
|
892
|
+
with open(schema_path, 'w', encoding='utf-8') as f:
|
|
893
|
+
f.write(schema)
|
|
894
|
+
if args.verbose:
|
|
895
|
+
log.success(f"Schema written to: {schema_path}")
|
|
841
896
|
|
|
842
897
|
elif args.format == 'logicml':
|
|
843
898
|
generator = LogicMLGenerator()
|