coconut-develop 3.0.4.post0.dev15__tar.gz → 3.0.4.post0.dev17__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 (89) hide show
  1. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/PKG-INFO +2 -2
  2. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/compiler/grammar.py +3 -4
  3. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/compiler/util.py +5 -2
  4. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/constants.py +32 -39
  5. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/highlighter.py +2 -2
  6. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/root.py +1 -1
  7. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/agnostic/primary_2.coco +6 -0
  8. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/agnostic/suite.coco +2 -0
  9. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/target_3/py3_test.coco +3 -3
  10. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/extras.coco +0 -4
  11. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/CONTRIBUTING.md +0 -0
  12. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/DOCS.md +0 -0
  13. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/FAQ.md +0 -0
  14. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/HELP.md +0 -0
  15. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/LICENSE.txt +0 -0
  16. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/MANIFEST.in +0 -0
  17. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/README.rst +0 -0
  18. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/__coconut__/__init__.py +0 -0
  19. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/__coconut__/__init__.pyi +0 -0
  20. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/__coconut__/py.typed +0 -0
  21. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/_coconut/__init__.py +0 -0
  22. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/_coconut/__init__.pyi +0 -0
  23. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/_coconut/py.typed +0 -0
  24. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/__coconut__.py +0 -0
  25. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/__coconut__.pyi +0 -0
  26. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/__init__.py +0 -0
  27. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/__init__.pyi +0 -0
  28. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/__main__.py +0 -0
  29. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/_pyparsing.py +0 -0
  30. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/api.py +0 -0
  31. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/api.pyi +0 -0
  32. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/command/__init__.py +0 -0
  33. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/command/__init__.pyi +0 -0
  34. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/command/cli.py +0 -0
  35. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/command/command.py +0 -0
  36. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/command/command.pyi +0 -0
  37. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/command/mypy.py +0 -0
  38. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/command/resources/zcoconut.pth +0 -0
  39. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/command/util.py +0 -0
  40. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/command/watch.py +0 -0
  41. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/compiler/__init__.py +0 -0
  42. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/compiler/compiler.py +0 -0
  43. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/compiler/header.py +0 -0
  44. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/compiler/matching.py +0 -0
  45. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/compiler/templates/header.py_template +0 -0
  46. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/convenience.py +0 -0
  47. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/convenience.pyi +0 -0
  48. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/exceptions.py +0 -0
  49. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/icoconut/__init__.py +0 -0
  50. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/icoconut/__main__.py +0 -0
  51. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/icoconut/coconut/kernel.json +0 -0
  52. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/icoconut/coconut_py/kernel.json +0 -0
  53. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/icoconut/coconut_py2/kernel.json +0 -0
  54. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/icoconut/coconut_py3/kernel.json +0 -0
  55. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/icoconut/embed.py +0 -0
  56. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/icoconut/root.py +0 -0
  57. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/integrations.py +0 -0
  58. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/main.py +0 -0
  59. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/py.typed +0 -0
  60. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/requirements.py +0 -0
  61. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/terminal.py +0 -0
  62. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/__init__.py +0 -0
  63. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/__main__.py +0 -0
  64. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/constants_test.py +0 -0
  65. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/main_test.py +0 -0
  66. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/agnostic/__init__.coco +0 -0
  67. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/agnostic/__main__.coco +0 -0
  68. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/agnostic/main.coco +0 -0
  69. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/agnostic/primary_1.coco +0 -0
  70. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/agnostic/specific.coco +0 -0
  71. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/agnostic/tutorial.coco +0 -0
  72. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/agnostic/util.coco +0 -0
  73. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/non_strict/non_strict_test.coco +0 -0
  74. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/target_2/py2_test.coco +0 -0
  75. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/target_311/py311_test.coco +0 -0
  76. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/target_35/py35_test.coco +0 -0
  77. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/target_36/py36_test.coco +0 -0
  78. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/target_38/py38_test.coco +0 -0
  79. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/cocotest/target_sys/target_sys_test.coco +0 -0
  80. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/importable.coco +0 -0
  81. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/runnable.coco +0 -0
  82. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/tests/src/runner.coco +0 -0
  83. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut/util.py +0 -0
  84. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/coconut_develop.egg-info/SOURCES.txt +0 -0
  85. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/conf.py +0 -0
  86. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/pyproject.toml +0 -0
  87. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/setup.cfg +0 -0
  88. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/setup.py +0 -0
  89. {coconut-develop-3.0.4.post0.dev15 → coconut-develop-3.0.4.post0.dev17}/xontrib/coconut.py +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: coconut-develop
3
- Version: 3.0.4.post0.dev15
3
+ Version: 3.0.4.post0.dev17
4
4
  Summary: Simple, elegant, Pythonic functional programming.
5
5
  Home-page: http://coconut-lang.org
6
6
  Author: Evan Hubinger
7
7
  Author-email: evanjhub@gmail.com
8
8
  License: Apache 2.0
9
- Keywords: functional,programming,language,compiler,pattern,pattern-matching,algebraic,data type,data types,lambda,lambdas,lazy,evaluation,lazy list,lazy lists,tail,recursion,call,recursive,recursive_iterator,infix,function,composition,compose,partial,application,currying,curry,pipeline,pipe,unicode,operator,operators,frozenset,literal,syntax,destructuring,assignment,fold,datamaker,prepattern,iterator,generator,none,coalesce,coalescing,statement,lru_cache,memoization,backport,typing,embed,PEP 622,overrides,islice,itertools,functools,TYPE_CHECKING,Expected,breakpoint,help,reduce,takewhile,dropwhile,tee,count,makedata,consume,process_map,thread_map,addpattern,recursive_generator,fmap,starmap,reiterable,scan,groupsof,memoize,zip_longest,override,flatten,ident,call,safe_call,flip,const,lift,lift_apart,all_equal,collectby,mapreduce,multi_enumerate,cartesian_product,multiset,cycle,windowsof,and_then,and_then_await,async_map,py_chr,py_dict,py_hex,py_input,py_int,py_map,py_object,py_oct,py_open,py_print,py_range,py_str,py_super,py_zip,py_filter,py_reversed,py_enumerate,py_raw_input,py_xrange,py_repr,py_breakpoint,_namedtuple_of,reveal_type,reveal_locals,MatchError,ExceptionGroup,BaseExceptionGroup,__fmap__,__iter_getitem__,data,match,case,cases,where,addpattern,then,operator,type,copyclosure,λ
9
+ Keywords: functional,programming,language,compiler,pattern,pattern-matching,algebraic,data type,data types,lambda,lambdas,lazy,evaluation,lazy list,lazy lists,tail,recursion,call,recursive,recursive_iterator,infix,function,composition,compose,partial,application,currying,curry,pipeline,pipe,unicode,operator,operators,frozenset,literal,syntax,destructuring,assignment,fold,datamaker,prepattern,iterator,generator,none,coalesce,coalescing,statement,lru_cache,memoization,backport,typing,embed,PEP 622,overrides,islice,itertools,functools,TYPE_CHECKING,Expected,breakpoint,help,reduce,takewhile,dropwhile,tee,count,makedata,consume,process_map,thread_map,addpattern,recursive_generator,fmap,starmap,reiterable,scan,groupsof,memoize,zip_longest,override,flatten,ident,call,safe_call,flip,const,lift,lift_apart,all_equal,collectby,mapreduce,multi_enumerate,cartesian_product,multiset,cycle,windowsof,and_then,and_then_await,async_map,py_chr,py_dict,py_hex,py_input,py_int,py_map,py_object,py_oct,py_open,py_print,py_range,py_str,py_super,py_zip,py_filter,py_reversed,py_enumerate,py_raw_input,py_xrange,py_repr,py_breakpoint,_namedtuple_of,reveal_type,reveal_locals,MatchError,__fmap__,__iter_getitem__,data,match,case,cases,where,addpattern,then,operator,type,copyclosure,λ
10
10
  Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: License :: OSI Approved :: Apache Software License
12
12
  Classifier: Intended Audience :: Developers
@@ -673,9 +673,9 @@ class Grammar(object):
673
673
  pipe = Literal("|>") | fixto(Literal("\u21a6"), "|>")
674
674
  star_pipe = Literal("|*>") | fixto(Literal("*\u21a6"), "|*>")
675
675
  dubstar_pipe = Literal("|**>") | fixto(Literal("**\u21a6"), "|**>")
676
- back_pipe = Literal("<|") | fixto(Literal("\u21a4"), "<|")
677
- back_star_pipe = Literal("<*|") | ~Literal("\u21a4**") + fixto(Literal("\u21a4*"), "<*|")
678
- back_dubstar_pipe = Literal("<**|") | fixto(Literal("\u21a4**"), "<**|")
676
+ back_pipe = Literal("<|") | disambiguate_literal("\u21a4", ["\u21a4*", "\u21a4?"], fixesto="<|")
677
+ back_star_pipe = Literal("<*|") | disambiguate_literal("\u21a4*", ["\u21a4**", "\u21a4*?"], fixesto="<*|")
678
+ back_dubstar_pipe = Literal("<**|") | disambiguate_literal("\u21a4**", ["\u21a4**?"], fixesto="<**|")
679
679
  none_pipe = Literal("|?>") | fixto(Literal("?\u21a6"), "|?>")
680
680
  none_star_pipe = (
681
681
  Literal("|?*>")
@@ -1443,7 +1443,6 @@ class Grammar(object):
1443
1443
  ) + Optional(power_in_impl_call))
1444
1444
  impl_call_item = condense(
1445
1445
  disallow_keywords(reserved_vars)
1446
- + ~any_string
1447
1446
  + ~non_decimal_num
1448
1447
  + atom_item
1449
1448
  + Optional(power_in_impl_call)
@@ -1454,12 +1454,15 @@ def disallow_keywords(kwds, with_suffix=""):
1454
1454
  return regex_item(r"(?!" + "|".join(to_disallow) + r")").suppress()
1455
1455
 
1456
1456
 
1457
- def disambiguate_literal(literal, not_literals):
1457
+ def disambiguate_literal(literal, not_literals, fixesto=None):
1458
1458
  """Get an item that matchesl literal and not any of not_literals."""
1459
- return regex_item(
1459
+ item = regex_item(
1460
1460
  r"(?!" + "|".join(re.escape(s) for s in not_literals) + ")"
1461
1461
  + re.escape(literal)
1462
1462
  )
1463
+ if fixesto is not None:
1464
+ item = fixto(item, fixesto)
1465
+ return item
1463
1466
 
1464
1467
 
1465
1468
  def any_keyword_in(kwds):
@@ -576,45 +576,34 @@ self_match_types = (
576
576
  )
577
577
 
578
578
  python_builtins = (
579
- '__import__', 'abs', 'all', 'any', 'bin', 'bool', 'bytearray',
580
- 'breakpoint', 'bytes', 'chr', 'classmethod', 'compile', 'complex',
581
- 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'filter',
582
- 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr',
583
- 'hash', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass',
584
- 'iter', 'len', 'list', 'locals', 'map', 'max', 'memoryview',
585
- 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print',
586
- 'property', 'range', 'repr', 'reversed', 'round', 'set', 'setattr',
587
- 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple',
588
- 'type', 'vars', 'zip',
589
- 'Ellipsis', 'NotImplemented',
590
- 'ArithmeticError', 'AssertionError', 'AttributeError',
591
- 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning',
592
- 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError',
593
- 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError',
594
- 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError',
595
- 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError',
596
- 'NotImplementedError', 'OSError', 'OverflowError',
597
- 'PendingDeprecationWarning', 'ReferenceError', 'ResourceWarning',
598
- 'RuntimeError', 'RuntimeWarning', 'StopIteration',
599
- 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit',
600
- 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
601
- 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
602
- 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError',
603
- 'Warning', 'WindowsError', 'ZeroDivisionError',
579
+ "abs", "aiter", "all", "anext", "any", "ascii",
580
+ "bin", "bool", "breakpoint", "bytearray", "bytes",
581
+ "callable", "chr", "classmethod", "compile", "complex",
582
+ "delattr", "dict", "dir", "divmod",
583
+ "enumerate", "eval", "exec",
584
+ "filter", "float", "format", "frozenset",
585
+ "getattr", "globals",
586
+ "hasattr", "hash", "help", "hex",
587
+ "id", "input", "int", "isinstance", "issubclass", "iter",
588
+ "len", "list", "locals",
589
+ "map", "max", "memoryview", "min",
590
+ "next",
591
+ "object", "oct", "open", "ord",
592
+ "pow", "print", "property",
593
+ "range", "repr", "reversed", "round",
594
+ "set", "setattr", "slice", "sorted", "staticmethod", "str", "sum", "super",
595
+ "tuple", "type",
596
+ "vars",
597
+ "zip",
598
+ "__import__",
604
599
  '__name__',
605
600
  '__file__',
606
601
  '__annotations__',
607
602
  '__debug__',
608
- # we treat these as coconut_exceptions so the highlighter will always know about them:
609
- # 'ExceptionGroup', 'BaseExceptionGroup',
610
- # don't include builtins that aren't always made available by Coconut:
611
- # 'BlockingIOError', 'ChildProcessError', 'ConnectionError',
612
- # 'BrokenPipeError', 'ConnectionAbortedError', 'ConnectionRefusedError',
613
- # 'ConnectionResetError', 'FileExistsError', 'FileNotFoundError',
614
- # 'InterruptedError', 'IsADirectoryError', 'NotADirectoryError',
615
- # 'PermissionError', 'ProcessLookupError', 'TimeoutError',
616
- # 'StopAsyncIteration', 'ModuleNotFoundError', 'RecursionError',
617
- # 'EncodingWarning',
603
+ )
604
+
605
+ python_exceptions = (
606
+ "BaseException", "BaseExceptionGroup", "GeneratorExit", "KeyboardInterrupt", "SystemExit", "Exception", "ArithmeticError", "FloatingPointError", "OverflowError", "ZeroDivisionError", "AssertionError", "AttributeError", "BufferError", "EOFError", "ExceptionGroup", "BaseExceptionGroup", "ImportError", "ModuleNotFoundError", "LookupError", "IndexError", "KeyError", "MemoryError", "NameError", "UnboundLocalError", "OSError", "BlockingIOError", "ChildProcessError", "ConnectionError", "BrokenPipeError", "ConnectionAbortedError", "ConnectionRefusedError", "ConnectionResetError", "FileExistsError", "FileNotFoundError", "InterruptedError", "IsADirectoryError", "NotADirectoryError", "PermissionError", "ProcessLookupError", "TimeoutError", "ReferenceError", "RuntimeError", "NotImplementedError", "RecursionError", "StopAsyncIteration", "StopIteration", "SyntaxError", "IndentationError", "TabError", "SystemError", "TypeError", "ValueError", "UnicodeError", "UnicodeDecodeError", "UnicodeEncodeError", "UnicodeTranslateError", "Warning", "BytesWarning", "DeprecationWarning", "EncodingWarning", "FutureWarning", "ImportWarning", "PendingDeprecationWarning", "ResourceWarning", "RuntimeWarning", "SyntaxWarning", "UnicodeWarning", "UserWarning",
618
607
  )
619
608
 
620
609
  # -----------------------------------------------------------------------------------------------------------------------
@@ -842,12 +831,16 @@ must_use_specific_target_builtins = (
842
831
 
843
832
  coconut_exceptions = (
844
833
  "MatchError",
845
- "ExceptionGroup",
846
- "BaseExceptionGroup",
847
834
  )
848
835
 
849
- highlight_builtins = coconut_specific_builtins + interp_only_builtins
850
- all_builtins = frozenset(python_builtins + coconut_specific_builtins + coconut_exceptions)
836
+ highlight_builtins = coconut_specific_builtins + interp_only_builtins + python_builtins
837
+ highlight_exceptions = coconut_exceptions + python_exceptions
838
+ all_builtins = frozenset(
839
+ python_builtins
840
+ + python_exceptions
841
+ + coconut_specific_builtins
842
+ + coconut_exceptions
843
+ )
851
844
 
852
845
  magic_methods = (
853
846
  "__fmap__",
@@ -36,7 +36,7 @@ from coconut.constants import (
36
36
  shebang_regex,
37
37
  magic_methods,
38
38
  template_ext,
39
- coconut_exceptions,
39
+ highlight_exceptions,
40
40
  main_prompt,
41
41
  style_env_var,
42
42
  default_style,
@@ -100,7 +100,7 @@ class CoconutLexer(Python3Lexer):
100
100
  ]
101
101
  tokens["builtins"] += [
102
102
  (words(highlight_builtins, suffix=r"\b"), Name.Builtin),
103
- (words(coconut_exceptions, suffix=r"\b"), Name.Exception),
103
+ (words(highlight_exceptions, suffix=r"\b"), Name.Exception),
104
104
  ]
105
105
  tokens["numbers"] = [
106
106
  (r"0b[01_]+", Number.Integer),
@@ -26,7 +26,7 @@ import sys as _coconut_sys
26
26
  VERSION = "3.0.4"
27
27
  VERSION_NAME = None
28
28
  # False for release, int >= 1 for develop
29
- DEVELOP = 15
29
+ DEVELOP = 17
30
30
  ALPHA = False # for pre releases rather than post releases
31
31
 
32
32
  assert DEVELOP is False or DEVELOP >= 1, "DEVELOP must be False or an int >= 1"
@@ -428,6 +428,12 @@ def primary_test_2() -> bool:
428
428
  if"0":assert True
429
429
  if"0":
430
430
  assert True
431
+ b = "b"
432
+ assert "abc".find b == 1
433
+ assert_raises(-> "a" 10, TypeError)
434
+ assert (,) ↤* (1, 2, 3) == (1, 2, 3)
435
+ assert (,) ↤? None is None
436
+ assert (,) ↤*? None is None # type: ignore
431
437
 
432
438
  with process_map.multiple_sequential_calls(): # type: ignore
433
439
  assert map((+), range(3), range(4)$[:-1], strict=True) |> list == [0, 2, 4] == process_map((+), range(3), range(4)$[:-1], strict=True) |> list # type: ignore
@@ -1077,6 +1077,8 @@ forward 2""") == 900
1077
1077
  assert pickle_round_trip(.method(x=10)) <| (method=x -> x) == 10
1078
1078
  assert sq_and_t2p1(10) == (100, 21)
1079
1079
  assert first_false_and_last_true([3, 2, 1, 0, "11", "1", ""]) == (0, "1")
1080
+ assert ret_args_kwargs ↤** dict(a=1) == ((), dict(a=1))
1081
+ assert ret_args_kwargs ↤**? None is None
1080
1082
 
1081
1083
  with process_map.multiple_sequential_calls(): # type: ignore
1082
1084
  assert process_map(tuple <.. (|>)$(to_sort), qsorts) |> list == [to_sort |> sorted |> tuple] * len(qsorts)
@@ -27,14 +27,14 @@ def py3_test() -> bool:
27
27
  čeština = "czech"
28
28
  assert čeština == "czech"
29
29
  class HasExecMethod:
30
- def exec(self, x) = x()
30
+ def \exec(self, x) = x()
31
31
  has_exec = HasExecMethod()
32
32
  assert hasattr(has_exec, "exec")
33
33
  assert has_exec.exec(-> 1) == 1
34
34
  def exec_rebind_test():
35
- exec = 1
35
+ \exec = 1
36
36
  assert exec + 1 == 2
37
- def exec(x) = x
37
+ def \exec(x) = x
38
38
  assert exec(1) == 1
39
39
  return True
40
40
  assert exec_rebind_test() is True
@@ -243,10 +243,6 @@ def f() =
243
243
  "\n ^",
244
244
  "\n \\~~~~~^",
245
245
  ))
246
- assert_raises(-> parse('"a" 10'), CoconutParseError, err_has=(
247
- "\n ^",
248
- "\n \\~~~^",
249
- ))
250
246
  assert_raises(-> parse("A. ."), CoconutParseError, err_has=(
251
247
  "\n \\~^",
252
248
  "\n \\~~^",