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.

Files changed (89) hide show
  1. jaclang/cli/cli.py +13 -27
  2. jaclang/cli/cmdreg.py +44 -0
  3. jaclang/compiler/constant.py +0 -1
  4. jaclang/compiler/jac.lark +3 -6
  5. jaclang/compiler/larkparse/jac_parser.py +2 -2
  6. jaclang/compiler/parser.py +213 -34
  7. jaclang/compiler/passes/main/__init__.py +2 -4
  8. jaclang/compiler/passes/main/def_use_pass.py +0 -4
  9. jaclang/compiler/passes/main/predynamo_pass.py +221 -0
  10. jaclang/compiler/passes/main/pyast_gen_pass.py +70 -52
  11. jaclang/compiler/passes/main/pyast_load_pass.py +52 -20
  12. jaclang/compiler/passes/main/sym_tab_build_pass.py +1 -1
  13. jaclang/compiler/passes/main/tests/fixtures/checker/import_sym.jac +2 -0
  14. jaclang/compiler/passes/main/tests/fixtures/checker/import_sym_test.jac +6 -0
  15. jaclang/compiler/passes/main/tests/fixtures/checker/imported_sym.jac +5 -0
  16. jaclang/compiler/passes/main/tests/fixtures/checker_arg_param_match.jac +37 -0
  17. jaclang/compiler/passes/main/tests/fixtures/checker_arity.jac +18 -0
  18. jaclang/compiler/passes/main/tests/fixtures/checker_cat_is_animal.jac +18 -0
  19. jaclang/compiler/passes/main/tests/fixtures/checker_float.jac +7 -0
  20. jaclang/compiler/passes/main/tests/fixtures/checker_param_types.jac +11 -0
  21. jaclang/compiler/passes/main/tests/fixtures/checker_self_type.jac +9 -0
  22. jaclang/compiler/passes/main/tests/fixtures/checker_sym_inherit.jac +42 -0
  23. jaclang/compiler/passes/main/tests/fixtures/predynamo_fix3.jac +43 -0
  24. jaclang/compiler/passes/main/tests/fixtures/predynamo_where_assign.jac +13 -0
  25. jaclang/compiler/passes/main/tests/fixtures/predynamo_where_return.jac +11 -0
  26. jaclang/compiler/passes/main/tests/test_checker_pass.py +191 -0
  27. jaclang/compiler/passes/main/tests/test_predynamo_pass.py +57 -0
  28. jaclang/compiler/passes/main/type_checker_pass.py +29 -73
  29. jaclang/compiler/passes/tool/doc_ir_gen_pass.py +204 -44
  30. jaclang/compiler/passes/tool/jac_formatter_pass.py +119 -69
  31. jaclang/compiler/passes/tool/tests/fixtures/corelib_fmt.jac +3 -3
  32. jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/triple_quoted_string.jac +4 -5
  33. jaclang/compiler/passes/tool/tests/fixtures/tagbreak.jac +171 -11
  34. jaclang/compiler/passes/transform.py +12 -8
  35. jaclang/compiler/program.py +14 -6
  36. jaclang/compiler/tests/fixtures/jac_import_py_files.py +4 -0
  37. jaclang/compiler/tests/fixtures/jac_module.jac +3 -0
  38. jaclang/compiler/tests/fixtures/multiple_syntax_errors.jac +10 -0
  39. jaclang/compiler/tests/fixtures/python_module.py +1 -0
  40. jaclang/compiler/tests/test_importer.py +39 -0
  41. jaclang/compiler/tests/test_parser.py +49 -0
  42. jaclang/compiler/type_system/type_evaluator.py +351 -67
  43. jaclang/compiler/type_system/type_utils.py +246 -0
  44. jaclang/compiler/type_system/types.py +58 -2
  45. jaclang/compiler/unitree.py +79 -94
  46. jaclang/langserve/engine.jac +138 -159
  47. jaclang/langserve/server.jac +25 -1
  48. jaclang/langserve/tests/fixtures/circle.jac +3 -3
  49. jaclang/langserve/tests/fixtures/circle_err.jac +3 -3
  50. jaclang/langserve/tests/fixtures/circle_pure.test.jac +3 -3
  51. jaclang/langserve/tests/fixtures/completion_test_err.jac +10 -0
  52. jaclang/langserve/tests/server_test/circle_template.jac +80 -0
  53. jaclang/langserve/tests/server_test/glob_template.jac +4 -0
  54. jaclang/langserve/tests/server_test/test_lang_serve.py +154 -309
  55. jaclang/langserve/tests/server_test/utils.py +153 -116
  56. jaclang/langserve/tests/test_server.py +21 -84
  57. jaclang/langserve/utils.jac +12 -15
  58. jaclang/runtimelib/machine.py +7 -0
  59. jaclang/runtimelib/meta_importer.py +27 -1
  60. jaclang/runtimelib/tests/fixtures/custom_access_validation.jac +1 -1
  61. jaclang/runtimelib/tests/fixtures/savable_object.jac +2 -2
  62. jaclang/settings.py +18 -14
  63. jaclang/tests/fixtures/abc_check.jac +3 -3
  64. jaclang/tests/fixtures/arch_rel_import_creation.jac +12 -12
  65. jaclang/tests/fixtures/chandra_bugs2.jac +3 -3
  66. jaclang/tests/fixtures/create_dynamic_archetype.jac +13 -13
  67. jaclang/tests/fixtures/maxfail_run_test.jac +4 -4
  68. jaclang/tests/fixtures/params/param_syntax_err.jac +9 -0
  69. jaclang/tests/fixtures/params/test_complex_params.jac +42 -0
  70. jaclang/tests/fixtures/params/test_failing_kwonly.jac +207 -0
  71. jaclang/tests/fixtures/params/test_failing_posonly.jac +116 -0
  72. jaclang/tests/fixtures/params/test_failing_varargs.jac +300 -0
  73. jaclang/tests/fixtures/params/test_kwonly_params.jac +29 -0
  74. jaclang/tests/fixtures/py2jac_params.py +8 -0
  75. jaclang/tests/fixtures/run_test.jac +4 -4
  76. jaclang/tests/test_cli.py +37 -1
  77. jaclang/tests/test_language.py +74 -16
  78. jaclang/utils/helpers.py +47 -2
  79. jaclang/utils/module_resolver.py +10 -0
  80. jaclang/utils/test.py +8 -0
  81. jaclang/utils/treeprinter.py +0 -18
  82. {jaclang-0.8.7.dist-info → jaclang-0.8.8.dist-info}/METADATA +1 -2
  83. {jaclang-0.8.7.dist-info → jaclang-0.8.8.dist-info}/RECORD +85 -60
  84. {jaclang-0.8.7.dist-info → jaclang-0.8.8.dist-info}/WHEEL +1 -1
  85. jaclang/compiler/passes/main/inheritance_pass.py +0 -131
  86. jaclang/langserve/dev_engine.jac +0 -645
  87. jaclang/langserve/dev_server.jac +0 -201
  88. jaclang/langserve/tests/server_test/code_test.py +0 -0
  89. {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 = importlib.metadata.version("jaclang")
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
- ret = command.call(**args_dict)
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__
@@ -178,7 +178,6 @@ class Tokens(str, Enum):
178
178
  KW_WAIT = "KW_WAIT"
179
179
  KW_TEST = "KW_TEST"
180
180
  KW_ASSERT = "KW_ASSERT"
181
- KW_CHECK = "KW_CHECK"
182
181
  COLON = "COLON"
183
182
  PIPE_FWD = "PIPE_FWD"
184
183
  PIPE_BKWD = "PIPE_BKWD"
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"