jaclang 0.8.7__py3-none-any.whl → 0.8.8__py3-none-any.whl
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.
Potentially problematic release.
This version of jaclang might be problematic. Click here for more details.
- jaclang/cli/cli.py +13 -27
- jaclang/cli/cmdreg.py +44 -0
- jaclang/compiler/constant.py +0 -1
- jaclang/compiler/jac.lark +3 -6
- jaclang/compiler/larkparse/jac_parser.py +2 -2
- jaclang/compiler/parser.py +213 -34
- jaclang/compiler/passes/main/__init__.py +2 -4
- jaclang/compiler/passes/main/def_use_pass.py +0 -4
- jaclang/compiler/passes/main/predynamo_pass.py +221 -0
- jaclang/compiler/passes/main/pyast_gen_pass.py +70 -52
- jaclang/compiler/passes/main/pyast_load_pass.py +52 -20
- jaclang/compiler/passes/main/sym_tab_build_pass.py +1 -1
- jaclang/compiler/passes/main/tests/fixtures/checker/import_sym.jac +2 -0
- jaclang/compiler/passes/main/tests/fixtures/checker/import_sym_test.jac +6 -0
- jaclang/compiler/passes/main/tests/fixtures/checker/imported_sym.jac +5 -0
- jaclang/compiler/passes/main/tests/fixtures/checker_arg_param_match.jac +37 -0
- jaclang/compiler/passes/main/tests/fixtures/checker_arity.jac +18 -0
- jaclang/compiler/passes/main/tests/fixtures/checker_cat_is_animal.jac +18 -0
- jaclang/compiler/passes/main/tests/fixtures/checker_float.jac +7 -0
- jaclang/compiler/passes/main/tests/fixtures/checker_param_types.jac +11 -0
- jaclang/compiler/passes/main/tests/fixtures/checker_self_type.jac +9 -0
- jaclang/compiler/passes/main/tests/fixtures/checker_sym_inherit.jac +42 -0
- jaclang/compiler/passes/main/tests/fixtures/predynamo_fix3.jac +43 -0
- jaclang/compiler/passes/main/tests/fixtures/predynamo_where_assign.jac +13 -0
- jaclang/compiler/passes/main/tests/fixtures/predynamo_where_return.jac +11 -0
- jaclang/compiler/passes/main/tests/test_checker_pass.py +191 -0
- jaclang/compiler/passes/main/tests/test_predynamo_pass.py +57 -0
- jaclang/compiler/passes/main/type_checker_pass.py +29 -73
- jaclang/compiler/passes/tool/doc_ir_gen_pass.py +204 -44
- jaclang/compiler/passes/tool/jac_formatter_pass.py +119 -69
- jaclang/compiler/passes/tool/tests/fixtures/corelib_fmt.jac +3 -3
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/triple_quoted_string.jac +4 -5
- jaclang/compiler/passes/tool/tests/fixtures/tagbreak.jac +171 -11
- jaclang/compiler/passes/transform.py +12 -8
- jaclang/compiler/program.py +14 -6
- jaclang/compiler/tests/fixtures/jac_import_py_files.py +4 -0
- jaclang/compiler/tests/fixtures/jac_module.jac +3 -0
- jaclang/compiler/tests/fixtures/multiple_syntax_errors.jac +10 -0
- jaclang/compiler/tests/fixtures/python_module.py +1 -0
- jaclang/compiler/tests/test_importer.py +39 -0
- jaclang/compiler/tests/test_parser.py +49 -0
- jaclang/compiler/type_system/type_evaluator.py +351 -67
- jaclang/compiler/type_system/type_utils.py +246 -0
- jaclang/compiler/type_system/types.py +58 -2
- jaclang/compiler/unitree.py +79 -94
- jaclang/langserve/engine.jac +138 -159
- jaclang/langserve/server.jac +25 -1
- jaclang/langserve/tests/fixtures/circle.jac +3 -3
- jaclang/langserve/tests/fixtures/circle_err.jac +3 -3
- jaclang/langserve/tests/fixtures/circle_pure.test.jac +3 -3
- jaclang/langserve/tests/fixtures/completion_test_err.jac +10 -0
- jaclang/langserve/tests/server_test/circle_template.jac +80 -0
- jaclang/langserve/tests/server_test/glob_template.jac +4 -0
- jaclang/langserve/tests/server_test/test_lang_serve.py +154 -309
- jaclang/langserve/tests/server_test/utils.py +153 -116
- jaclang/langserve/tests/test_server.py +21 -84
- jaclang/langserve/utils.jac +12 -15
- jaclang/runtimelib/machine.py +7 -0
- jaclang/runtimelib/meta_importer.py +27 -1
- jaclang/runtimelib/tests/fixtures/custom_access_validation.jac +1 -1
- jaclang/runtimelib/tests/fixtures/savable_object.jac +2 -2
- jaclang/settings.py +18 -14
- jaclang/tests/fixtures/abc_check.jac +3 -3
- jaclang/tests/fixtures/arch_rel_import_creation.jac +12 -12
- jaclang/tests/fixtures/chandra_bugs2.jac +3 -3
- jaclang/tests/fixtures/create_dynamic_archetype.jac +13 -13
- jaclang/tests/fixtures/maxfail_run_test.jac +4 -4
- jaclang/tests/fixtures/params/param_syntax_err.jac +9 -0
- jaclang/tests/fixtures/params/test_complex_params.jac +42 -0
- jaclang/tests/fixtures/params/test_failing_kwonly.jac +207 -0
- jaclang/tests/fixtures/params/test_failing_posonly.jac +116 -0
- jaclang/tests/fixtures/params/test_failing_varargs.jac +300 -0
- jaclang/tests/fixtures/params/test_kwonly_params.jac +29 -0
- jaclang/tests/fixtures/py2jac_params.py +8 -0
- jaclang/tests/fixtures/run_test.jac +4 -4
- jaclang/tests/test_cli.py +37 -1
- jaclang/tests/test_language.py +74 -16
- jaclang/utils/helpers.py +47 -2
- jaclang/utils/module_resolver.py +10 -0
- jaclang/utils/test.py +8 -0
- jaclang/utils/treeprinter.py +0 -18
- {jaclang-0.8.7.dist-info → jaclang-0.8.8.dist-info}/METADATA +1 -2
- {jaclang-0.8.7.dist-info → jaclang-0.8.8.dist-info}/RECORD +85 -60
- {jaclang-0.8.7.dist-info → jaclang-0.8.8.dist-info}/WHEEL +1 -1
- jaclang/compiler/passes/main/inheritance_pass.py +0 -131
- jaclang/langserve/dev_engine.jac +0 -645
- jaclang/langserve/dev_server.jac +0 -201
- jaclang/langserve/tests/server_test/code_test.py +0 -0
- {jaclang-0.8.7.dist-info → jaclang-0.8.8.dist-info}/entry_points.txt +0 -0
jaclang/cli/cli.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"""Command line interface tool for the Jac language."""
|
|
2
2
|
|
|
3
3
|
import ast as ast3
|
|
4
|
-
import importlib
|
|
5
4
|
import marshal
|
|
6
5
|
import os
|
|
7
6
|
import pickle
|
|
8
7
|
import sys
|
|
9
8
|
import types
|
|
9
|
+
from importlib.metadata import version as pkg_version
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from typing import Optional
|
|
12
12
|
|
|
@@ -18,6 +18,7 @@ from jaclang.runtimelib.builtin import printgraph
|
|
|
18
18
|
from jaclang.runtimelib.constructs import WalkerArchetype
|
|
19
19
|
from jaclang.runtimelib.machine import ExecutionContext, JacMachine as Jac
|
|
20
20
|
from jaclang.runtimelib.utils import read_file_with_encoding
|
|
21
|
+
from jaclang.settings import settings
|
|
21
22
|
from jaclang.utils.helpers import debugger as db
|
|
22
23
|
from jaclang.utils.lang_tools import AstTool
|
|
23
24
|
|
|
@@ -160,11 +161,6 @@ def run(
|
|
|
160
161
|
)
|
|
161
162
|
except Exception as e:
|
|
162
163
|
print(f"Error running {filename}: {e}", file=sys.stderr)
|
|
163
|
-
else:
|
|
164
|
-
print(
|
|
165
|
-
"Not a valid file!\nOnly supports `.jac`, `.jir`, and `.py`",
|
|
166
|
-
file=sys.stderr,
|
|
167
|
-
)
|
|
168
164
|
|
|
169
165
|
mach.close()
|
|
170
166
|
|
|
@@ -322,25 +318,7 @@ def lsp() -> None:
|
|
|
322
318
|
Examples:
|
|
323
319
|
jac lsp
|
|
324
320
|
"""
|
|
325
|
-
from jaclang.langserve.server import run_lang_server
|
|
326
|
-
|
|
327
|
-
run_lang_server()
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
@cmd_registry.register
|
|
331
|
-
def lsp_dev() -> None:
|
|
332
|
-
"""Run Jac Language Server Protocol in Developer Mode.
|
|
333
|
-
|
|
334
|
-
Starts the experimental Jac Language Server with enhanced features
|
|
335
|
-
for development and testing. Used by editor extensions in developer mode.
|
|
336
|
-
|
|
337
|
-
Args:
|
|
338
|
-
This command takes no parameters.
|
|
339
|
-
|
|
340
|
-
Examples:
|
|
341
|
-
jac lsp_dev
|
|
342
|
-
"""
|
|
343
|
-
from jaclang.langserve.dev_server import run_lang_server
|
|
321
|
+
from jaclang.langserve.server import run_lang_server # type: ignore
|
|
344
322
|
|
|
345
323
|
run_lang_server()
|
|
346
324
|
|
|
@@ -673,8 +651,11 @@ def start_cli() -> None:
|
|
|
673
651
|
args = parser.parse_args()
|
|
674
652
|
cmd_registry.args = args
|
|
675
653
|
|
|
654
|
+
# Apply global settings overrides from CLI flags before running commands
|
|
655
|
+
settings.load_command_line_arguments(args)
|
|
656
|
+
|
|
676
657
|
if args.version:
|
|
677
|
-
version =
|
|
658
|
+
version = pkg_version("jaclang")
|
|
678
659
|
print(f"Jac version {version}")
|
|
679
660
|
print("Jac path:", __file__)
|
|
680
661
|
return
|
|
@@ -692,7 +673,12 @@ def start_cli() -> None:
|
|
|
692
673
|
args_dict = vars(args)
|
|
693
674
|
args_dict.pop("command")
|
|
694
675
|
args_dict.pop("version", None)
|
|
695
|
-
|
|
676
|
+
|
|
677
|
+
# Only pass parameters that the target command accepts
|
|
678
|
+
allowed_params = set(command.sig.parameters.keys())
|
|
679
|
+
filtered_args = {k: v for k, v in args_dict.items() if k in allowed_params}
|
|
680
|
+
|
|
681
|
+
ret = command.call(**filtered_args)
|
|
696
682
|
if ret:
|
|
697
683
|
print(ret)
|
|
698
684
|
|
jaclang/cli/cmdreg.py
CHANGED
|
@@ -5,8 +5,11 @@ from __future__ import annotations
|
|
|
5
5
|
import argparse
|
|
6
6
|
import inspect
|
|
7
7
|
import re
|
|
8
|
+
from dataclasses import fields as dataclass_fields
|
|
8
9
|
from typing import Callable, Dict, Optional
|
|
9
10
|
|
|
11
|
+
from jaclang.settings import Settings as JacSettings
|
|
12
|
+
|
|
10
13
|
|
|
11
14
|
class Command:
|
|
12
15
|
"""Represents a command in the command line interface."""
|
|
@@ -106,6 +109,47 @@ class CommandRegistry:
|
|
|
106
109
|
)
|
|
107
110
|
self.args = argparse.Namespace()
|
|
108
111
|
|
|
112
|
+
# Global settings overrides
|
|
113
|
+
settings_group = self.parser.add_argument_group(
|
|
114
|
+
"settings",
|
|
115
|
+
"Override Jac settings (from config/env). Provide only flags you want to change.",
|
|
116
|
+
)
|
|
117
|
+
for fld in dataclass_fields(JacSettings):
|
|
118
|
+
name = fld.name
|
|
119
|
+
opt = f"--{name.replace('_', '-')}"
|
|
120
|
+
if fld.type is bool:
|
|
121
|
+
# Tri-state: default None so unspecified won't override
|
|
122
|
+
settings_group.add_argument(
|
|
123
|
+
opt,
|
|
124
|
+
dest=name,
|
|
125
|
+
action="store_true",
|
|
126
|
+
default=None,
|
|
127
|
+
help=f"bool - Override setting '{name}' to true",
|
|
128
|
+
)
|
|
129
|
+
settings_group.add_argument(
|
|
130
|
+
f"--no-{name.replace('_', '-')}",
|
|
131
|
+
dest=name,
|
|
132
|
+
action="store_false",
|
|
133
|
+
default=None,
|
|
134
|
+
help=f"bool - Override setting '{name}' to false",
|
|
135
|
+
)
|
|
136
|
+
elif fld.type is int:
|
|
137
|
+
settings_group.add_argument(
|
|
138
|
+
opt,
|
|
139
|
+
dest=name,
|
|
140
|
+
type=int,
|
|
141
|
+
default=None,
|
|
142
|
+
help=f"int - Override setting '{name}'",
|
|
143
|
+
)
|
|
144
|
+
else:
|
|
145
|
+
settings_group.add_argument(
|
|
146
|
+
opt,
|
|
147
|
+
dest=name,
|
|
148
|
+
type=str,
|
|
149
|
+
default=None,
|
|
150
|
+
help=f"str - Override setting '{name}'",
|
|
151
|
+
)
|
|
152
|
+
|
|
109
153
|
def register(self, func: Callable) -> Callable:
|
|
110
154
|
"""Register a command in the registry."""
|
|
111
155
|
name = func.__name__
|
jaclang/compiler/constant.py
CHANGED
jaclang/compiler/jac.lark
CHANGED
|
@@ -70,6 +70,8 @@ func_decl: (LPAREN func_decl_params? RPAREN) (RETURN_HINT expression)?
|
|
|
70
70
|
|
|
71
71
|
func_decl_params: (param_var COMMA)* param_var COMMA?
|
|
72
72
|
param_var: (STAR_POW | STAR_MUL)? named_ref type_tag (EQ expression)?
|
|
73
|
+
| DIV
|
|
74
|
+
| STAR_MUL
|
|
73
75
|
|
|
74
76
|
// [Heading]: Implementations.
|
|
75
77
|
impl_def: decorators? KW_IMPL dotted_name impl_spec? impl_tail
|
|
@@ -113,7 +115,6 @@ statement: import_stmt
|
|
|
113
115
|
| (yield_expr | KW_YIELD) SEMI
|
|
114
116
|
| raise_stmt SEMI
|
|
115
117
|
| assert_stmt SEMI
|
|
116
|
-
| check_stmt SEMI
|
|
117
118
|
| assignment SEMI
|
|
118
119
|
| delete_stmt SEMI
|
|
119
120
|
| report_stmt SEMI
|
|
@@ -209,9 +210,6 @@ raise_stmt: KW_RAISE (expression (KW_FROM expression)?)?
|
|
|
209
210
|
// [Heading]: Assert statements.
|
|
210
211
|
assert_stmt: KW_ASSERT expression (COMMA expression)?
|
|
211
212
|
|
|
212
|
-
// [Heading]: Check statements.
|
|
213
|
-
check_stmt: KW_CHECK expression
|
|
214
|
-
|
|
215
213
|
// [Heading]: Delete statements.
|
|
216
214
|
delete_stmt: KW_DELETE expression
|
|
217
215
|
|
|
@@ -402,7 +400,7 @@ kw_expr_list: (kw_expr_list COMMA)? kw_expr
|
|
|
402
400
|
kw_expr: named_ref EQ expression | STAR_POW expression
|
|
403
401
|
|
|
404
402
|
// [Heading]: Object-Spatial References.
|
|
405
|
-
edge_ref_chain: LSQUARE (KW_NODE| KW_EDGE)? expression? (edge_op_ref (filter_compr | expression)?)+ RSQUARE
|
|
403
|
+
edge_ref_chain: LSQUARE KW_ASYNC? (KW_NODE| KW_EDGE)? expression? (edge_op_ref (filter_compr | expression)?)+ RSQUARE
|
|
406
404
|
edge_op_ref: edge_any | edge_from | edge_to
|
|
407
405
|
edge_to: ARROW_R | ARROW_R_P1 typed_filter_compare_list ARROW_R_P2
|
|
408
406
|
edge_from: ARROW_L | ARROW_L_P1 typed_filter_compare_list ARROW_L_P2
|
|
@@ -523,7 +521,6 @@ KW_TEST: "test"
|
|
|
523
521
|
KW_IMPL: "impl"
|
|
524
522
|
KW_SEM: "sem"
|
|
525
523
|
KW_ASSERT: "assert"
|
|
526
|
-
KW_CHECK: "check"
|
|
527
524
|
KW_IF: "if"
|
|
528
525
|
KW_ELIF: "elif"
|
|
529
526
|
KW_ELSE: "else"
|