Typhon-Language 0.1.2__py3-none-any.whl → 0.1.4__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.
Files changed (57) hide show
  1. Typhon/Driver/configs.py +14 -0
  2. Typhon/Driver/debugging.py +148 -5
  3. Typhon/Driver/diagnostic.py +4 -3
  4. Typhon/Driver/language_server.py +25 -0
  5. Typhon/Driver/run.py +1 -1
  6. Typhon/Driver/translate.py +16 -11
  7. Typhon/Driver/utils.py +39 -1
  8. Typhon/Grammar/_typhon_parser.py +2920 -2718
  9. Typhon/Grammar/parser.py +80 -53
  10. Typhon/Grammar/parser_helper.py +68 -87
  11. Typhon/Grammar/syntax_errors.py +41 -20
  12. Typhon/Grammar/token_factory_custom.py +541 -485
  13. Typhon/Grammar/tokenizer_custom.py +52 -0
  14. Typhon/Grammar/typhon_ast.py +754 -76
  15. Typhon/Grammar/typhon_ast_error.py +438 -0
  16. Typhon/Grammar/unparse_custom.py +25 -0
  17. Typhon/LanguageServer/__init__.py +3 -0
  18. Typhon/LanguageServer/client/__init__.py +42 -0
  19. Typhon/LanguageServer/client/pyrefly.py +115 -0
  20. Typhon/LanguageServer/client/pyright.py +173 -0
  21. Typhon/LanguageServer/semantic_tokens.py +446 -0
  22. Typhon/LanguageServer/server.py +376 -0
  23. Typhon/LanguageServer/utils.py +65 -0
  24. Typhon/SourceMap/ast_match_based_map.py +199 -152
  25. Typhon/SourceMap/ast_matching.py +102 -87
  26. Typhon/SourceMap/datatype.py +275 -264
  27. Typhon/SourceMap/defined_name_retrieve.py +145 -0
  28. Typhon/Transform/comprehension_to_function.py +2 -5
  29. Typhon/Transform/const_member_to_final.py +12 -7
  30. Typhon/Transform/extended_patterns.py +139 -0
  31. Typhon/Transform/forbidden_statements.py +25 -0
  32. Typhon/Transform/if_while_let.py +122 -11
  33. Typhon/Transform/inline_statement_block_capture.py +22 -15
  34. Typhon/Transform/optional_operators_to_checked.py +14 -6
  35. Typhon/Transform/placeholder_to_function.py +0 -1
  36. Typhon/Transform/record_to_dataclass.py +22 -238
  37. Typhon/Transform/scope_check_rename.py +109 -29
  38. Typhon/Transform/transform.py +16 -12
  39. Typhon/Transform/type_abbrev_desugar.py +11 -15
  40. Typhon/Transform/type_annotation_check_expand.py +2 -2
  41. Typhon/Transform/utils/__init__.py +0 -0
  42. Typhon/Transform/utils/imports.py +83 -0
  43. Typhon/Transform/{utils.py → utils/jump_away.py} +2 -38
  44. Typhon/Transform/utils/make_class.py +135 -0
  45. Typhon/Transform/visitor.py +25 -0
  46. Typhon/Typing/pyrefly.py +145 -0
  47. Typhon/Typing/pyright.py +141 -144
  48. Typhon/Typing/result_diagnostic.py +1 -1
  49. Typhon/__main__.py +15 -1
  50. {typhon_language-0.1.2.dist-info → typhon_language-0.1.4.dist-info}/METADATA +13 -6
  51. typhon_language-0.1.4.dist-info/RECORD +65 -0
  52. {typhon_language-0.1.2.dist-info → typhon_language-0.1.4.dist-info}/WHEEL +1 -1
  53. typhon_language-0.1.4.dist-info/licenses/LICENSE +201 -0
  54. typhon_language-0.1.2.dist-info/RECORD +0 -48
  55. typhon_language-0.1.2.dist-info/licenses/LICENSE +0 -21
  56. {typhon_language-0.1.2.dist-info → typhon_language-0.1.4.dist-info}/entry_points.txt +0 -0
  57. {typhon_language-0.1.2.dist-info → typhon_language-0.1.4.dist-info}/top_level.txt +0 -0
Typhon/Typing/pyright.py CHANGED
@@ -1,144 +1,141 @@
1
- import sys
2
- from pathlib import Path
3
- import subprocess
4
- from ..Driver.debugging import debug_print
5
- from typing import Literal, cast, Any
6
- import json
7
- from .result_diagnostic import Severity, Diagnostic, TypeCheckResult
8
- from ..SourceMap.datatype import Range, Pos
9
-
10
- # https://docs.basedpyright.com/dev/configuration/config-files/
11
- type TypeCheckLevel = Literal[
12
- "off",
13
- "basic",
14
- "strict",
15
- "all",
16
- "translate", # Default for Typhon translation
17
- "script", # Default for Typhon scripts
18
- ]
19
- translate_config = {
20
- "typeCheckingMode": "strict",
21
- "reportUnusedExpression": "warning",
22
- "reportUnusedClass": "warning",
23
- "reportUnusedImport": "warning",
24
- "reportUnusedFunction": "warning",
25
- "reportUnusedVariable": "warning",
26
- "reportUnusedCallResult": "warning",
27
- "reportUnnecessaryIsInstance": "warning",
28
- "reportUnnecessaryCast": "warning",
29
- "reportUnnecessaryComparison": "warning",
30
- "reportUnnecessaryContains": "warning",
31
- "reportMatchNotExhaustive": "warning",
32
- "reportDeprecated": "warning",
33
- }
34
- script_config = {
35
- "typeCheckingMode": "strict",
36
- "reportUnusedExpression": "none",
37
- "reportUnusedClass": "none",
38
- "reportUnusedImport": "none",
39
- "reportUnusedFunction": "none",
40
- "reportUnusedVariable": "none",
41
- "reportUnusedCallResult": "none",
42
- "reportUnnecessaryIsInstance": "none",
43
- "reportUnnecessaryCast": "none",
44
- "reportUnnecessaryComparison": "none",
45
- "reportUnnecessaryContains": "none",
46
- "reportMatchNotExhaustive": "none",
47
- "reportDeprecated": "none",
48
- }
49
-
50
-
51
- def write_pyright_config(
52
- output_dir: Path, level: TypeCheckLevel = "translate", overwrite: bool = False
53
- ) -> str:
54
- config = {
55
- "include": ["**/*.py"],
56
- "exclude": ["**/__pycache__"],
57
- "typeCheckingMode": "off",
58
- }
59
- if level == "translate":
60
- config.update(translate_config)
61
- elif level == "script":
62
- config.update(script_config)
63
- elif level == "basic":
64
- config["typeCheckingMode"] = "basic"
65
- elif level == "strict":
66
- config["typeCheckingMode"] = "strict"
67
- elif level == "all":
68
- config["typeCheckingMode"] = "all"
69
- else:
70
- raise ValueError(f"Unknown type check level: {level}")
71
- config_path = output_dir / "pyrightconfig.json"
72
- if not overwrite and config_path.exists():
73
- debug_print(
74
- f"Config file already exists at {config_path}. Use overwrite=True to replace."
75
- )
76
- return str(config_path)
77
- with open(config_path, "w") as f:
78
- json.dump(config, f, indent=4)
79
- debug_print(f"Generated pyright config at {config_path}")
80
- return str(config_path)
81
-
82
-
83
- def _try_read_attr[T](d: Any, attr: str, default: T) -> T:
84
- result = d.get(attr, default)
85
- return cast(T, result)
86
-
87
-
88
- def _parse_pos_range(pos: Any) -> Range:
89
- start = _try_read_attr(pos, "start", {})
90
- end = _try_read_attr(pos, "end", {})
91
- # All lines and columns are 0-based, convert to 1-based.
92
- return Range(
93
- start=Pos(line=start.get("line", 0) + 1, column=start.get("character", 0) + 1),
94
- end=Pos(line=end.get("line", 0) + 1, column=end.get("character", 0) + 1),
95
- )
96
-
97
-
98
- def _parse_diagnostic(diag: Any) -> Diagnostic:
99
- return Diagnostic(
100
- file_path=_try_read_attr(diag, "file", ""),
101
- severity=Severity[_try_read_attr(diag, "severity", "INFO").upper()],
102
- message=_try_read_attr(diag, "message", ""),
103
- pos=_parse_pos_range(diag["range"]),
104
- rule=_try_read_attr(diag, "rule", ""),
105
- )
106
-
107
-
108
- def parse_json_output(output: str, returncode: int, stderr: str) -> TypeCheckResult:
109
- data = json.loads(output)
110
- diagnostics = [
111
- _parse_diagnostic(diag) for diag in data.get("generalDiagnostics", [])
112
- ]
113
- summary = _try_read_attr(data, "summary", {})
114
- return TypeCheckResult(
115
- returncode=returncode,
116
- stderr=stderr,
117
- files_analyzed=_try_read_attr(summary, "filesAnalyzed", 0),
118
- num_errors=_try_read_attr(summary, "errorCount", 0),
119
- num_warnings=_try_read_attr(summary, "warningCount", 0),
120
- num_info=_try_read_attr(summary, "informationCount", 0),
121
- time_in_sec=_try_read_attr(summary, "timeInSec", 0.0),
122
- diagnostics=diagnostics,
123
- )
124
-
125
-
126
- def run_pyright(
127
- py_file_or_dir: Path, level: TypeCheckLevel = "translate"
128
- ) -> TypeCheckResult:
129
- output = subprocess.run(
130
- [
131
- sys.executable,
132
- "-m",
133
- "basedpyright",
134
- str(py_file_or_dir),
135
- "--outputjson",
136
- ],
137
- stdout=subprocess.PIPE,
138
- stderr=subprocess.PIPE,
139
- shell=False,
140
- )
141
- result = parse_json_output(
142
- output.stdout.decode(), output.returncode, output.stderr.decode()
143
- )
144
- return result
1
+ import sys
2
+ from pathlib import Path
3
+ import subprocess
4
+ from ..Driver.debugging import debug_print
5
+ from typing import Literal, cast, Any
6
+ import json
7
+ from .result_diagnostic import Severity, Diagnostic, TypeCheckResult
8
+ from ..SourceMap.datatype import Range, Pos
9
+
10
+ # https://docs.basedpyright.com/dev/configuration/config-files/
11
+ type TypeCheckLevel = Literal[
12
+ "off",
13
+ "basic",
14
+ "strict",
15
+ "all",
16
+ "translate", # Default for Typhon translation
17
+ "script", # Default for Typhon scripts
18
+ ]
19
+ translate_config = {
20
+ "typeCheckingMode": "strict",
21
+ "reportUnusedExpression": "warning",
22
+ "reportUnusedClass": "warning",
23
+ "reportUnusedImport": "warning",
24
+ "reportUnusedFunction": "warning",
25
+ "reportUnusedVariable": "warning",
26
+ "reportUnusedCallResult": "warning",
27
+ "reportUnnecessaryIsInstance": "warning",
28
+ "reportUnnecessaryCast": "warning",
29
+ # "reportUnnecessaryComparison": "warning", # To check type of patterns
30
+ "reportUnnecessaryContains": "warning",
31
+ "reportDeprecated": "warning",
32
+ }
33
+ script_config = {
34
+ "typeCheckingMode": "strict",
35
+ "reportUnusedExpression": "none",
36
+ "reportUnusedClass": "none",
37
+ "reportUnusedImport": "none",
38
+ "reportUnusedFunction": "none",
39
+ "reportUnusedVariable": "none",
40
+ "reportUnusedCallResult": "none",
41
+ "reportUnnecessaryIsInstance": "none",
42
+ "reportUnnecessaryCast": "none",
43
+ # "reportUnnecessaryComparison": "none", # To check type of patterns
44
+ "reportUnnecessaryContains": "none",
45
+ "reportDeprecated": "none",
46
+ }
47
+
48
+
49
+ def write_pyright_config(
50
+ output_dir: Path, level: TypeCheckLevel = "translate", overwrite: bool = False
51
+ ) -> str:
52
+ config = {
53
+ "include": ["**/*.py"],
54
+ "exclude": ["**/__pycache__"],
55
+ "typeCheckingMode": "off",
56
+ }
57
+ if level == "translate":
58
+ config.update(translate_config)
59
+ elif level == "script":
60
+ config.update(script_config)
61
+ elif level == "basic":
62
+ config["typeCheckingMode"] = "basic"
63
+ elif level == "strict":
64
+ config["typeCheckingMode"] = "strict"
65
+ elif level == "all":
66
+ config["typeCheckingMode"] = "all"
67
+ else:
68
+ raise ValueError(f"Unknown type check level: {level}")
69
+ config_path = output_dir / "pyrightconfig.json"
70
+ if not overwrite and config_path.exists():
71
+ debug_print(
72
+ f"Config file already exists at {config_path}. Use overwrite=True to replace."
73
+ )
74
+ return str(config_path)
75
+ with open(config_path, "w") as f:
76
+ json.dump(config, f, indent=4)
77
+ debug_print(f"Generated pyright config at {config_path}")
78
+ return str(config_path)
79
+
80
+
81
+ def _try_read_attr[T](d: Any, attr: str, default: T) -> T:
82
+ result = d.get(attr, default)
83
+ return cast(T, result)
84
+
85
+
86
+ def _parse_pos_range(pos: Any) -> Range:
87
+ start = _try_read_attr(pos, "start", {})
88
+ end = _try_read_attr(pos, "end", {})
89
+ return Range(
90
+ start=Pos(line=start.get("line", 0), column=start.get("character", 0)),
91
+ end=Pos(line=end.get("line", 0), column=end.get("character", 0)),
92
+ )
93
+
94
+
95
+ def _parse_diagnostic(diag: Any) -> Diagnostic:
96
+ return Diagnostic(
97
+ file_path=_try_read_attr(diag, "file", ""),
98
+ severity=Severity[_try_read_attr(diag, "severity", "INFO").upper()],
99
+ message=_try_read_attr(diag, "message", ""),
100
+ pos=_parse_pos_range(diag["range"]),
101
+ rule=_try_read_attr(diag, "rule", ""),
102
+ )
103
+
104
+
105
+ def parse_json_output(output: str, returncode: int, stderr: str) -> TypeCheckResult:
106
+ data = json.loads(output)
107
+ diagnostics = [
108
+ _parse_diagnostic(diag) for diag in data.get("generalDiagnostics", [])
109
+ ]
110
+ summary = _try_read_attr(data, "summary", {})
111
+ return TypeCheckResult(
112
+ returncode=returncode,
113
+ stderr=stderr,
114
+ files_analyzed=_try_read_attr(summary, "filesAnalyzed", 0),
115
+ num_errors=_try_read_attr(summary, "errorCount", 0),
116
+ num_warnings=_try_read_attr(summary, "warningCount", 0),
117
+ num_info=_try_read_attr(summary, "informationCount", 0),
118
+ time_in_sec=_try_read_attr(summary, "timeInSec", 0.0),
119
+ diagnostics=diagnostics,
120
+ )
121
+
122
+
123
+ def run_pyright(
124
+ py_file_or_dir: Path, level: TypeCheckLevel = "translate"
125
+ ) -> TypeCheckResult:
126
+ output = subprocess.run(
127
+ [
128
+ sys.executable,
129
+ "-m",
130
+ "basedpyright",
131
+ str(py_file_or_dir),
132
+ "--outputjson",
133
+ ],
134
+ stdout=subprocess.PIPE,
135
+ stderr=subprocess.PIPE,
136
+ shell=False,
137
+ )
138
+ result = parse_json_output(
139
+ output.stdout.decode(), output.returncode, output.stderr.decode()
140
+ )
141
+ return result
@@ -67,7 +67,7 @@ class TypeCheckResult:
67
67
  output_error: bool = True,
68
68
  output_warning: bool = True,
69
69
  output_info: bool = True,
70
- output_summary_even_no_diag: bool = True,
70
+ output_summary_even_no_diag: bool = False,
71
71
  source_maps: dict[str, SourceMap | None] = {},
72
72
  ) -> str:
73
73
  diags: list[str] = []
Typhon/__main__.py CHANGED
@@ -1,9 +1,15 @@
1
1
  import sys
2
2
  import fire
3
3
  from .Driver.translate import translate, tr
4
- from .Driver.debugging import set_debug_mode, set_debug_verbose, set_debug_first_error
4
+ from .Driver.debugging import (
5
+ set_debug_mode,
6
+ set_debug_verbose,
7
+ set_debug_first_error,
8
+ set_debug_log_file,
9
+ )
5
10
  from .Driver.run import run
6
11
  from .Driver.type_check import type_check
12
+ from .Driver.language_server import language_server
7
13
 
8
14
 
9
15
  def _setup_debug_mode():
@@ -18,6 +24,13 @@ def _setup_debug_mode():
18
24
  set_debug_mode(True)
19
25
  set_debug_first_error(True)
20
26
  sys.argv.remove("--debug-first-error")
27
+ if "--debug-log-file" in sys.argv:
28
+ index = sys.argv.index("--debug-log-file")
29
+ if index + 1 < len(sys.argv):
30
+ log_file = sys.argv[index + 1]
31
+ set_debug_log_file(log_file)
32
+ sys.argv.pop(index) # Remove --debug-log-file
33
+ sys.argv.pop(index) # Remove log file path
21
34
 
22
35
 
23
36
  def main():
@@ -29,6 +42,7 @@ def main():
29
42
  "tr": tr,
30
43
  "run": run,
31
44
  "type_check": type_check,
45
+ "lsp": language_server,
32
46
  },
33
47
  name="typhon",
34
48
  )
@@ -1,16 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Typhon-Language
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: Typhon programming language
5
5
  Requires-Python: >=3.12
6
6
  Description-Content-Type: text/markdown
7
7
  License-File: LICENSE
8
- Requires-Dist: basedpyright>=1.32.1
8
+ Requires-Dist: basedpyright>=1.37.1
9
9
  Requires-Dist: fire>=0.7.1
10
- Requires-Dist: intervaltree>=3.1.0
10
+ Requires-Dist: intervaltree>=3.2.1
11
11
  Requires-Dist: pegen>=0.3.0
12
- Requires-Dist: pytest>=8.4.1
13
- Requires-Dist: ruff>=0.12.5
12
+ Requires-Dist: pygls>=2.0.0
13
+ Requires-Dist: pyrefly>=0.47.0
14
+ Requires-Dist: pytest>=9.0.2
15
+ Requires-Dist: ruff>=0.14.11
14
16
  Dynamic: license-file
15
17
 
16
18
  # Typhon
@@ -34,6 +36,7 @@ Run Typhon from the command line:
34
36
  ```bash
35
37
  typhon --help
36
38
  ```
39
+
37
40
  Create a simple Typhon program in `hello.typh`:
38
41
 
39
42
  ```typhon
@@ -55,7 +58,6 @@ Or run directly using uvx:
55
58
  uvx --from typhon-language typhon run hello.typh
56
59
  ```
57
60
 
58
-
59
61
  ## Design Concepts
60
62
 
61
63
  Typhon is built on three core pillars:
@@ -64,6 +66,11 @@ Typhon is built on three core pillars:
64
66
  2. **Expressiveness**: Expression-oriented design with functional programming features. Control comprehension forms for `if`, `match`, `try`, and so on enable concise, value-returning expressions. Function literals, placeholders and pipe operators facilitate clean and readable code.
65
67
  3. **Python Interoperability**: Typhon compiles directly to Python, allowing you to use the vast ecosystem of Python libraries seamlessly while enjoying a modern syntax.
66
68
 
69
+ ### How it looks like
70
+
71
+ You can see small code snippets in the test directory: [Typhon Tests](test/execute/RunFileTest/).
72
+
73
+
67
74
  ## Documentation
68
75
 
69
76
  For a complete guide to the language, please visit the **[Typhon Reference Manual](doc/reference/README.md)**.
@@ -0,0 +1,65 @@
1
+ Typhon/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ Typhon/__main__.py,sha256=iJLubjFNRR_dYC0UNs_K8vqy1bpXZJKmrPjRdNNQtmo,1513
3
+ Typhon/Driver/configs.py,sha256=uHNYSsWn00gjwg9RuL3Pb94KdK6jtqr0wfXYo1Cv3Qw,402
4
+ Typhon/Driver/debugging.py,sha256=xbJnN1tyKHa5FUpu8S7wq0dBf3T8j9Bw3mkAIGU7-jY,5459
5
+ Typhon/Driver/diagnostic.py,sha256=m_7sR4zLx7YJwIrHsmo5AlmvuCSLoabpdkB-PHmnmK4,1327
6
+ Typhon/Driver/language_server.py,sha256=34_9oYWDr4ksAsQk4O8oXNqIyMROK2szyUraBJcZvS0,526
7
+ Typhon/Driver/run.py,sha256=Nv1scXdMGaiU4jlIdbn9TTLfd3a9VfiX2NlnrD7-kts,4564
8
+ Typhon/Driver/translate.py,sha256=2hkRNeH-F_75gMAadkssxfPhk99AwhJLPSXvZCH1dFo,6743
9
+ Typhon/Driver/type_check.py,sha256=9PDKsmAPcpdtQqZAE7LDjM8ynjKz02rNZwXDG2Kb3LE,1516
10
+ Typhon/Driver/utils.py,sha256=ZtKUqoJK8R_Dps7e4Y0EajEH-KPxB88WraiDkKgPxeU,2714
11
+ Typhon/Grammar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ Typhon/Grammar/_typhon_parser.py,sha256=vEIphAWnOT4ouaZT2un4JOvNMUmMoVZ4DvDnkjf1iMY,453258
13
+ Typhon/Grammar/line_break.py,sha256=lH2is1yAubG1fhXw5SbQUvlfmeLH7h3PbOEiVrAfRA0,2712
14
+ Typhon/Grammar/parser.py,sha256=a4s0Q-lT2kp1TYyB1h0976TW862hfO3YA2KyUw5pbqg,2139
15
+ Typhon/Grammar/parser_helper.py,sha256=kr_UNjfPw3AHly-2RnlXX0z2SPkvCuzsK6W-sR-C5b4,17420
16
+ Typhon/Grammar/syntax_errors.py,sha256=diwu_LFWqx1nKrhYa7B2as9ViJfSNzRWdW7n2Ml347w,5322
17
+ Typhon/Grammar/token_factory_custom.py,sha256=DFYZCw9UYZ2sdMBdI4v_mdV29FoTrmf35luvZiioEH4,22391
18
+ Typhon/Grammar/tokenizer_custom.py,sha256=hWZb25B-qgvpeLEI5U7jUfRxRlZqaxU9mLdabnYRLtQ,11653
19
+ Typhon/Grammar/typhon_ast.py,sha256=-LAvQJ7oRA_kpci9khj1_I3Sx8WUFwcsTxDWk5qTe0M,68393
20
+ Typhon/Grammar/typhon_ast_error.py,sha256=WgQKqcoi83BHkduRFVaAlOQcu1p6ec8Y0tZXsDvFIoc,12898
21
+ Typhon/Grammar/unparse_custom.py,sha256=97mjjp7TxEJY94BLprn6ULG401JPhTvy4-nkbXlJG0Y,778
22
+ Typhon/LanguageServer/__init__.py,sha256=hZ3c1OIjO5aR68buSTILHu1ojfJDZBSq_MBKNGZcjgk,49
23
+ Typhon/LanguageServer/semantic_tokens.py,sha256=KsnXryIk_qjKhscD4yDVadXD6RXXjbkwLUR5b42wcY0,16522
24
+ Typhon/LanguageServer/server.py,sha256=iaNFtw2FJehEgJZXJ2bK7tHP5Tu-OBrw9jhFdj4d8bQ,15573
25
+ Typhon/LanguageServer/utils.py,sha256=2nCwgUFdl4jjxLRA_t3fWYGGfMW5l-5K1bFTrk1nDVE,2302
26
+ Typhon/LanguageServer/client/__init__.py,sha256=ozM0Z_zoM8JDbE6SdMsb3poMbbfxM73NNzlV_d9MF1w,1205
27
+ Typhon/LanguageServer/client/pyrefly.py,sha256=KFNcbL4LWbHaQsyMa5DmRgRQ7KD6lQ3PR_IUzg66jt4,4192
28
+ Typhon/LanguageServer/client/pyright.py,sha256=_RsknVVfhWbwCpBN6JL_Uk1nYFm-avQP_bj_ctjMqy4,7364
29
+ Typhon/SourceMap/__init__.py,sha256=t56lq7YFlqhEfpW9_xHyIs2n_hhYuycMNRpyV9vjMI4,599
30
+ Typhon/SourceMap/ast_match_based_map.py,sha256=ZfPKs9PlHqZPsD9LbX7J9hoaPNJer_BUWbJOgN6bnM4,7750
31
+ Typhon/SourceMap/ast_matching.py,sha256=YRIxyOJmQPU1VJFDE8D1hIxq5UtYap_yFktR1Y9SpyQ,4091
32
+ Typhon/SourceMap/datatype.py,sha256=6ITNUeLixFgTYx7Ju-6fhW9-yqzZ7Ft8jc0rIc0fzQ4,10387
33
+ Typhon/SourceMap/defined_name_retrieve.py,sha256=RfU8yqc6kdgDQcjgaW93FscVJDS81tRx37PblbWt1Wo,5293
34
+ Typhon/Transform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ Typhon/Transform/comprehension_to_function.py,sha256=DNuE89genSkgEBhSsk9RyfB9vHZWr-F-wRwh-N_VztY,2643
36
+ Typhon/Transform/const_member_to_final.py,sha256=qIDrpYubQOUOFKsH4aquamihLQ02gwa0wGreRJrxdPI,2701
37
+ Typhon/Transform/extended_patterns.py,sha256=eylsTJKShw2ev4wQyUPgMLRGY0sg-AxIyDmmZRVTH_s,4553
38
+ Typhon/Transform/forbidden_statements.py,sha256=q0OoYqlJd1VCoLz9lUHJy1vObL9YAZNyC3GYuzoitOM,4521
39
+ Typhon/Transform/func_literal_to_def.py,sha256=SxI6lpktyeYFSmoVPqcDmKZ5CQcVXEmkg5sy1AtMPy0,2675
40
+ Typhon/Transform/if_while_let.py,sha256=pt7pfVZS2jhBHkRaIADTahWIWWjeUXpvUhincI3Koy0,10322
41
+ Typhon/Transform/inline_statement_block_capture.py,sha256=0mrgJBh1r48JaFIC6rZbsLBs0gHrgKcWW0a79snPlmM,8518
42
+ Typhon/Transform/insert_self_to_method.py,sha256=O9dOFx9wtYWwN0wR7D5PmX51REy1VKEzvVNt7lIVRRU,1593
43
+ Typhon/Transform/name_generator.py,sha256=_mAmG7ynGQEP4qBqp2rIpY3qMWC95UGbXTwHXBTYYPU,5906
44
+ Typhon/Transform/optional_operators_to_checked.py,sha256=Wy1e6XccYXoU8_fmWPP4selDs_7-nCPNS1f6C58NJZc,7143
45
+ Typhon/Transform/placeholder_to_function.py,sha256=xmeQUpFqpEiDuarDmvljsLZ9dvWYuHl7au-qGpgcFRI,5069
46
+ Typhon/Transform/record_to_dataclass.py,sha256=aAcqOIxYlQvJitorqkU3m_AEtI7NnB8YPvnnMWj-3-8,8579
47
+ Typhon/Transform/scope_check_rename.py,sha256=_KsgHlMVpxrnkxgfz3UQO4yFKZDFd8_pEAoAxQAn-U4,34246
48
+ Typhon/Transform/transform.py,sha256=wHVOlG5ZzclDOB2kiPRWmmWCNeO5XCEiIw3OT-29mN0,2548
49
+ Typhon/Transform/type_abbrev_desugar.py,sha256=xpdeAhx5n_kuA46jZWKN58pp_CEMaZNSTqPF1rq2m4E,6623
50
+ Typhon/Transform/type_annotation_check_expand.py,sha256=-otJMoZY4TNodVyQ93J2V4ra_f8iaIBlXrwAOQXJchQ,10479
51
+ Typhon/Transform/visitor.py,sha256=q28SH7gl2t9HKeobJRQZPgSYyrnKVMlmitI_wuyCGHo,12725
52
+ Typhon/Transform/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
+ Typhon/Transform/utils/imports.py,sha256=I1S0O5XpRsEwOeMGFt8fLKLniFvJIn9I4Mgt5sEDDog,2528
54
+ Typhon/Transform/utils/jump_away.py,sha256=8iGakrHaCQp9Te9_XYZ5-mGFUWmNKCBABnDKg1T2HVg,2998
55
+ Typhon/Transform/utils/make_class.py,sha256=E7uICoWP6_7rvlV2Y9BkcSBzpbJSBMYMpuX6xliVx-s,4237
56
+ Typhon/Typing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
+ Typhon/Typing/pyrefly.py,sha256=Cr5k-FWDLOFQZYm04eRr_mI-w8y-5on95fi7Y6L1sfU,4696
58
+ Typhon/Typing/pyright.py,sha256=uYDN0WonSiOeAKp-CS6sPfC5NAgk53Y_xTrVdei4HH0,4624
59
+ Typhon/Typing/result_diagnostic.py,sha256=kZYyzCvbXIxqIcvsMgJq7hxrwSZ4PB4IgD2Yt_VT93Q,3680
60
+ typhon_language-0.1.4.dist-info/licenses/LICENSE,sha256=op2ra-gs-As80dm_QEhnwEsrhTOqkkAp8-W6PMTlBXs,11348
61
+ typhon_language-0.1.4.dist-info/METADATA,sha256=OxUsveh4N_ASVicNtXi-t8BMENDGfwFbNKYHdSd69_4,6394
62
+ typhon_language-0.1.4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
63
+ typhon_language-0.1.4.dist-info/entry_points.txt,sha256=a_tTwpYswStM7ViRyF0j7qn9jV3lN0TpGiYG8TQEjMw,48
64
+ typhon_language-0.1.4.dist-info/top_level.txt,sha256=H83GWRaycF_6jk0COdUlzXliigwTNM00Svnlp_k9F5Y,7
65
+ typhon_language-0.1.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5