koatl 0.3.17__tar.gz → 0.3.18__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.
Files changed (153) hide show
  1. {koatl-0.3.17 → koatl-0.3.18}/Cargo.lock +1 -1
  2. {koatl-0.3.17 → koatl-0.3.18}/PKG-INFO +1 -1
  3. {koatl-0.3.17 → koatl-0.3.18}/koatl/Cargo.toml +1 -1
  4. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/iter.tl +6 -0
  5. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/placeholder.tl +5 -1
  6. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/ast.rs +2 -1
  7. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/inference.rs +1 -1
  8. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/lift_cst.rs +2 -4
  9. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/resolve_scopes.rs +7 -4
  10. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/transform.rs +8 -18
  11. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/iter.tl +6 -0
  12. {koatl-0.3.17 → koatl-0.3.18}/Cargo.toml +0 -0
  13. {koatl-0.3.17 → koatl-0.3.18}/README.md +0 -0
  14. {koatl-0.3.17 → koatl-0.3.18}/koatl/.github/workflows/CI.yml +0 -0
  15. {koatl-0.3.17 → koatl-0.3.18}/koatl/.gitignore +0 -0
  16. {koatl-0.3.17 → koatl-0.3.18}/koatl/LICENSE +0 -0
  17. {koatl-0.3.17 → koatl-0.3.18}/koatl/README.md +0 -0
  18. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/__init__.py +0 -0
  19. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/__main__.py +0 -0
  20. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/cli.py +0 -0
  21. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/notebook/__init__.py +0 -0
  22. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/notebook/magic.py +0 -0
  23. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/prelude/__init__.tl +0 -0
  24. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/runtime/__init__.py +0 -0
  25. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/runtime/meta_finder.py +0 -0
  26. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/runtime/record.py +0 -0
  27. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/runtime/vattr.py +0 -0
  28. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/__init__.tl +0 -0
  29. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/control/__init__.tl +0 -0
  30. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/control/async.tl +0 -0
  31. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/control/base.tl +0 -0
  32. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/control/do.tl +0 -0
  33. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/control/env.tl +0 -0
  34. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/control/memo.tl +0 -0
  35. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/control/result.tl +0 -0
  36. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/data/__init__.tl +0 -0
  37. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/data/list.tl +0 -0
  38. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/data/record.tl +0 -0
  39. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/ext.tl +0 -0
  40. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/io.tl +0 -0
  41. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/json.tl +0 -0
  42. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/lazy_module.tl +0 -0
  43. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/pickle.tl +0 -0
  44. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/re.tl +0 -0
  45. {koatl-0.3.17 → koatl-0.3.18}/koatl/python/koatl/std/trait.py +0 -0
  46. {koatl-0.3.17 → koatl-0.3.18}/koatl/requirements.txt +0 -0
  47. {koatl-0.3.17 → koatl-0.3.18}/koatl/src/emit_py.rs +0 -0
  48. {koatl-0.3.17 → koatl-0.3.18}/koatl/src/lib.rs +0 -0
  49. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/conftest.py +0 -0
  50. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/arguments.tl +0 -0
  51. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/containers.tl +0 -0
  52. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/data.txt +0 -0
  53. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/decorators.tl +0 -0
  54. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/destructure-for-and-fn.tl +0 -0
  55. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/destructure.tl +0 -0
  56. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/escape_ident.tl +0 -0
  57. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/fstr.tl +0 -0
  58. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/functions.tl +0 -0
  59. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/generator.tl +0 -0
  60. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/if_expr.tl +0 -0
  61. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/imports.tl +0 -0
  62. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/imports2.tl +0 -0
  63. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/loops.tl +0 -0
  64. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/match.tl +0 -0
  65. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/nary-list.tl +0 -0
  66. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/precedence.tl +0 -0
  67. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/scopes.tl +0 -0
  68. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/semantic_whitespace.tl +0 -0
  69. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/short_circuit.tl +0 -0
  70. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/base/with.tl +0 -0
  71. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/async.tl +0 -0
  72. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/aug_assign.tl +0 -0
  73. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/coal.tl +0 -0
  74. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/env.tl +0 -0
  75. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/iterables.tl +0 -0
  76. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/list.tl +0 -0
  77. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/memo.tl +0 -0
  78. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/record.tl +0 -0
  79. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/result.tl +0 -0
  80. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/slice.tl +0 -0
  81. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/try.tl +0 -0
  82. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/prelude/virtual.tl +0 -0
  83. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/test_modules/module0.tl +0 -0
  84. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/test_modules/module1.tl +0 -0
  85. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/e2e/test_modules/module2.tl +0 -0
  86. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/fail-parse/arguments_mixed_defaults.tl +0 -0
  87. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/fail-parse/arguments_multiple_kwargs.tl +0 -0
  88. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/fail-parse/arguments_multiple_kwonly_markers.tl +0 -0
  89. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/fail-parse/arguments_multiple_posonly_markers.tl +0 -0
  90. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/fail-parse/arguments_multiple_varargs.tl +0 -0
  91. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/fail-parse/arguments_posonly_after_kwonly.tl +0 -0
  92. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/fail-parse/arguments_vararg_and_kwonly_marker.tl +0 -0
  93. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/fail-parse/unmatched_closing_delimiter.tl +0 -0
  94. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/parse/arith.tl +0 -0
  95. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/parse/assign.tl +0 -0
  96. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/parse/block-comments.tl +0 -0
  97. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/parse/deco.tl +0 -0
  98. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/parse/func.tl +0 -0
  99. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/parse/matches.tl +0 -0
  100. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/parse/mutual-recursion.tl +0 -0
  101. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/parse/numbers.tl +0 -0
  102. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/parse/operators.tl +0 -0
  103. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/test_e2e.py +0 -0
  104. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/test_iterable.tl +0 -0
  105. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/test_parse.py +0 -0
  106. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/test_parse_fail.py +0 -0
  107. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/test_re.tl +0 -0
  108. {koatl-0.3.17 → koatl-0.3.18}/koatl/tests/util/__init__.py +0 -0
  109. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/Cargo.toml +0 -0
  110. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/ast_builder.rs +0 -0
  111. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/lib.rs +0 -0
  112. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/main.rs +0 -0
  113. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/py/ast.rs +0 -0
  114. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/py/ast_builder.rs +0 -0
  115. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/py/emit.rs +0 -0
  116. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/py/mod.rs +0 -0
  117. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/types.rs +0 -0
  118. {koatl-0.3.17 → koatl-0.3.18}/koatl-core/src/util.rs +0 -0
  119. {koatl-0.3.17 → koatl-0.3.18}/koatl-parser/Cargo.toml +0 -0
  120. {koatl-0.3.17 → koatl-0.3.18}/koatl-parser/src/cst.rs +0 -0
  121. {koatl-0.3.17 → koatl-0.3.18}/koatl-parser/src/lexer.rs +0 -0
  122. {koatl-0.3.17 → koatl-0.3.18}/koatl-parser/src/lib.rs +0 -0
  123. {koatl-0.3.17 → koatl-0.3.18}/koatl-parser/src/parser.rs +0 -0
  124. {koatl-0.3.17 → koatl-0.3.18}/koatl-parser/src/simple_fmt.rs +0 -0
  125. {koatl-0.3.17 → koatl-0.3.18}/pyproject.toml +0 -0
  126. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/__init__.py +0 -0
  127. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/__main__.py +0 -0
  128. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/cli.py +0 -0
  129. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/notebook/__init__.py +0 -0
  130. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/notebook/magic.py +0 -0
  131. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/prelude/__init__.tl +0 -0
  132. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/runtime/__init__.py +0 -0
  133. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/runtime/meta_finder.py +0 -0
  134. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/runtime/record.py +0 -0
  135. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/runtime/vattr.py +0 -0
  136. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/__init__.tl +0 -0
  137. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/control/__init__.tl +0 -0
  138. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/control/async.tl +0 -0
  139. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/control/base.tl +0 -0
  140. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/control/do.tl +0 -0
  141. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/control/env.tl +0 -0
  142. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/control/memo.tl +0 -0
  143. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/control/result.tl +0 -0
  144. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/data/__init__.tl +0 -0
  145. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/data/list.tl +0 -0
  146. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/data/record.tl +0 -0
  147. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/ext.tl +0 -0
  148. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/io.tl +0 -0
  149. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/json.tl +0 -0
  150. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/lazy_module.tl +0 -0
  151. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/pickle.tl +0 -0
  152. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/re.tl +0 -0
  153. {koatl-0.3.17 → koatl-0.3.18}/python/koatl/std/trait.py +0 -0
@@ -190,7 +190,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
190
190
 
191
191
  [[package]]
192
192
  name = "koatl"
193
- version = "0.3.17"
193
+ version = "0.3.18"
194
194
  dependencies = [
195
195
  "ariadne",
196
196
  "koatl-core",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: koatl
3
- Version: 0.3.17
3
+ Version: 0.3.18
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "koatl"
3
- version = "0.3.17"
3
+ version = "0.3.18"
4
4
  edition = "2021"
5
5
  homepage = "https://koatl.org"
6
6
 
@@ -260,6 +260,12 @@ export Iterable = class(Traversable, Trait):
260
260
  list = self =>
261
261
  list(self.iter)
262
262
 
263
+ set = self =>
264
+ set(self.iter)
265
+
266
+ tuple = self =>
267
+ tuple(self.iter)
268
+
263
269
  dict = self =>
264
270
  dict(self.iter)
265
271
 
@@ -34,4 +34,8 @@ assert_eq(3 | f($), 6)
34
34
 
35
35
  assert_eq(3 | [$, 2, 3], [3, 2, 3])
36
36
  f = [$, 2, 3]
37
- assert_eq(f(3), [3, 2, 3])
37
+ assert_eq(f(3), [3, 2, 3])
38
+
39
+ # placeholder guard regression
40
+
41
+ assert_eq({}.($.__or__({1: 2}).__or__({3: 4})), {1: 2, 3: 4})
@@ -186,15 +186,16 @@ pub enum Expr<'a, TTree: Tree> {
186
186
  Call(TTree::Expr, Vec<CallItem<'a, TTree>>),
187
187
  Subscript(TTree::Expr, Vec<ListItem<TTree>>),
188
188
  RawAttribute(TTree::Expr, SIdent<'a>),
189
+ ScopedAttribute(TTree::Expr, TTree::Expr),
189
190
  Attribute(TTree::Expr, SIdent<'a>),
190
191
  MaybeAttribute(TTree::Expr, SIdent<'a>),
191
192
 
192
193
  MappedCall(TTree::Expr, Vec<CallItem<'a, TTree>>),
193
194
  MappedSubscript(TTree::Expr, Vec<ListItem<TTree>>),
194
195
  MappedRawAttribute(TTree::Expr, SIdent<'a>),
196
+ MappedScopedAttribute(TTree::Expr, TTree::Expr),
195
197
  MappedAttribute(TTree::Expr, SIdent<'a>),
196
198
  MappedMaybeAttribute(TTree::Expr, SIdent<'a>),
197
- CallNullable(TTree::Expr, TTree::Expr),
198
199
 
199
200
  Try(TTree::Expr, Vec<MatchCase<TTree>>, Option<TTree::Expr>),
200
201
  Checked(TTree::Expr, Option<TTree::Pattern>),
@@ -235,7 +235,7 @@ impl<'src, 'ast> SExprExt<'src, 'ast> for Indirect<SExpr<'src>> {
235
235
  expr.traverse(ctx);
236
236
  Type::Any
237
237
  }
238
- Expr::CallNullable(expr, func) => {
238
+ Expr::ScopedAttribute(expr, func) | Expr::MappedScopedAttribute(expr, func) => {
239
239
  expr.traverse(ctx);
240
240
  func.traverse(ctx);
241
241
  Type::Any
@@ -379,11 +379,9 @@ impl<'src, 'tok> Lift<Indirect<ast::SExpr<'src>>> for cst::SExpr<'src, 'tok> {
379
379
  ..
380
380
  } => {
381
381
  if question.is_some() {
382
- ast::Expr::CallNullable(expr.lift(), rhs.lift())
382
+ ast::Expr::MappedScopedAttribute(expr.lift(), rhs.lift())
383
383
  } else {
384
- let func = rhs.lift();
385
- let arg = ast::CallItem::Arg(expr.lift());
386
- ast::Expr::Call(func, vec![arg])
384
+ ast::Expr::ScopedAttribute(expr.lift(), rhs.lift())
387
385
  }
388
386
  }
389
387
  cst::Expr::Decorated {
@@ -1442,14 +1442,14 @@ impl<'src> SExprExt<'src> for Indirect<SExpr<'src>> {
1442
1442
 
1443
1443
  return traversed;
1444
1444
  }
1445
- Expr::Call(a, items) => {
1446
- Expr::Call(a.traverse_guarded(state), traverse_call_items(state, items))
1445
+ Expr::ScopedAttribute(expr, value) => {
1446
+ Expr::ScopedAttribute(expr.traverse(state), value.traverse_guarded(state))
1447
1447
  }
1448
- Expr::CallNullable(expr, value) => {
1448
+ Expr::MappedScopedAttribute(expr, value) => {
1449
1449
  let (rhs, fn_ctx) =
1450
1450
  with_phantom_fninfo(state, span, |state| value.traverse_guarded(state));
1451
1451
 
1452
- let traversed = Expr::CallNullable(expr.traverse(state), rhs)
1452
+ let traversed = Expr::MappedScopedAttribute(expr.traverse(state), rhs)
1453
1453
  .spanned(span)
1454
1454
  .indirect();
1455
1455
 
@@ -1459,6 +1459,9 @@ impl<'src> SExprExt<'src> for Indirect<SExpr<'src>> {
1459
1459
 
1460
1460
  return traversed;
1461
1461
  }
1462
+ Expr::Call(a, items) => {
1463
+ Expr::Call(a.traverse(state), traverse_call_items(state, items))
1464
+ }
1462
1465
  Expr::MappedCall(a, call_items) => {
1463
1466
  let (rhs, fn_ctx) = with_phantom_fninfo(state, span, |state| {
1464
1467
  traverse_call_items(state, call_items)
@@ -1425,11 +1425,13 @@ fn transform_postfix_expr<'src, 'ast>(
1425
1425
  Expr::RawAttribute(obj, _) => (false, obj),
1426
1426
  Expr::Subscript(obj, _) => (false, obj),
1427
1427
  Expr::Call(obj, _) => (false, obj),
1428
+ Expr::ScopedAttribute(obj, _) => (false, obj),
1428
1429
  Expr::Attribute(obj, _) => (false, obj),
1429
1430
  Expr::MaybeAttribute(obj, _) => (false, obj),
1430
1431
  Expr::MappedRawAttribute(obj, _) => (true, obj),
1431
1432
  Expr::MappedSubscript(obj, _) => (true, obj),
1432
1433
  Expr::MappedCall(obj, _) => (true, obj),
1434
+ Expr::MappedScopedAttribute(obj, _) => (true, obj),
1433
1435
  Expr::MappedAttribute(obj, _) => (true, obj),
1434
1436
  Expr::MappedMaybeAttribute(obj, _) => (true, obj),
1435
1437
  _ => {
@@ -1460,6 +1462,10 @@ fn transform_postfix_expr<'src, 'ast>(
1460
1462
  let t = inner_pre.bind(transform_subscript_items(ctx, &list, &expr.span)?);
1461
1463
  a.subscript(lhs, t, access_ctx)
1462
1464
  }
1465
+ Expr::ScopedAttribute(_, rhs) | Expr::MappedScopedAttribute(_, rhs) => {
1466
+ let t = inner_pre.bind(rhs.transform(ctx)?);
1467
+ a.call(t, vec![PyCallItem::Arg(lhs)])
1468
+ }
1463
1469
  Expr::RawAttribute(_, attr) | Expr::MappedRawAttribute(_, attr) => {
1464
1470
  a.attribute(lhs, attr.value.escape(), access_ctx)
1465
1471
  }
@@ -2025,30 +2031,14 @@ impl<'src, 'ast> SExprExt<'src, 'ast> for SExpr<'src> {
2025
2031
  | Expr::MappedCall(..)
2026
2032
  | Expr::Subscript(..)
2027
2033
  | Expr::MappedSubscript(..)
2034
+ | Expr::ScopedAttribute(..)
2035
+ | Expr::MappedScopedAttribute(..)
2028
2036
  | Expr::Attribute(..)
2029
2037
  | Expr::MappedAttribute(..)
2030
2038
  | Expr::MaybeAttribute(..)
2031
2039
  | Expr::MappedMaybeAttribute(..) => {
2032
2040
  pre.bind(transform_postfix_expr(ctx, self, access_ctx)?)
2033
2041
  }
2034
- Expr::CallNullable(obj, func) => {
2035
- let a = PyAstBuilder::new(span);
2036
- let obj_transformed = pre.bind(obj.transform(ctx)?);
2037
- let func_transformed = pre.bind(func.transform(ctx)?);
2038
-
2039
- let maparg = ctx.create_aux_var("maparg", span.start);
2040
-
2041
- a.call(
2042
- a.tl_builtin("op_map"),
2043
- vec![
2044
- a.call_arg(obj_transformed),
2045
- a.call_arg(a.lambda(
2046
- PyArgList::simple_args(vec![(maparg.clone().into(), None)]),
2047
- a.call(func_transformed, vec![a.call_arg(a.load_ident(maparg))]),
2048
- )),
2049
- ],
2050
- )
2051
- }
2052
2042
  Expr::With(pattern, value, body) => {
2053
2043
  let temp_var = ctx.create_aux_var("with", span.start);
2054
2044
  let value = pre.bind(value.transform(ctx)?);
@@ -260,6 +260,12 @@ export Iterable = class(Traversable, Trait):
260
260
  list = self =>
261
261
  list(self.iter)
262
262
 
263
+ set = self =>
264
+ set(self.iter)
265
+
266
+ tuple = self =>
267
+ tuple(self.iter)
268
+
263
269
  dict = self =>
264
270
  dict(self.iter)
265
271
 
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