jaclang 0.6.5__py3-none-any.whl → 0.7.1__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/compiler/absyntree.py +4 -36
- jaclang/compiler/compile.py +21 -0
- jaclang/compiler/parser.py +13 -4
- jaclang/compiler/passes/main/__init__.py +2 -2
- jaclang/compiler/passes/main/def_impl_match_pass.py +1 -5
- jaclang/compiler/passes/main/def_use_pass.py +14 -7
- jaclang/compiler/passes/main/import_pass.py +56 -10
- jaclang/compiler/passes/main/pyast_gen_pass.py +55 -2
- jaclang/compiler/passes/main/schedules.py +4 -3
- jaclang/compiler/passes/main/tests/fixtures/incautoimpl.jac +7 -0
- jaclang/compiler/passes/main/tests/test_decl_def_match_pass.py +4 -4
- jaclang/compiler/passes/main/tests/test_import_pass.py +13 -0
- jaclang/compiler/passes/tool/jac_formatter_pass.py +2 -2
- jaclang/compiler/passes/transform.py +13 -4
- jaclang/compiler/tests/fixtures/mod_doc_test.jac +3 -1
- jaclang/langserve/engine.py +375 -0
- jaclang/langserve/server.py +112 -74
- jaclang/langserve/tests/fixtures/circle.jac +73 -0
- jaclang/langserve/tests/fixtures/circle_err.jac +73 -0
- jaclang/langserve/tests/fixtures/circle_pure.impl.jac +28 -0
- jaclang/langserve/tests/fixtures/circle_pure.jac +34 -0
- jaclang/langserve/tests/fixtures/circle_pure_err.impl.jac +32 -0
- jaclang/langserve/tests/fixtures/circle_pure_err.jac +34 -0
- jaclang/langserve/tests/test_server.py +33 -1
- jaclang/langserve/utils.py +53 -16
- jaclang/plugin/default.py +1 -1
- jaclang/tests/fixtures/type_info.jac +1 -1
- jaclang/tests/test_cli.py +1 -1
- jaclang/utils/helpers.py +3 -5
- jaclang/utils/test.py +1 -1
- {jaclang-0.6.5.dist-info → jaclang-0.7.1.dist-info}/METADATA +8 -16
- {jaclang-0.6.5.dist-info → jaclang-0.7.1.dist-info}/RECORD +34 -28
- jaclang/compiler/tests/test_workspace.py +0 -93
- jaclang/compiler/workspace.py +0 -234
- {jaclang-0.6.5.dist-info → jaclang-0.7.1.dist-info}/WHEEL +0 -0
- {jaclang-0.6.5.dist-info → jaclang-0.7.1.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This module demonstrates a simple circle class and a function to calculate
|
|
3
|
+
the area of a circle in all of Jac's glory.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import:py math;
|
|
7
|
+
# Module-level global var
|
|
8
|
+
|
|
9
|
+
glob RAD = 5;
|
|
10
|
+
|
|
11
|
+
"""Function to calculate the area of a circle."""
|
|
12
|
+
can calculate_area(radius: float) -> float {
|
|
13
|
+
return math.pi * radius * radius;
|
|
14
|
+
}
|
|
15
|
+
#* (This is multiline comments in Jac)
|
|
16
|
+
Above we have the demonstration of a function to calculate the area of a circle.
|
|
17
|
+
Below we have the demonstration of a class to calculate the area of a circle.
|
|
18
|
+
*#
|
|
19
|
+
|
|
20
|
+
"""Enum for shape types"""
|
|
21
|
+
enum ShapeType {
|
|
22
|
+
CIRCLE="Circle"
|
|
23
|
+
UNKNOWN="Unknown"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
"""Base class for a shape."""
|
|
27
|
+
obj Shape {
|
|
28
|
+
has shape_type: ShapeType;
|
|
29
|
+
|
|
30
|
+
"""Abstract method to calculate the area of a shape."""
|
|
31
|
+
can area -> float abs;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
"""Circle class inherits from Shape."""
|
|
35
|
+
obj Circle :Shape: {
|
|
36
|
+
can init(radius: float) {
|
|
37
|
+
super.init(ShapeType.CIRCLE);
|
|
38
|
+
self.radius = radius;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
"""Overridden method to calculate the area of the circle."""
|
|
42
|
+
override can area -> float {
|
|
43
|
+
return math.pi * self.radius * self.radius;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
with entry {
|
|
48
|
+
c = Circle(RAD);
|
|
49
|
+
}
|
|
50
|
+
# Global also works here
|
|
51
|
+
|
|
52
|
+
with entry:__main__ {
|
|
53
|
+
# To run the program functionality
|
|
54
|
+
print(f"Area of a circle with radius {RAD} using function: {calculate_area(RAD)}");
|
|
55
|
+
print(f"Area of a {c.shape_type.value} with radius {RAD} using class: {c.area()}");
|
|
56
|
+
}
|
|
57
|
+
# Unit Tests!
|
|
58
|
+
|
|
59
|
+
glob expected_area = 78.53981633974483;
|
|
60
|
+
|
|
61
|
+
test calc_area {
|
|
62
|
+
check.assertAlmostEqual(calculate_area(RAD), expected_area);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
test circle_area {
|
|
66
|
+
c = Circle(RAD);
|
|
67
|
+
check.assertAlmostEqual(c.area(), expected_area);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
test circle_type {
|
|
71
|
+
c = Circle(RAD);
|
|
72
|
+
check.assertEqual(c.shape_type, ShapeType.CIRCLE);
|
|
73
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Enum for shape types"""
|
|
2
|
+
|
|
3
|
+
:enum:ShapeType {
|
|
4
|
+
CIRCLE="Circle",
|
|
5
|
+
UNKNOWN="Unknown"
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
"""Function to calculate the area of a circle."""
|
|
9
|
+
:can:calculate_area
|
|
10
|
+
(radius: float) -> float {
|
|
11
|
+
return math.pi * radius * radius;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
:obj:Circle:can:init
|
|
15
|
+
(radius: float) {
|
|
16
|
+
self.radius = radius;
|
|
17
|
+
super.init(ShapeType.CIRCLE);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
"""Overridden method to calculate the area of the circle."""
|
|
21
|
+
:obj:Circle:can:area -> float {
|
|
22
|
+
return math.pi * self.radius * self.radius;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:can:main_run {
|
|
26
|
+
print(f"Area of a circle with radius {RAD} using function: {calculate_area(RAD)}");
|
|
27
|
+
print(f"Area of a {c.shape_type.value} with radius {RAD} using class: {c.area()}");
|
|
28
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This module demonstrates a simple circle class and a function to calculate
|
|
3
|
+
the area of a circle in all of Jac's glory.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import:py math;
|
|
7
|
+
|
|
8
|
+
enum ShapeType;
|
|
9
|
+
|
|
10
|
+
can calculate_area(radius: float) -> float;
|
|
11
|
+
can main_run;
|
|
12
|
+
|
|
13
|
+
"""Base class for a shape."""
|
|
14
|
+
obj Shape {
|
|
15
|
+
has shape_type: ShapeType;
|
|
16
|
+
|
|
17
|
+
can area -> float abs;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
"""Circle class inherits from Shape."""
|
|
21
|
+
obj Circle :Shape: {
|
|
22
|
+
has radius: float;
|
|
23
|
+
|
|
24
|
+
can init(radius: float);
|
|
25
|
+
can area -> float;
|
|
26
|
+
}
|
|
27
|
+
# Radius of the demo circle
|
|
28
|
+
|
|
29
|
+
glob RAD = 5, c = Circle(radius=RAD);
|
|
30
|
+
|
|
31
|
+
"""Here we run the main program."""
|
|
32
|
+
with entry:__main__ {
|
|
33
|
+
main_run();
|
|
34
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""Enum for shape types"""
|
|
2
|
+
|
|
3
|
+
:enum:ShapeType {
|
|
4
|
+
CIRCLE = "Circle",
|
|
5
|
+
UNKNOWN = "Unknown"
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
"""Function to calculate the area of a circle."""
|
|
9
|
+
:can:calculate_area
|
|
10
|
+
(radius: float) -> float {
|
|
11
|
+
return math.pi * radius * radius;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
:obj:Circle:can:init
|
|
15
|
+
(radius: float) {
|
|
16
|
+
self.radius = radius;
|
|
17
|
+
super.init(ShapeType.CIRCLE);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
"""Overridden method to calculate the area of the circle."""
|
|
21
|
+
:obj:Circle:can:area -> float {
|
|
22
|
+
return math.pi * self.radius * self.radius;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:can:main_run {
|
|
26
|
+
print(
|
|
27
|
+
f"Area of a circle with radius {RAD} using function: {calculate_area(RAD)}"
|
|
28
|
+
);
|
|
29
|
+
print(
|
|
30
|
+
f"Area of a {c.shape_type.value} with radius {RAD} using class: {c.area()}"
|
|
31
|
+
);
|
|
32
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This module demonstrates a simple circle class and a function to calculate
|
|
3
|
+
the area of a circle in all of Jac's glory.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import:py math;
|
|
7
|
+
|
|
8
|
+
enum ShapeType;
|
|
9
|
+
|
|
10
|
+
can calculate_area(radius: float) -> float;
|
|
11
|
+
can main_run;
|
|
12
|
+
|
|
13
|
+
"""Base class for a shape."""
|
|
14
|
+
obj Shape {
|
|
15
|
+
has shape_type: ShapeType;
|
|
16
|
+
|
|
17
|
+
can area -> float abs;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
"""Circle class inherits from Shape."""
|
|
21
|
+
obj Circle :Shape: {
|
|
22
|
+
has radius: float;
|
|
23
|
+
|
|
24
|
+
can init(radius: float);
|
|
25
|
+
can area -> float;
|
|
26
|
+
}
|
|
27
|
+
# Radius of the demo circle
|
|
28
|
+
|
|
29
|
+
glob RAD = 5, c = Circle(radius=RAD);
|
|
30
|
+
|
|
31
|
+
"""Here we run the main program."""
|
|
32
|
+
with entry:__main__ {
|
|
33
|
+
main_run();
|
|
34
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from jaclang.utils.test import TestCase
|
|
2
2
|
from jaclang.vendor.pygls import uris
|
|
3
|
+
from jaclang.vendor.pygls.workspace import Workspace
|
|
4
|
+
from jaclang.langserve.engine import JacLangServer
|
|
3
5
|
from .session import LspSession
|
|
4
6
|
|
|
5
7
|
|
|
@@ -28,9 +30,39 @@ class TestJacLangServer(TestCase):
|
|
|
28
30
|
{
|
|
29
31
|
"range": {
|
|
30
32
|
"start": {"line": 0, "character": 0},
|
|
31
|
-
"end": {"line":
|
|
33
|
+
"end": {"line": 2, "character": 0},
|
|
32
34
|
},
|
|
33
35
|
"newText": 'with entry {\n print("Hello, World!");\n}\n',
|
|
34
36
|
}
|
|
35
37
|
],
|
|
36
38
|
)
|
|
39
|
+
|
|
40
|
+
def test_syntax_diagnostics(self) -> None:
|
|
41
|
+
"""Test diagnostics."""
|
|
42
|
+
lsp = JacLangServer()
|
|
43
|
+
# Set up the workspace path to "fixtures/"
|
|
44
|
+
workspace_path = self.fixture_abs_path("")
|
|
45
|
+
workspace = Workspace(workspace_path, lsp)
|
|
46
|
+
lsp.lsp._workspace = workspace
|
|
47
|
+
circle_file = uris.from_fs_path(self.fixture_abs_path("circle_err.jac"))
|
|
48
|
+
lsp.quick_check(circle_file)
|
|
49
|
+
self.assertEqual(len(lsp.modules), 1)
|
|
50
|
+
self.assertEqual(lsp.modules[circle_file].diagnostics[0].range.start.line, 22)
|
|
51
|
+
|
|
52
|
+
def test_doesnt_run_if_syntax_error(self) -> None:
|
|
53
|
+
"""Test that the server doesn't run if there is a syntax error."""
|
|
54
|
+
lsp = JacLangServer()
|
|
55
|
+
# Set up the workspace path to "fixtures/"
|
|
56
|
+
workspace_path = self.fixture_abs_path("")
|
|
57
|
+
workspace = Workspace(workspace_path, lsp)
|
|
58
|
+
lsp.lsp._workspace = workspace
|
|
59
|
+
circle_file = uris.from_fs_path(self.fixture_abs_path("circle_err.jac"))
|
|
60
|
+
lsp.quick_check(circle_file)
|
|
61
|
+
self.assertEqual(len(lsp.modules), 1)
|
|
62
|
+
self.assertEqual(lsp.modules[circle_file].diagnostics[0].range.start.line, 22)
|
|
63
|
+
lsp.deep_check(circle_file)
|
|
64
|
+
self.assertEqual(len(lsp.modules), 1)
|
|
65
|
+
self.assertEqual(lsp.modules[circle_file].diagnostics[0].range.start.line, 22)
|
|
66
|
+
lsp.type_check(circle_file)
|
|
67
|
+
self.assertEqual(len(lsp.modules), 1)
|
|
68
|
+
self.assertEqual(lsp.modules[circle_file].diagnostics[0].range.start.line, 22)
|
jaclang/langserve/utils.py
CHANGED
|
@@ -1,24 +1,11 @@
|
|
|
1
1
|
"""Utility functions for the language server."""
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
-
import logging
|
|
5
4
|
from functools import wraps
|
|
6
|
-
from typing import Any, Awaitable, Callable, Coroutine, ParamSpec, TypeVar
|
|
5
|
+
from typing import Any, Awaitable, Callable, Coroutine, Optional, ParamSpec, TypeVar
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
import lsprotocol.types as lspt
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def log_error(ls: LanguageServer, message: str) -> None:
|
|
14
|
-
"""Log an error message."""
|
|
15
|
-
ls.show_message_log(message, lspt.MessageType.Error)
|
|
16
|
-
ls.show_message(message, lspt.MessageType.Error)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def log(info: str) -> None:
|
|
20
|
-
"""Log an info message."""
|
|
21
|
-
logging.warning(info)
|
|
7
|
+
import jaclang.compiler.absyntree as ast
|
|
8
|
+
from jaclang.compiler.symtable import SymbolTable
|
|
22
9
|
|
|
23
10
|
|
|
24
11
|
T = TypeVar("T", bound=Callable[..., Coroutine[Any, Any, Any]])
|
|
@@ -51,3 +38,53 @@ def debounce(wait: float) -> Callable[[T], Callable[..., Awaitable[None]]]:
|
|
|
51
38
|
return debounced
|
|
52
39
|
|
|
53
40
|
return decorator
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def sym_tab_list(sym_tab: SymbolTable, file_path: str) -> list[SymbolTable]:
|
|
44
|
+
"""Iterate through symbol table."""
|
|
45
|
+
sym_tabs = (
|
|
46
|
+
[sym_tab]
|
|
47
|
+
if not (
|
|
48
|
+
isinstance(sym_tab.owner, ast.Module)
|
|
49
|
+
and sym_tab.owner.loc.mod_path != file_path
|
|
50
|
+
)
|
|
51
|
+
else []
|
|
52
|
+
)
|
|
53
|
+
for i in sym_tab.kid:
|
|
54
|
+
sym_tabs += sym_tab_list(i, file_path=file_path)
|
|
55
|
+
return sym_tabs
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def find_deepest_node_at_pos(
|
|
59
|
+
node: ast.AstNode, line: int, character: int
|
|
60
|
+
) -> Optional[ast.AstNode]:
|
|
61
|
+
"""Return the deepest node that contains the given position."""
|
|
62
|
+
if position_within_node(node, line, character):
|
|
63
|
+
for i in node.kid:
|
|
64
|
+
if position_within_node(i, line, character):
|
|
65
|
+
return find_deepest_node_at_pos(i, line, character)
|
|
66
|
+
return node
|
|
67
|
+
else:
|
|
68
|
+
return None
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def position_within_node(node: ast.AstNode, line: int, character: int) -> bool:
|
|
72
|
+
"""Check if the position falls within the node's location."""
|
|
73
|
+
if node.loc.first_line < line + 1 < node.loc.last_line:
|
|
74
|
+
return True
|
|
75
|
+
if (
|
|
76
|
+
node.loc.first_line == line + 1
|
|
77
|
+
and node.loc.col_start <= character + 1
|
|
78
|
+
and (
|
|
79
|
+
node.loc.last_line == line + 1
|
|
80
|
+
and node.loc.col_end >= character + 1
|
|
81
|
+
or node.loc.last_line > line + 1
|
|
82
|
+
)
|
|
83
|
+
):
|
|
84
|
+
return True
|
|
85
|
+
if (
|
|
86
|
+
node.loc.last_line == line + 1
|
|
87
|
+
and node.loc.col_start <= character + 1 <= node.loc.col_end
|
|
88
|
+
):
|
|
89
|
+
return True
|
|
90
|
+
return False
|
jaclang/plugin/default.py
CHANGED
|
@@ -189,8 +189,8 @@ class JacFeatureDefaults:
|
|
|
189
189
|
|
|
190
190
|
@wraps(inner_init)
|
|
191
191
|
def new_init(self: Architype, *args: object, **kwargs: object) -> None:
|
|
192
|
-
inner_init(self, *args, **kwargs)
|
|
193
192
|
arch_base.__init__(self)
|
|
193
|
+
inner_init(self, *args, **kwargs)
|
|
194
194
|
|
|
195
195
|
cls.__init__ = new_init # type: ignore
|
|
196
196
|
return cls
|
jaclang/tests/test_cli.py
CHANGED
|
@@ -114,7 +114,7 @@ class JacCliTests(TestCase):
|
|
|
114
114
|
stdout_value = captured_output.getvalue()
|
|
115
115
|
self.assertEqual(stdout_value.count("type_info.ServerWrapper"), 6)
|
|
116
116
|
self.assertEqual(stdout_value.count("builtins.int"), 2)
|
|
117
|
-
self.assertEqual(stdout_value.count("builtins.str"),
|
|
117
|
+
self.assertEqual(stdout_value.count("builtins.str"), 7)
|
|
118
118
|
|
|
119
119
|
def test_build_and_run(self) -> None:
|
|
120
120
|
"""Testing for print AstTool."""
|
jaclang/utils/helpers.py
CHANGED
|
@@ -128,15 +128,13 @@ def auto_generate_refs() -> None:
|
|
|
128
128
|
|
|
129
129
|
|
|
130
130
|
def import_target_to_relative_path(
|
|
131
|
-
|
|
132
|
-
import_target: str,
|
|
133
|
-
base_path: Optional[str] = None,
|
|
131
|
+
level: int, target: str, base_path: Optional[str] = None
|
|
134
132
|
) -> str:
|
|
135
133
|
"""Convert an import target string into a relative file path."""
|
|
136
134
|
if not base_path:
|
|
137
135
|
base_path = os.getcwd()
|
|
138
|
-
parts =
|
|
139
|
-
traversal_levels =
|
|
136
|
+
parts = target.split(".")
|
|
137
|
+
traversal_levels = level - 1 if level > 0 else 0
|
|
140
138
|
actual_parts = parts[traversal_levels:]
|
|
141
139
|
for _ in range(traversal_levels):
|
|
142
140
|
base_path = os.path.dirname(base_path)
|
jaclang/utils/test.py
CHANGED
|
@@ -68,7 +68,7 @@ class TestCaseMicroSuite(TestCase):
|
|
|
68
68
|
os.path.dirname(os.path.dirname(jaclang.__file__))
|
|
69
69
|
)
|
|
70
70
|
for name in files
|
|
71
|
-
if name.endswith(".jac") and not name
|
|
71
|
+
if name.endswith(".jac") and "err" not in name
|
|
72
72
|
]:
|
|
73
73
|
method_name = (
|
|
74
74
|
f"test_micro_{filename.replace('.jac', '').replace(os.sep, '_')}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: jaclang
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.1
|
|
4
4
|
Summary: Jac is a unique and powerful programming language that runs on top of Python, offering an unprecedented level of intelligence and intuitive understanding.
|
|
5
5
|
Home-page: https://jaseci.org
|
|
6
6
|
License: MIT
|
|
@@ -25,7 +25,7 @@ Description-Content-Type: text/markdown
|
|
|
25
25
|
width="20%">
|
|
26
26
|
</picture>
|
|
27
27
|
|
|
28
|
-
[Website]
|
|
28
|
+
[Jac Website] | [Getting started] | [Learn] | [Documentation] | [Contributing]
|
|
29
29
|
|
|
30
30
|
[](https://pypi.org/project/jaclang/) [](https://github.com/chandralegend/jaclang/actions/workflows/run_pytest.yml) [](https://codecov.io/github/chandralegend/jaclang)
|
|
31
31
|
</div>
|
|
@@ -33,30 +33,22 @@ Description-Content-Type: text/markdown
|
|
|
33
33
|
This is the main source code repository for the [Jac] programming language. It contains the compiler, language server, and documentation.
|
|
34
34
|
|
|
35
35
|
[Jac]: https://www.jac-lang.org/
|
|
36
|
+
[Jac Website]: https://www.jac-lang.org/
|
|
36
37
|
[Getting Started]: https://www.jac-lang.org//start/
|
|
37
38
|
[Learn]: https://www.jac-lang.org//learn
|
|
38
39
|
[Documentation]: https://www.jac-lang.org//learn/guide/
|
|
39
40
|
[Contributing]: .github/CONTRIBUTING.md
|
|
40
41
|
|
|
41
|
-
## Why Jac?
|
|
42
|
+
## What and Why Jac?
|
|
42
43
|
|
|
43
|
-
- **
|
|
44
|
+
- **Native Superset of Python** - Jac is a native superset of python, meaning the entire python ecosystem is directly interoperable with Jac without any trickery (no interop interface needed). Like Typescript is to Javascript, or C++ is to C, Jac is to Python. (every Jac program can be ejected to pure python, and every python program can be transpiled to a Jac program)
|
|
44
45
|
|
|
45
|
-
- **
|
|
46
|
+
- **AI as a Programming Language Constructs** - Jac includes a novel (neurosymbolic) language construct that allows replacing code with generative AI models themselves. Jac's philosophy abstracts away prompt engineering. (Imagine taking a function body and swapping it out with a model.)
|
|
46
47
|
|
|
47
|
-
- **
|
|
48
|
+
- **New Modern Abstractions** - Jac introduces a paradigm that reasons about persistence and the notion of users as a language level construct. This enables writing simple programs for which no code changes are needed whether they run in a simple command terminal, or distributed across a large cloud. Jac's philosophy abstracts away dev ops and container/cloud configuration.
|
|
48
49
|
|
|
49
|
-
- **
|
|
50
|
+
- **Jac Improves on Python** - Jac makes multiple thoughtful quality-of-life improvements/additions to Python. These include new modern operators, new types of comprehensions, new ways of organizing modules (i.e., separating implementations from declarations), etc.
|
|
50
51
|
|
|
51
|
-
- **Support:** Jac compiles to Python, which is widely used and has a large ecosystem. Making it easy to integrate with existing code.
|
|
52
|
-
|
|
53
|
-
- **Dev Friendly:** Highly Refactorable, Jac is designed to be easy to refactor and maintain. VSCode Editor support. Builtin language server protocol support.
|
|
54
|
-
|
|
55
|
-
- **Cloud-native:** Jac is designed to be cloud-native, making it easy to deploy and scale.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
[jac-analyzer]: https://github.com/Jaseci-Labs/jac-analyzer
|
|
60
52
|
|
|
61
53
|
## Quick Start
|
|
62
54
|
|
|
@@ -6,27 +6,27 @@ jaclang/cli/cli.py,sha256=d352zfA5_Da5InyQkv4V-qaxIcdIaVYJVeYt8npSB3I,13553
|
|
|
6
6
|
jaclang/cli/cmdreg.py,sha256=u0jAd6A8czt7tBgPBBKBhYAG4By1FrjEGaTU2XFKeYs,8372
|
|
7
7
|
jaclang/compiler/.gitignore,sha256=n1k2_xXTorp9PY8hhYM4psHircn-NMaFx95bSgDKopo,10
|
|
8
8
|
jaclang/compiler/__init__.py,sha256=JA3L1ran0PlZI5Pcj2CIrFgrZGRNFHHC5kRh1QYgYlY,3146
|
|
9
|
-
jaclang/compiler/absyntree.py,sha256=
|
|
9
|
+
jaclang/compiler/absyntree.py,sha256=RC32GBkSoOUggcCKG6ud9TzcRvgDobHQzw2E8n6lXgo,125944
|
|
10
10
|
jaclang/compiler/codeloc.py,sha256=KMwf5OMQu3_uDjIdH7ta2piacUtXNPgUV1t8OuLjpzE,2828
|
|
11
|
-
jaclang/compiler/compile.py,sha256=
|
|
11
|
+
jaclang/compiler/compile.py,sha256=0d8p4i2LXg2RCu1XfWx_Jq_dx7pK2Zn2VIj-apvX_nI,3389
|
|
12
12
|
jaclang/compiler/constant.py,sha256=C8nOgWLAg-fRg8Qax_jRcYp6jGyWSSA1gwzk9Zdy7HE,6534
|
|
13
13
|
jaclang/compiler/jac.lark,sha256=TI8ctvs_cASPp-EDPrMiCeL80Ngvj_7WxGMUFtGN7vs,17040
|
|
14
|
-
jaclang/compiler/parser.py,sha256=
|
|
14
|
+
jaclang/compiler/parser.py,sha256=Fy6qsTdh82YvXSgXoevIT5dIGjAn3hqbN45muJ5jFNY,138789
|
|
15
15
|
jaclang/compiler/passes/__init__.py,sha256=0Tw0d130ZjzA05jVcny9cf5NfLjlaM70PKqFnY4zqn4,69
|
|
16
16
|
jaclang/compiler/passes/ir_pass.py,sha256=gh1Zd8ouu79FoxerW1sMxktmfeC9gHyp4H_MoAviYP8,5504
|
|
17
|
-
jaclang/compiler/passes/main/__init__.py,sha256=
|
|
17
|
+
jaclang/compiler/passes/main/__init__.py,sha256=YSWVNkgnJKF32LpJwX__FwvYrpTSoxFqvnw410WrhkA,947
|
|
18
18
|
jaclang/compiler/passes/main/access_modifier_pass.py,sha256=1tQJ9bNlOVX3sgL0DK4jv643Pu5xl68oL8LNsaHf-MY,4864
|
|
19
|
-
jaclang/compiler/passes/main/def_impl_match_pass.py,sha256=
|
|
20
|
-
jaclang/compiler/passes/main/def_use_pass.py,sha256=
|
|
19
|
+
jaclang/compiler/passes/main/def_impl_match_pass.py,sha256=omMqI2vGBD42sBtBU1YFR7mP_M4k9c3UluRUoG3xKHU,3522
|
|
20
|
+
jaclang/compiler/passes/main/def_use_pass.py,sha256=3JeiqNxegTQ8a2gk3Tlc4frUrSQ1ZZeiv2qwNA1OPp0,8887
|
|
21
21
|
jaclang/compiler/passes/main/fuse_typeinfo_pass.py,sha256=9alMH5yPLzFZ1iZJw0UCjh-9BOOxNALA_QjW0IqQdDg,16322
|
|
22
|
-
jaclang/compiler/passes/main/import_pass.py,sha256=
|
|
23
|
-
jaclang/compiler/passes/main/pyast_gen_pass.py,sha256=
|
|
22
|
+
jaclang/compiler/passes/main/import_pass.py,sha256=rNlik9QXBJ8xnye5TiegOVWpuhXAPeq1SlDC8fMYVv4,10153
|
|
23
|
+
jaclang/compiler/passes/main/pyast_gen_pass.py,sha256=5l3KVs-eyrUa9OtSekemXGeaf5VCJcNYbf2CwzWFfDI,138114
|
|
24
24
|
jaclang/compiler/passes/main/pyast_load_pass.py,sha256=lFJhcaXbsDKi2WJzVlD0EdSEKosUjopHFHzAYV3KvhQ,90650
|
|
25
25
|
jaclang/compiler/passes/main/pybc_gen_pass.py,sha256=CjA9AqyMO3Pv_b5Hh0YI6JmCqIru2ASonO6rhrkau-M,1336
|
|
26
26
|
jaclang/compiler/passes/main/pyjac_ast_link_pass.py,sha256=K5jNHRPrFcC_-RbgY7lngSNSDQLQr27N31_aUrGUACo,7864
|
|
27
27
|
jaclang/compiler/passes/main/pyout_pass.py,sha256=clJkASFiBiki5w0MQXYIwcdvahYETgqAjKlYOYVYKNQ,3137
|
|
28
28
|
jaclang/compiler/passes/main/registry_pass.py,sha256=Lp_EqlflXkSgQuJe_EVBtzC16YAJx70bDO6X0nJIX5U,4579
|
|
29
|
-
jaclang/compiler/passes/main/schedules.py,sha256=
|
|
29
|
+
jaclang/compiler/passes/main/schedules.py,sha256=cu3-AIckvbKGe3C-DbtDwwAdvnX25CdDP6j9QLps9Kg,1298
|
|
30
30
|
jaclang/compiler/passes/main/sub_node_tab_pass.py,sha256=fGgK0CBWsuD6BS4BsLwXPl1b5UC2N2YEOGa6jNMu8N8,1332
|
|
31
31
|
jaclang/compiler/passes/main/sym_tab_build_pass.py,sha256=1bUU-p0zCoLoF7_HgLr2FKxUuc_4y2O7-5FSJD8mfWc,42020
|
|
32
32
|
jaclang/compiler/passes/main/tests/__init__.py,sha256=UBAATLUEH3yuBN4LYKnXXV79kokRc4XB-rX12qfu0ds,28
|
|
@@ -47,12 +47,13 @@ jaclang/compiler/passes/main/tests/fixtures/game1.jac,sha256=oiTadkrYJRUo6ZkHUi7
|
|
|
47
47
|
jaclang/compiler/passes/main/tests/fixtures/impl/defs1.jac,sha256=MIYBOmcG4NnxsJcR4f-bposvl5ILfshU0tKJ7qMjjzU,112
|
|
48
48
|
jaclang/compiler/passes/main/tests/fixtures/impl/defs2.jac,sha256=MIYBOmcG4NnxsJcR4f-bposvl5ILfshU0tKJ7qMjjzU,112
|
|
49
49
|
jaclang/compiler/passes/main/tests/fixtures/impl/imps.jac,sha256=MTVCw95_OwssjB7MtEPTYoHSHcceZAhFLokW8Zaruzg,135
|
|
50
|
+
jaclang/compiler/passes/main/tests/fixtures/incautoimpl.jac,sha256=WX54UE-AUAfnjva0y9NkSl8-0aJAE1HqO0gw4rtCqhs,71
|
|
50
51
|
jaclang/compiler/passes/main/tests/fixtures/multi_def_err.jac,sha256=BxgmNUdz76gKLi6PXnLZE9rartodMgch5ydpGrd25Ec,87
|
|
51
52
|
jaclang/compiler/passes/main/tests/fixtures/registry.jac,sha256=1G6amtU1zIFCgq09v7xTp9zZ5sw5IbXHfYVlOo-drPg,993
|
|
52
53
|
jaclang/compiler/passes/main/tests/fixtures/type_info.jac,sha256=64Im2L-R3YF8DEuTt29QE6mJI5PnFe3PiwcDLKa8gOE,661
|
|
53
|
-
jaclang/compiler/passes/main/tests/test_decl_def_match_pass.py,sha256
|
|
54
|
+
jaclang/compiler/passes/main/tests/test_decl_def_match_pass.py,sha256=-qb9-XV6XbPCbL3JoUQsbS86w-WjkAKCnAYuDFORoIE,1378
|
|
54
55
|
jaclang/compiler/passes/main/tests/test_def_use_pass.py,sha256=dmyZgXugOCN-_YY7dxkNHgt8vqey8qzNJf8sWyLLZ5w,1013
|
|
55
|
-
jaclang/compiler/passes/main/tests/test_import_pass.py,sha256=
|
|
56
|
+
jaclang/compiler/passes/main/tests/test_import_pass.py,sha256=eG7ZopSrjTjZrPdqnXgq877FO-DcaA922zC1YiZPd_0,1733
|
|
56
57
|
jaclang/compiler/passes/main/tests/test_pyast_build_pass.py,sha256=LIT4TP-nhtftRtY5rNySRQlim-dWMSlkfUvkhZTk4pc,1383
|
|
57
58
|
jaclang/compiler/passes/main/tests/test_pyast_gen_pass.py,sha256=fNL_FS26AQGlRCvwWfl-Qyt7iW2_A99GIHOAnnkpw9A,4731
|
|
58
59
|
jaclang/compiler/passes/main/tests/test_pybc_gen_pass.py,sha256=If8PE4exN5g9o1NRElNC0XdfIwJAp7M7f69rzmYRYUQ,655
|
|
@@ -64,7 +65,7 @@ jaclang/compiler/passes/main/tests/test_typeinfo_pass.py,sha256=ehC0_giLg7NwB7fR
|
|
|
64
65
|
jaclang/compiler/passes/main/type_check_pass.py,sha256=-f41Ukr3B1w4rkQdZ2xJy6nozymgnVKjJ8E1fn7qJmI,3339
|
|
65
66
|
jaclang/compiler/passes/tool/__init__.py,sha256=xekCOXysHIcthWm8NRmQoA1Ah1XV8vFbkfeHphJtUdc,223
|
|
66
67
|
jaclang/compiler/passes/tool/fuse_comments_pass.py,sha256=N9a84qArNuTXX1iaXsBzqcufx6A3zYq2p-1ieH6FmHc,3133
|
|
67
|
-
jaclang/compiler/passes/tool/jac_formatter_pass.py,sha256=
|
|
68
|
+
jaclang/compiler/passes/tool/jac_formatter_pass.py,sha256=xpM10gIhILS37Ne2NVFMruJwmG1GfDcY0y8fbgqWrdM,86134
|
|
68
69
|
jaclang/compiler/passes/tool/schedules.py,sha256=kmbsCazAMizGAdQuZpFky5BPlYlMXqNw7wOUzdi_wBo,432
|
|
69
70
|
jaclang/compiler/passes/tool/tests/__init__.py,sha256=AeOaZjA1rf6VAr0JqIit6jlcmOzW7pxGr4U1fOwgK_Y,24
|
|
70
71
|
jaclang/compiler/passes/tool/tests/fixtures/corelib.jac,sha256=GA5_CDQQo9awG6H8wed8tp06KoWtQ8nR70LVbBwCFIY,12416
|
|
@@ -99,7 +100,7 @@ jaclang/compiler/passes/tool/tests/fixtures/simple_walk_fmt.jac,sha256=6jwYKXxJ1
|
|
|
99
100
|
jaclang/compiler/passes/tool/tests/test_fuse_comments_pass.py,sha256=ZeWHsm7VIyyS8KKpoB2SdlHM4jF22fMfSrfTfxt2MQw,398
|
|
100
101
|
jaclang/compiler/passes/tool/tests/test_jac_format_pass.py,sha256=P4vBRbwVAkb8svFSAOf4VKioZS8BkoaVfYdn-LCrRqA,6144
|
|
101
102
|
jaclang/compiler/passes/tool/tests/test_unparse_validate.py,sha256=Tg9k7BOSkWngAZLvSHmPt95ILJzdIvdHxKBT__mgpS0,2910
|
|
102
|
-
jaclang/compiler/passes/transform.py,sha256=
|
|
103
|
+
jaclang/compiler/passes/transform.py,sha256=jh2pMGFs6J9ZbQ2E-3r21khDm53yKXbNq5GstLMkBpg,2374
|
|
103
104
|
jaclang/compiler/passes/utils/__init__.py,sha256=UsI5rUopTUiStAzup4kbPwIwrnC5ofCrqWBCBbM2-k4,35
|
|
104
105
|
jaclang/compiler/passes/utils/mypy_ast_build.py,sha256=DbTYKwQ2K-3JXS_RybLyvqDz_381Li8JfFKNeEQhbRY,26324
|
|
105
106
|
jaclang/compiler/symtable.py,sha256=f-9c3eQJTDhEG22kYC3Vd4i5gRWf77_CsqFm7t8Wsng,6031
|
|
@@ -109,13 +110,11 @@ jaclang/compiler/tests/fixtures/activity.py,sha256=fSvxYDKufsPeQIrbuh031zHw_hdbR
|
|
|
109
110
|
jaclang/compiler/tests/fixtures/fam.jac,sha256=DGR9vJI8H73plbyvwdTHbsvSRd_0hT-Kq9IIIrQ1GLU,1544
|
|
110
111
|
jaclang/compiler/tests/fixtures/hello_world.jac,sha256=uT67nGzdYY7YT6Xj5-OHFAZPEHfIl4zGlfyNs7-zRBI,78
|
|
111
112
|
jaclang/compiler/tests/fixtures/kwesc.jac,sha256=OXxVL_fwiFuvYO1YX1RHa2hpETSpb0QD1-gMYnMY6DA,103
|
|
112
|
-
jaclang/compiler/tests/fixtures/mod_doc_test.jac,sha256=
|
|
113
|
+
jaclang/compiler/tests/fixtures/mod_doc_test.jac,sha256=aFZpjn7V5lvCHp0lPoGXtdkcY3CK8_-SKeZGruutv4Y,35
|
|
113
114
|
jaclang/compiler/tests/fixtures/staticcheck.jac,sha256=t849--dTkSSjCJX1OiMV-lgao_hIDSKwKVs-aS6IwK8,342
|
|
114
115
|
jaclang/compiler/tests/fixtures/stuff.jac,sha256=qOq6WOwhlprMmJpiqQudgqnr4qTd9uhulQSDGQ3o6sY,82
|
|
115
116
|
jaclang/compiler/tests/test_importer.py,sha256=JNmte5FsHhnng9jzw7N5BenflAFCasuhezN1sytDVyg,1739
|
|
116
117
|
jaclang/compiler/tests/test_parser.py,sha256=C81mUo8EGwypPTTLRVS9BglP0Dyye9xaPSQtw7cwnnI,4814
|
|
117
|
-
jaclang/compiler/tests/test_workspace.py,sha256=SEBcvz_daTbonrLHK9FbjiH86TUbOtVGH-iZ3xkJSMk,3184
|
|
118
|
-
jaclang/compiler/workspace.py,sha256=I1MF2jaSylDOcQQV4Ez3svi4FdOyfmbNupuZT7q9aFQ,7797
|
|
119
118
|
jaclang/core/__init__.py,sha256=jDDYBCV82qPhmcDVk3NIvHbhng0ebSrXD3xrojg0-eo,34
|
|
120
119
|
jaclang/core/aott.py,sha256=MMFmel9cf1KrREjLUY9vV0b38pdb_4N3pxe5jMedBYA,7582
|
|
121
120
|
jaclang/core/construct.py,sha256=ZwgOO-P2OTv8d7mnxBkRg-AitrzYxsbFNqJZjRE9YqM,18649
|
|
@@ -134,9 +133,16 @@ jaclang/core/registry.py,sha256=4uuXahPN4SMVEWwJ6Gjm5LM14rePMGoyjQtSbDQmQZs,4178
|
|
|
134
133
|
jaclang/core/shelve_storage.py,sha256=UsZRHM8KPGUlZTX_bfcxzabInNrTaQVNMatQifycMYg,1692
|
|
135
134
|
jaclang/core/utils.py,sha256=5e4DyjtSweFxKeIuEyeYGV2MsuTtfnncfIwRdoyFdys,7736
|
|
136
135
|
jaclang/langserve/__init__.py,sha256=3qbnivBBcLZCfmDYRMIeKkG08Lx7XQsJJg-qG8TU8yc,51
|
|
137
|
-
jaclang/langserve/
|
|
136
|
+
jaclang/langserve/engine.py,sha256=xz_Qmss5d79nevli_gKN5giD61Ibt7O2MwA8Migu_t4,14910
|
|
137
|
+
jaclang/langserve/server.py,sha256=2CUO_5y2YFg7x0THrmseomYSaiUWukZqDxjdIvp02H0,4280
|
|
138
138
|
jaclang/langserve/tests/__init__.py,sha256=iDM47k6c3vahaWhwxpbkdEOshbmX-Zl5x669VONjS2I,23
|
|
139
139
|
jaclang/langserve/tests/defaults.py,sha256=8UWHuCHY-WatPcWFhyX9-4KLuJgODTlLNj0wNnKomIM,7608
|
|
140
|
+
jaclang/langserve/tests/fixtures/circle.jac,sha256=M-OOMttQ9D5qyvfJibKJVW6ce3YRmXKDUAWzyy4N4mU,1733
|
|
141
|
+
jaclang/langserve/tests/fixtures/circle_err.jac,sha256=6Cn3PtP3ujjC8DjiOQWFbdb5C6wW12wAv9BwLwvX7b4,1732
|
|
142
|
+
jaclang/langserve/tests/fixtures/circle_pure.impl.jac,sha256=wj2hs7EwA35a-7oGVZppQlNlgIhYOdmqW2LP4i1uQsc,670
|
|
143
|
+
jaclang/langserve/tests/fixtures/circle_pure.jac,sha256=jQ5QX0G5khGACoY82CM-6LcOX57w4e29tHVicE2eMgw,608
|
|
144
|
+
jaclang/langserve/tests/fixtures/circle_pure_err.impl.jac,sha256=rsXatY9a-wZONRPJ6VOuw7Bj9R_CrJO_TEwAVXj1PjU,702
|
|
145
|
+
jaclang/langserve/tests/fixtures/circle_pure_err.jac,sha256=jQ5QX0G5khGACoY82CM-6LcOX57w4e29tHVicE2eMgw,608
|
|
140
146
|
jaclang/langserve/tests/fixtures/hello.jac,sha256=iRMKtYVCw1zLvjOQbj3q__3Manj1Di1YeDTNMEvYtBc,36
|
|
141
147
|
jaclang/langserve/tests/pylsp_jsonrpc/__init__.py,sha256=bDWxRjmELPCVGy243_0kNrG7PttyZsv_eZ9JTKQrU1E,105
|
|
142
148
|
jaclang/langserve/tests/pylsp_jsonrpc/dispatchers.py,sha256=zEZWu6C2_n4lPoA8H8OO67746P93VhbYaXZMdtrD8Z0,1038
|
|
@@ -144,11 +150,11 @@ jaclang/langserve/tests/pylsp_jsonrpc/endpoint.py,sha256=TxDpWUd-8AGJwdRQN_iiCXY
|
|
|
144
150
|
jaclang/langserve/tests/pylsp_jsonrpc/exceptions.py,sha256=NGHeFQawZcjoLUcgDmY3bF7BqZR83g7TmdKyzCmRaKM,2836
|
|
145
151
|
jaclang/langserve/tests/pylsp_jsonrpc/streams.py,sha256=R80_FvICIkrbdGmNtlemWYaxrr7-XldPgLaASnyv0W8,3332
|
|
146
152
|
jaclang/langserve/tests/session.py,sha256=3pIRoQjZnsnUWIYnO2SpK7c1PAiHMCFrrStNK2tawRM,9572
|
|
147
|
-
jaclang/langserve/tests/test_server.py,sha256=
|
|
148
|
-
jaclang/langserve/utils.py,sha256=
|
|
153
|
+
jaclang/langserve/tests/test_server.py,sha256=oteZHprqS61mR9TCnpvuTo0A9XV66gX--h5isSazb08,3010
|
|
154
|
+
jaclang/langserve/utils.py,sha256=cEW-nOLA5KLShTE1cBXItSelaKj2qyNZNTtlPE1T8Xk,2717
|
|
149
155
|
jaclang/plugin/__init__.py,sha256=5t2krHKt_44PrCTGojzxEimxpNHYVQcn89jAiCSXE_k,165
|
|
150
156
|
jaclang/plugin/builtin.py,sha256=PP2Vs4p_oDbGYEx0iBFDYH49I4uSRnNVWgx2aOzorVA,1187
|
|
151
|
-
jaclang/plugin/default.py,sha256=
|
|
157
|
+
jaclang/plugin/default.py,sha256=bi8qyiKkXAwr-TjT_VSI0_KSW4l5fqHCGp7dV0egfI0,27142
|
|
152
158
|
jaclang/plugin/feature.py,sha256=Qi30JWJvt51s9nx3eJ0_BSTYIeTYLHe-e26y0IjJLz8,9444
|
|
153
159
|
jaclang/plugin/spec.py,sha256=mJRUMGaIhlHbZIvO2J-A1q3eNhnIWJ0iBCPmxhHiHx4,9043
|
|
154
160
|
jaclang/plugin/tests/__init__.py,sha256=rn_tNG8jCHWwBc_rx4yFkGc4N1GISb7aPuTFVRTvrTk,38
|
|
@@ -229,22 +235,22 @@ jaclang/tests/fixtures/sub_abil_sep_multilev.jac,sha256=wm7-RGdwfUGHjQo20jj2fTp0
|
|
|
229
235
|
jaclang/tests/fixtures/try_finally.jac,sha256=I4bjOZz0vZbY1rQZlPy-RCMYP2-LQwtsShlmKR1_UFE,574
|
|
230
236
|
jaclang/tests/fixtures/tupleunpack.jac,sha256=AP6rbofc0VmsTNxInY6WLGRKWVY6u8ut0uzQX_52QyI,64
|
|
231
237
|
jaclang/tests/fixtures/tuplytuples.jac,sha256=6qiXn5OV_qn4cqKwROjJ1VuBAh0nbUGpp-5vtH9n_Dg,344
|
|
232
|
-
jaclang/tests/fixtures/type_info.jac,sha256=
|
|
238
|
+
jaclang/tests/fixtures/type_info.jac,sha256=4Cw31ef5gny6IS0kLzgeSO-7ArEH1HgFFFip1BGQhZM,316
|
|
233
239
|
jaclang/tests/fixtures/with_context.jac,sha256=cDA_4YWe5UVmQRgcpktzkZ_zsswQpV_T2Otf_rFnPy8,466
|
|
234
240
|
jaclang/tests/fixtures/with_llm_function.jac,sha256=hcDBO2Ch5IScrV0VBzeYaNaL4GhmVwg_odOzfOb1pwk,804
|
|
235
241
|
jaclang/tests/fixtures/with_llm_lower.jac,sha256=S3a8luL38neLReoxNzs-nLeN36oys059MS8g7g_oqJg,1878
|
|
236
242
|
jaclang/tests/fixtures/with_llm_method.jac,sha256=l76E50hIygLwkiIpjf3iYGv97C3yZlUABE2D5GnqQ44,1420
|
|
237
243
|
jaclang/tests/fixtures/with_llm_type.jac,sha256=LKotFGtBl9mzo08SbTkzBWa3rGWt4AuzgianHFkAZvU,1778
|
|
238
|
-
jaclang/tests/test_cli.py,sha256=
|
|
244
|
+
jaclang/tests/test_cli.py,sha256=eHnlkHg6_p52q_jvRhFr0LzblZj9cAtlNDbxm-EVixs,8703
|
|
239
245
|
jaclang/tests/test_language.py,sha256=V7SsMd5M_746LkZ5H_JHq6pODPu0kJTkfV3GZMqIoLs,34203
|
|
240
246
|
jaclang/tests/test_man_code.py,sha256=Kq93zg3hEfiouvpWvmfCgR6lDT5RKDp28k5ZaWe1Xeg,4519
|
|
241
247
|
jaclang/tests/test_reference.py,sha256=b6mR0WTJ0-sKkvZtMGsGooxzkkmD4WfXj_hOY6ZnhYw,3341
|
|
242
248
|
jaclang/tests/test_settings.py,sha256=TIX5uiu8H9IpZN2__uFiclcdCpBpPpcAwtlEHyFC4kk,1999
|
|
243
249
|
jaclang/utils/__init__.py,sha256=86LQ_LDyWV-JFkYBpeVHpLaVxkqwFDP60XpWXOFZIQk,46
|
|
244
|
-
jaclang/utils/helpers.py,sha256=
|
|
250
|
+
jaclang/utils/helpers.py,sha256=v-jQ-SDzGLrrLXKxoL1PaCguJqcV-X1UlwjWSL3GNAI,6142
|
|
245
251
|
jaclang/utils/lang_tools.py,sha256=odv66Os8bJvw9JIUUkccGWvEPL98c-60veAiOiNyTy4,9956
|
|
246
252
|
jaclang/utils/log.py,sha256=G8Y_DnETgTh9xzvlW5gh9zqJ1ap4YY_MDTwIMu5Uc0Y,262
|
|
247
|
-
jaclang/utils/test.py,sha256=
|
|
253
|
+
jaclang/utils/test.py,sha256=5VK0hVo_IyfFiMFN_gz-dFx01yF3tPVZ56RKoAAZfaU,5374
|
|
248
254
|
jaclang/utils/tests/__init__.py,sha256=8uwVqMsc6cxBAM1DuHLuNuTnzLXqOqM-WRa4ixOMF6w,23
|
|
249
255
|
jaclang/utils/tests/test_lang_tools.py,sha256=hFQzkzdmJIhP99xqjR5z7bqkefMLmE6kwldXYrfK--E,4831
|
|
250
256
|
jaclang/utils/treeprinter.py,sha256=q0x2ztq_HmFPPHqZD--7um9yvxmMhe7E6ETJN_KLy7k,11676
|
|
@@ -1470,7 +1476,7 @@ jaclang/vendor/typing_extensions-4.12.2.dist-info/METADATA,sha256=BeUQIa8cnYbrjW
|
|
|
1470
1476
|
jaclang/vendor/typing_extensions-4.12.2.dist-info/RECORD,sha256=XS4fBVrPI7kaNZ56Ggl2RGa76jySWLqTzcrUpZIQTVM,418
|
|
1471
1477
|
jaclang/vendor/typing_extensions-4.12.2.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
|
1472
1478
|
jaclang/vendor/typing_extensions.py,sha256=gwekpyG9DVG3lxWKX4ni8u7nk3We5slG98mA9F3DJQw,134451
|
|
1473
|
-
jaclang-0.
|
|
1474
|
-
jaclang-0.
|
|
1475
|
-
jaclang-0.
|
|
1476
|
-
jaclang-0.
|
|
1479
|
+
jaclang-0.7.1.dist-info/METADATA,sha256=RkmhZ27yRPFOXpv9JlwGdiRjtBqoqWCHGLFMuWtygA8,4756
|
|
1480
|
+
jaclang-0.7.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
1481
|
+
jaclang-0.7.1.dist-info/entry_points.txt,sha256=8sMi4Tvi9f8tQDN2QAXsSA2icO27zQ4GgEdph6bNEZM,49
|
|
1482
|
+
jaclang-0.7.1.dist-info/RECORD,,
|