code2logic 1.0.34__tar.gz → 1.0.35__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.34 → code2logic-1.0.35}/PKG-INFO +1 -1
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/__init__.py +1 -1
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/cli.py +101 -78
- {code2logic-1.0.34 → code2logic-1.0.35}/pyproject.toml +1 -1
- {code2logic-1.0.34 → code2logic-1.0.35}/LICENSE +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/README.md +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/__main__.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/adaptive.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/analyzer.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/base.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/benchmark.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/benchmarks/__init__.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/benchmarks/common.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/benchmarks/results.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/benchmarks/runner.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/chunked_reproduction.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/code_review.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/config.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/core/__init__.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/dependency.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/errors.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/file_formats.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/formats/__init__.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/function_logic.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/generators.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/gherkin.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/integrations/__init__.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/intent.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/llm/__init__.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/llm.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/llm_clients.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/llm_clients_new.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/llm_profiler.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/logicml.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/markdown_format.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/mcp_server.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/metrics.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/models.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/parsers.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/project_comparison.md +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/project_reproducer.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/prompts.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/py.typed +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/quality.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/refactor.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/reproducer.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/reproduction.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/schemas/__init__.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/schemas/json_schema.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/schemas/logicml_schema.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/schemas/markdown_schema.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/schemas/yaml_schema.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/shared_utils.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/similarity.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/terminal.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/tools/__init__.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/toon_format.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/universal.py +0 -0
- {code2logic-1.0.34 → code2logic-1.0.35}/code2logic/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.35
|
|
4
4
|
Summary: Code2Logic - Source code to logical representation converter for LLM analysis, featuring Tree-sitter parsing, dependency graph analysis, and multi-language support.
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -605,8 +605,9 @@ code2logic [path] [options]
|
|
|
605
605
|
help='Detail level - columns to include (default: standard)'
|
|
606
606
|
)
|
|
607
607
|
parser.add_argument(
|
|
608
|
-
'-o', '--output',
|
|
609
|
-
|
|
608
|
+
'-o', '--output-dir',
|
|
609
|
+
dest='output_dir',
|
|
610
|
+
help='Output directory for all generated files. If specified, files are saved instead of stdout. File names are derived from --name and format flags: {name}.{format}, {name}.functions.{ext}, {name}.{format}-schema.json'
|
|
610
611
|
)
|
|
611
612
|
parser.add_argument(
|
|
612
613
|
'--name',
|
|
@@ -643,7 +644,12 @@ code2logic [path] [options]
|
|
|
643
644
|
parser.add_argument(
|
|
644
645
|
'--with-schema',
|
|
645
646
|
action='store_true',
|
|
646
|
-
help='Generate JSON schema alongside output'
|
|
647
|
+
help='Generate JSON schema file alongside output (uses project name for filename)'
|
|
648
|
+
)
|
|
649
|
+
parser.add_argument(
|
|
650
|
+
'--stdout',
|
|
651
|
+
action='store_true',
|
|
652
|
+
help='Write all output to stdout instead of files (including schema and function-logic). Useful for piping.'
|
|
647
653
|
)
|
|
648
654
|
parser.add_argument(
|
|
649
655
|
'--no-install',
|
|
@@ -856,23 +862,34 @@ code2logic [path] [options]
|
|
|
856
862
|
# Get project name: CLI arg > env var > default
|
|
857
863
|
project_name = args.project_name if args.project_name else config.get_project_name()
|
|
858
864
|
|
|
859
|
-
# Determine
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
865
|
+
# Determine output mode:
|
|
866
|
+
# - --stdout: all requested output to stdout (with section markers)
|
|
867
|
+
# - -o ./dir with --function-logic or --with-schema: only generate flagged files
|
|
868
|
+
# - -o ./dir without aux flags: generate main file only
|
|
869
|
+
# - no -o: main to stdout (auxiliary files require explicit path)
|
|
870
|
+
use_stdout = args.stdout
|
|
871
|
+
output_dir = args.output_dir
|
|
872
|
+
|
|
873
|
+
# When using output_dir with aux flags, only generate those files (not main)
|
|
874
|
+
has_aux_flags = args.function_logic or args.with_schema
|
|
875
|
+
generate_main = not has_aux_flags or use_stdout
|
|
876
|
+
|
|
877
|
+
# Build output paths based on output_dir
|
|
878
|
+
ext_map = {
|
|
879
|
+
'markdown': 'md',
|
|
880
|
+
'compact': 'txt',
|
|
881
|
+
'json': 'json',
|
|
882
|
+
'yaml': 'yaml',
|
|
883
|
+
'hybrid': 'yaml',
|
|
884
|
+
'csv': 'csv',
|
|
885
|
+
'gherkin': 'feature',
|
|
886
|
+
'toon': 'toon',
|
|
887
|
+
'logicml': 'logicml',
|
|
888
|
+
}
|
|
889
|
+
ext = ext_map.get(args.format, args.format)
|
|
890
|
+
main_output_path = None
|
|
891
|
+
if output_dir and generate_main:
|
|
892
|
+
main_output_path = os.path.join(output_dir, f"{project_name}.{ext}")
|
|
876
893
|
|
|
877
894
|
# Generate output
|
|
878
895
|
if args.verbose:
|
|
@@ -913,16 +930,19 @@ code2logic [path] [options]
|
|
|
913
930
|
schema = generator.generate_schema('hybrid')
|
|
914
931
|
else:
|
|
915
932
|
schema = generator.generate_schema('compact' if compact else 'full')
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
f.
|
|
924
|
-
|
|
925
|
-
|
|
933
|
+
|
|
934
|
+
if use_stdout:
|
|
935
|
+
# Write to stdout with section marker
|
|
936
|
+
print(f"\n=== SCHEMA ===")
|
|
937
|
+
print(schema)
|
|
938
|
+
elif output_dir:
|
|
939
|
+
# Write to file in output directory
|
|
940
|
+
schema_path = os.path.join(output_dir, f"{project_name}.yaml-schema.json")
|
|
941
|
+
os.makedirs(output_dir, exist_ok=True)
|
|
942
|
+
with open(schema_path, 'w', encoding='utf-8') as f:
|
|
943
|
+
f.write(schema)
|
|
944
|
+
if args.verbose:
|
|
945
|
+
log.success(f"Schema written to: {schema_path}")
|
|
926
946
|
|
|
927
947
|
elif args.format == 'toon':
|
|
928
948
|
generator = TOONGenerator()
|
|
@@ -947,16 +967,19 @@ code2logic [path] [options]
|
|
|
947
967
|
if args.with_schema:
|
|
948
968
|
schema_type = 'ultra_compact' if use_ultra_compact else 'standard'
|
|
949
969
|
schema = generator.generate_schema(schema_type)
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
f.
|
|
958
|
-
|
|
959
|
-
|
|
970
|
+
|
|
971
|
+
if use_stdout:
|
|
972
|
+
# Write to stdout with section marker
|
|
973
|
+
print(f"\n=== SCHEMA ===")
|
|
974
|
+
print(schema)
|
|
975
|
+
elif output_dir:
|
|
976
|
+
# Write to file in output directory
|
|
977
|
+
schema_path = os.path.join(output_dir, f"{project_name}.toon-schema.json")
|
|
978
|
+
os.makedirs(output_dir, exist_ok=True)
|
|
979
|
+
with open(schema_path, 'w', encoding='utf-8') as f:
|
|
980
|
+
f.write(schema)
|
|
981
|
+
if args.verbose:
|
|
982
|
+
log.success(f"Schema written to: {schema_path}")
|
|
960
983
|
|
|
961
984
|
elif args.format == 'logicml':
|
|
962
985
|
generator = LogicMLGenerator()
|
|
@@ -970,21 +993,16 @@ code2logic [path] [options]
|
|
|
970
993
|
if args.function_logic:
|
|
971
994
|
logic_gen = FunctionLogicGenerator()
|
|
972
995
|
|
|
973
|
-
#
|
|
996
|
+
# Determine path for function logic file
|
|
974
997
|
if args.function_logic == 'auto':
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
if base.endswith('.c2l'):
|
|
980
|
-
base = base[:-4]
|
|
981
|
-
ext = effective_output.rsplit('.', 1)[-1] if '.' in effective_output else 'logicml'
|
|
982
|
-
logic_path = f"{base}.functions.{ext}"
|
|
998
|
+
if output_dir:
|
|
999
|
+
# Use output directory with project name
|
|
1000
|
+
logic_ext = ext_map.get(args.format, 'logicml')
|
|
1001
|
+
logic_path = os.path.join(output_dir, f"{project_name}.functions.{logic_ext}")
|
|
983
1002
|
else:
|
|
984
|
-
#
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
logic_path = f"{project_name}.functions.{ext}"
|
|
1003
|
+
# No output dir - use project name in current directory
|
|
1004
|
+
logic_ext = ext_map.get(args.format, 'logicml')
|
|
1005
|
+
logic_path = f"{project_name}.functions.{logic_ext}"
|
|
988
1006
|
else:
|
|
989
1007
|
logic_path = str(args.function_logic)
|
|
990
1008
|
|
|
@@ -998,13 +1016,17 @@ code2logic [path] [options]
|
|
|
998
1016
|
else:
|
|
999
1017
|
logic_out = logic_gen.generate(project, detail=args.detail)
|
|
1000
1018
|
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1019
|
+
if use_stdout:
|
|
1020
|
+
# Write to stdout with section marker
|
|
1021
|
+
print(f"\n=== FUNCTION_LOGIC ===")
|
|
1022
|
+
print(logic_out)
|
|
1023
|
+
elif output_dir:
|
|
1024
|
+
# Write to file in output directory
|
|
1025
|
+
os.makedirs(output_dir, exist_ok=True)
|
|
1026
|
+
with open(logic_path, 'w', encoding='utf-8') as f:
|
|
1027
|
+
f.write(logic_out)
|
|
1028
|
+
if args.verbose:
|
|
1029
|
+
log.success(f"Function logic written to: {logic_path}")
|
|
1008
1030
|
|
|
1009
1031
|
gen_time = time.time() - gen_start
|
|
1010
1032
|
|
|
@@ -1015,25 +1037,26 @@ code2logic [path] [options]
|
|
|
1015
1037
|
log.stats("Size", f"{output_size:,} chars (~{tokens_approx:,} tokens)")
|
|
1016
1038
|
log.stats("Lines", output.count('\n') + 1)
|
|
1017
1039
|
|
|
1018
|
-
# Write output
|
|
1019
|
-
if
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
os.makedirs(
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
print(output, flush=True)
|
|
1031
|
-
except BrokenPipeError:
|
|
1040
|
+
# Write main output (only if generate_main is True)
|
|
1041
|
+
if generate_main:
|
|
1042
|
+
if output_dir:
|
|
1043
|
+
# Write to file in output directory
|
|
1044
|
+
os.makedirs(output_dir, exist_ok=True)
|
|
1045
|
+
with open(main_output_path, 'w', encoding='utf-8') as f:
|
|
1046
|
+
f.write(output)
|
|
1047
|
+
if args.verbose:
|
|
1048
|
+
log.success(f"Output written to: {main_output_path}")
|
|
1049
|
+
else:
|
|
1050
|
+
# Write to stdout
|
|
1051
|
+
if not args.quiet:
|
|
1032
1052
|
try:
|
|
1033
|
-
|
|
1034
|
-
except
|
|
1035
|
-
|
|
1036
|
-
|
|
1053
|
+
print(output, flush=True)
|
|
1054
|
+
except BrokenPipeError:
|
|
1055
|
+
try:
|
|
1056
|
+
sys.stdout.close()
|
|
1057
|
+
except Exception:
|
|
1058
|
+
pass
|
|
1059
|
+
os._exit(0)
|
|
1037
1060
|
|
|
1038
1061
|
# Final summary
|
|
1039
1062
|
if args.verbose:
|
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "code2logic"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.35"
|
|
8
8
|
description = "Code2Logic - Source code to logical representation converter for LLM analysis, featuring Tree-sitter parsing, dependency graph analysis, and multi-language support."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|