Commit Graph

965 Commits

Author SHA1 Message Date
Simon Gomizelj c663d38e33 Add metaclass support, support PEP 3115 and PEP 487 2018-03-22 13:28:22 -07:00
Simon Gomizelj 75af667fa1 Fix test_hy2py not respecting 'only_py36' 2018-03-22 13:27:56 -07:00
Tuukka Turto cb72a8c155
Merge pull request #1530 from vodik/pytest-cleanups
Use pytest.raises for asserting compiler exceptions
2018-03-15 08:14:09 +02:00
Kodi Arfer 3c97d2982c Use `*1` instead of `_` for REPL history
`_`, as a variable, is now the shadow subtraction operator.
2018-03-13 14:56:47 -04:00
Kodi Arfer 85968e70dd Add `mangle` and `unmangle` as core functions 2018-03-13 14:55:55 -04:00
Kodi Arfer ebc9bda7ee Remove an obsolete test 2018-03-13 14:55:55 -04:00
Kodi Arfer 0c8c5dc830 Mangle special forms 2018-03-13 14:55:55 -04:00
Kodi Arfer ccb3ba6092 Mangle macro names 2018-03-13 14:55:55 -04:00
Kodi Arfer 0c816f2e83 Mangle keyword arguments 2018-03-13 14:55:55 -04:00
Kodi Arfer d252bb0e94 Mangle names that coincide with Python keywords 2018-03-13 14:55:55 -04:00
Kodi Arfer 52edad28e2 Overhaul mangling rules 2018-03-13 14:55:53 -04:00
Kodi Arfer d501d4d806 Mangle symbols at compile-time instead of parse-time
This means that a HySymbol remembers its original name. That is, `a-b` and `a_b` are different symbols although `(setv a-b 1)` and `(setv a_b 1)` set the same variable (namely, `a_b`).

Most of the edits in this commit are to switch underscores to hyphens in places where mangling hasn't happened yet.

I removed some lexer tests since the lexer no longer does any mangling.
2018-03-13 14:55:15 -04:00
Kodi Arfer 7fcc7ac4b6 Make unary comparison ops evaluate their argument 2018-03-13 14:38:36 -04:00
Kodi Arfer 9f0911161d Fix tests with `=`-and-parentheses errors 2018-03-13 14:38:36 -04:00
Simon Gomizelj e3f4fc8481 Use pytest.raises for asserting compiler exceptions 2018-03-12 01:44:57 -04:00
Kodi Arfer 0574e275b5 Make hy-repr support some `collections` classes 2018-03-10 18:11:07 -08:00
Kodi Arfer 38f461890d Make hy-repr support DateTime objects 2018-03-10 18:11:07 -08:00
Kodi Arfer 3dbe05302e Make hy-repr support regex match objects 2018-03-10 18:11:07 -08:00
Kodi Arfer f7ab9a6e7c Make hy-repr support dictionary views 2018-03-10 18:11:07 -08:00
Kodi Arfer 90a09b5b44 Make hy-repr use double spaces for dictionaries 2018-03-10 18:11:07 -08:00
Kodi Arfer 199bb70150 Add a hy-repr test for keyword-like bytes objects 2018-03-10 18:11:07 -08:00
Kodi Arfer 4f2706e18e Test a case where hy-repr shouldn't round-trip 2018-03-10 18:11:07 -08:00
Kodi Arfer 83c4f63bc2 Reimplement hy-repr with registered functions
This removes a lot of hy-reprs that were hard-coded into the hy-repr function itself. It also allows you to add a hy-repr for an existing class without monkey-patching the class.
2018-03-10 18:11:07 -08:00
Simon Gomizelj db58dacce6 Fix invalid escape sequence \s in test_escapes 2018-02-14 16:05:31 -05:00
Simon Gomizelj 316220b742 Fix AST generation of a naked return 2018-02-14 16:05:31 -05:00
Simon Gomizelj 7b87d42221 Properly teardown subprocesses when testing 2018-02-14 15:38:47 -05:00
Simon Gomizelj 5c40f793a1 Support PEP 328
Add support for proper relative imports
2018-02-06 23:41:12 -05:00
Tuukka Turto 5c720c0110
Merge pull request #1473 from Kodiologist/new-year-2018
Update copyright years
2018-02-05 15:11:59 +02:00
Tuukka Turto cf87de5cc2
Merge pull request #1483 from vodik/remove-def
Just remove `def`
2018-01-31 08:54:59 +02:00
Simon Gomizelj 0cd4df3898 Remove def and standardize on setv 2018-01-21 00:25:33 -05:00
Tuukka Turto a9621817f9
Merge pull request #1433 from Kodiologist/while-multistatement
Handle statements in the condition of `while`
2018-01-11 07:45:27 +02:00
Kodi Arfer 64cf7c7437
Merge pull request #1456 from Kodiologist/big-floats
Don't parse large floats as symbols
2018-01-11 00:44:50 -05:00
Kodi Arfer 6de7ddfee5 Update copyright years 2018-01-01 10:38:33 -05:00
Simon Gomizelj f69ccd2421 Allow coroutines to be decorated 2017-12-31 09:03:39 -05:00
Simon Gomizelj 1e4ad3167b Introduce for/a* and for/a expressions 2017-12-30 19:02:15 -05:00
Simon Gomizelj 783d53ecb7 Introduce with/a* and with/a expressions 2017-12-30 19:02:15 -05:00
Simon Gomizelj 2ffaa8e5be Fix yield-from to prevent it from accepting no arguments
Closes #1472
2017-12-30 19:02:15 -05:00
Simon Gomizelj e3e01d4405 Introduce fn/a and defn/a
Closes #1054
2017-12-30 19:02:15 -05:00
Rob Day eda78eb81c Allow multiple expressions in a try 2017-12-03 09:47:41 +00:00
Kodi Arfer a26480a81b Don't parse large floats as symbols 2017-11-11 15:14:28 -08:00
Kodi Arfer fd64575799 Handle statements in the condition of `while` 2017-11-02 07:31:58 -07:00
Ryan Gonzalez e0e664c030
Merge branch 'master' into letmacro 2017-11-01 09:39:18 -05:00
gilch 8f2e80d12e add newlines in disassemble tests for astor 0.6 2017-10-31 21:46:44 -06:00
gilch 6bb997dbea update astor to 0.6 2017-10-31 14:13:41 -06:00
gilch e90f082baf back `let` with dict for better defclass behavior 2017-10-30 20:23:57 -06:00
Tuukka Turto fac87c99d0
Merge pull request #1444 from gilch/xi-tag
change xi macro to #% tag macro
2017-10-29 21:34:56 +02:00
Tuukka Turto 268463c68d
Merge pull request #1432 from Kodiologist/else-detection
Don't treat [else…] or ("else"…) as else clauses
2017-10-29 21:21:32 +02:00
gilch 497e929913 generalize #% to arbitrary expressions 2017-10-26 14:23:25 -06:00
gilch b5f1136ba5 %* %** parameters for #% tag macro 2017-10-26 13:03:01 -06:00
gilch f81fb771eb change xi macro to #% tag macro 2017-10-26 12:55:48 -06:00
gilch 2319adcc7f fix whitespace in anaphoric 2017-10-26 12:53:08 -06:00
gilch c4b3d7bcda fix gensym format to start with _ for import * 2017-09-23 23:41:37 -06:00
gilch a54f6aa38b add hidden &name parameter to macros
The module name allows macros to preexpand their body in the proper
context.
2017-09-23 14:59:43 -06:00
gilch 5bbf4d9894 fix premature binding in `let` 2017-09-22 20:07:48 -06:00
Kodi Arfer 1e456c6ced Don't treat [else…] or ("else"…) as else clauses 2017-09-20 16:34:56 -07:00
Kodi Arfer f8fbcf3f06 Spacing fix in test 2017-09-20 16:31:55 -07:00
Kodi Arfer 39785b4657 Fix a crash in HyTypeError.__str__ 2017-09-20 10:40:52 -07:00
gilch 20b4342d40 support (global) in `let` 2017-09-18 14:54:08 -06:00
gilch ba898aa8d8 support (nonlocal) in `let` 2017-09-18 13:51:32 -06:00
gilch 34038ff433 implement `let` 2017-09-18 12:21:42 -06:00
Ryan Gonzalez db210929d0 Merge pull request #1360 from gilch/model-repr
proper reprs for Hy models
2017-09-18 08:45:28 -05:00
gilch d38956fb9e remove trailing commas in HyDict reprs 2017-09-18 01:03:00 -06:00
Rob Day 907e72681f Let argument destructuring work with docstrings 2017-09-17 21:06:45 +01:00
Rob Day 5a6488e353 Treat _42 etc. as a variable name, not an integer 2017-09-16 16:12:29 -07:00
gilch e43d6f5e2f Merge pull request #1419 from rkday/else_multiple_statements
Allow multiple statements in the else branch of for
2017-09-16 14:10:28 -06:00
Rob Day be35b09e5d Allow multiple statements in the else branch of a for loop 2017-09-16 20:41:22 +01:00
Ryan Gonzalez 3f69ed8e8e Merge pull request #1399 from Kodiologist/compiler-refactor 2017-09-15 14:44:32 -05:00
Ryan Gonzalez 44e5ded522 Merge pull request #1379 from Kodiologist/lua-str-literal
Add #[DELIM[ … ]DELIM] syntax for string literals
2017-09-15 14:36:08 -05:00
Rob Day 567fa14f1d Allow else after a while loop 2017-09-14 20:55:29 +01:00
Kodi Arfer cf7ff802c9 Make hy.compiler.builds more flexible
I removed the "Hypster" error message and the test for it because it can only catch compiler bugs that should themselves be caught by Hy's tests.
2017-09-13 13:30:59 -07:00
Kodi Arfer 277469dfe1 Add xfail test of #1390 (statements in `assert`) 2017-09-13 13:30:54 -07:00
Kodi Arfer deb801edab Preserve .brackets in quoted HyStrings 2017-09-08 11:27:34 -07:00
Kodi Arfer eb23ddc1e2 Add #[DELIM[ … ]DELIM] syntax for string literals 2017-09-08 11:27:34 -07:00
gilch b23f6e5b59 test hy model reprs 2017-09-08 10:54:24 -07:00
gilch 50c21ca38c disable Popen shell option in test_bin.py
Fix failing tests from #1289 caused by bad quoting for Windows shell
Improve test_bin_hy_builtins and warn that it fails from IPython.
2017-09-05 13:35:22 -06:00
Kodi Arfer e3e7fa8ce6 Catch exceptions raised by HyREPL.output_fn 2017-08-29 14:54:26 -07:00
Kodi Arfer 0fc96306bc Drop support for Python 3.3 2017-08-26 13:36:51 -07:00
Kodi Arfer 7ed31a18f3 Forbid arguments to `break` and `continue` 2017-08-26 11:37:15 -07:00
Kodi Arfer 8b677bb20c Un-xfail a passing test of `macroexpand`
It seems that #1374 (1faee7ac39) fixed this bug.
2017-08-25 15:25:06 -07:00
Kodi Arfer 2bbf886ceb Make `assoc` a macro instead of a special form
The new macro evaluates its lvalue only once.
2017-08-25 11:41:28 -07:00
Ryan Gonzalez dea99c8b76 Merge pull request #1354 from gilch/comment-discard
add #_ discard syntax
2017-08-19 11:29:57 -05:00
Kodi Arfer 8d40a68232 Initialize the return variable of `with` 2017-08-19 07:35:41 -07:00
Kodi Arfer f5ee5f4ee5 Whitespace fix 2017-08-19 07:25:00 -07:00
Kodi Arfer 21ea36f277 Add `return` as a special form 2017-08-11 13:56:44 -07:00
David Schaefer 969fa8d533 Fixes #1350: try form in defmacro 2017-08-11 01:21:01 +02:00
David Schaefer 274f5e9002 Fix copy behaviour of HyComplex 2017-08-09 23:30:16 +02:00
Jordan Danford c67b8bccb9 Expose `read`, `read_str`, and `eval` in Python
- Expose `read`, `read_str`, and `eval` in Python
- Add string evaluation example to interop section of docs
- Add test for `eval`
- Explain `eof` keyword argument in `read` docstring
2017-08-05 17:29:15 -07:00
gilch 0f81369deb tests for #_ and (comment ...) 2017-08-04 14:35:11 -06:00
David Schaefer 432d560310 No TypeError from multi-arity defn returning None 2017-08-04 17:08:41 +02:00
Kodi Arfer e8ffd41202 Merge pull request #1349 from woodrush/fix-unquote-splice-none
Allow `unquote-splice` to accept any false value as empty
2017-08-02 19:50:47 -04:00
Kodi Arfer ecc974de1e Implement Python 2 `exec`
The implementation of `hy.core.language.exec` draws code from the `exec_` function in commit f574c7be6ebc80041ef58ca29588f310248ebed4 of the library Six, which is copyright 2010–2017 Benjamin Peterson and licensed under the Expat license.
2017-08-02 13:33:59 -04:00
Hikaru Ikuta a0224ef8bd Allow `unquote-splice` to accept any false value as empty 2017-08-02 00:50:37 +09:00
Kodi Arfer 67a4815024 Shadow `get` (#1344) 2017-07-26 21:10:54 -05:00
Kodi Arfer 28ce83524b Don't try to lex tag-macro calls as shebangs 2017-07-23 11:43:19 -07:00
Kodi Arfer 0bbb5f8e34 hy-repr: Support #* and #** 2017-07-19 10:25:24 -07:00
Kodi Arfer 97ecb0b553 Remove `apply` from tests 2017-07-17 13:34:42 -07:00
Kodi Arfer 2d863abc85 Implement #* and #** unpacking 2017-07-17 13:34:39 -07:00
Kodi Arfer 801836f6c2 Remove the Python 2 yield-from macro
I moved the yield-from tests from native_macros to py3_only_tests.
2017-07-13 08:46:41 -07:00
gilch 7d8ffc0181 Merge pull request #1322 from kirbyfan64/new-rply
Update rply to 0.7.5
2017-07-12 17:51:44 -06:00
Kodi Arfer 33052f4180 Test compiling a lot of comment lines 2017-07-12 14:07:42 -07:00
Kodi Arfer b7657e8fa3 Require HySymbols instead of HyStrings more often 2017-07-12 10:57:35 -07:00
Kodi Arfer 5a1e6a7c6a hy-repr: Support NaN and Inf 2017-07-10 08:50:49 -07:00
Kodi Arfer bb91b57dca Require capitalizing NaN and Inf like so 2017-07-10 08:50:49 -07:00
Kodi Arfer a746ccb42c Refactor test_lex_expression_complex 2017-07-10 08:50:45 -07:00
Kodi Arfer 55986b2033 Auto-promote values to HyObjects in the compiler 2017-07-03 17:01:12 -07:00
Kodi Arfer 4be37b358b Make lists no longer magical for the compiler 2017-07-03 17:01:12 -07:00
Kodi Arfer ca95194240 Change `eval` from a special form to a function 2017-06-27 08:14:29 -06:00
Kodi Arfer f2278cf2f0 Support PYTHONDONTWRITEBYTECODE 2017-06-26 19:00:08 -06:00
Kodi Arfer 399e7628b4 Parametrize test_bin_hy_byte_compile 2017-06-26 18:58:51 -06:00
gilch 672c8a1637 Merge pull request #1307 from hylang/windows-tests
Use universal newlines in test_bin.py
2017-06-26 14:27:16 -06:00
Kodi Arfer 26d1b3f72e Don't parse 5.attr or :foo.attr as symbols 2017-06-23 08:30:37 -07:00
Kodi Arfer c8736ebd0c Use pytest.raises in test_lex 2017-06-23 08:29:55 -07:00
gilch b7a0c2abf0 add tag macro tests 2017-06-22 22:49:00 -06:00
gilch 6cd3201421 rename sharp macros to tag macros 2017-06-22 22:48:46 -06:00
gilch aa08149712 Use universal newlines in test_bin.py
Change run_cmd() implementation in test_bin.py to use universal newlines (text mode) for Windows compatibility.
2017-06-18 16:05:44 -06:00
neil-lindquist d3df17d9d8 Modify cond to support single argument branches 2017-06-10 08:30:53 -07:00
Kodi Arfer 5bf9ecfc5a Forbid (try) and (try BODY) 2017-05-25 20:48:09 -05:00
Kodi Arfer dffa2811e6 Return from the `else` clause of a `try` form
I overhauled the documentation of `try` while I was editing it.
2017-05-25 20:48:09 -05:00
Kodi Arfer 81d89c9d12 Enforce the standard order of `try` elements 2017-05-25 20:48:09 -05:00
Kodi Arfer 2eb81864df Make all files comply with license-header policy 2017-04-27 14:16:57 -07:00
Kodi Arfer eeb0be8fb0 Add some xfail tests for known bugs 2017-04-26 14:00:39 -07:00
Kodi Arfer d3fa375052 Migrate from Nose to pytest 2017-04-26 14:00:11 -07:00
Kodi Arfer d085fba5fe Move a quoting test to get rid of a directory 2017-04-26 13:58:09 -07:00
Kodi Arfer 8afd13cb16 Use test functions instead of unittest.TestCase 2017-04-26 13:58:09 -07:00
Kodi Arfer 55c205f87e Test `take` and `drop` only in native_tests.core 2017-04-26 13:58:09 -07:00
Kodi Arfer 07e9284100 Correct import syntax in a test 2017-04-25 09:30:13 -07:00
Kodi Arfer a27d737e1c Drop support for Pythons 3 older than 3.3 2017-04-24 14:22:13 -07:00
Kodi Arfer 4c38e2c9dd Rename reader macros to "sharp macros" (#1282)
They're not actually reader macros, since their arguments are parsed s-expressions, like a regular macro, not pre-parsed source text.
2017-04-21 10:07:48 -05:00
Kodi Arfer ad94343e4a Merge pull request #1269 from Kodiologist/bytecode
Automatically read and write bytecode
2017-04-14 13:52:07 -07:00
Kodi Arfer 2b11b9be20 Automatically read and write bytecode
Importing or executing a Hy file now loads the byte-compiled version if it exists and is up to date, and if not, the source is byte-compiled after it's parsed.

This change can speed up Hy a lot. Here are some examples comparing run times of the current master (491b474e) to this commit, on my laptop with Python 3.6:

- `nosetests --exclude='test_bin'` goes from 3.8 s to 0.7 s (a 5-fold speedup)
- `hy -c '(print "hello world")` goes from 0.47 s to 0.20 s (a 2-fold speedup)
- Rogue TV's startup goes from 3.6 s to 0.4 s (a 9-fold speedup)

Accompanying changes include:

- `setup.py` now creates and installs bytecode for `hy.core`, `hy.contrib`, and `hy.extra`.
- The `hyc` command under Python 3 now creates bytecode in `__pycache__`, as usual for Python 3, instead of putting the `.pyc` right next to the source file like Python 2 does.

I've removed a test of `hy.extra.anaphoric.a-if` that triggers #1268 when the test file is byte-compiled and then hits some weird `macroexpand` bug or something when I try to work around that—Nose crashes when trying to produce an error message, and I can't seem to replicate the bug without Nose.
2017-04-14 13:38:33 -07:00
Kodi Arfer 5eb928356a Overhaul semantics of binary operators (#1261)
I've added shadow versions of many operators that didn't have one. And, I've changed the behavior of various binary operators with more or fewer than 2 arguments to make the shadow and real versions more consistent and to make the behavior more logical in either case. For details, see the additions to NEWS and the new file tests/native_tests/operators.hy, which simultaneously tests shadow and real operators.

Although there are a lot of changes, I've put them all in one commit because they're interdependent.
2017-04-13 19:42:01 -05:00
Kodi Arfer 18acfe6495 Revert the extension of `with-decorator` to `setv`
This is no longer necessary now that `defn` always produces a `FunctionDef`.

To compensate, I've made small edits to two contrib modules and reverted a small test change.
2017-04-13 06:36:00 +03:00
Kodi Arfer 7c203abe4d Fix bug with unset __name__ of one-line functions
The bug was a regression that I introduced in #1228.

I've created a new special form named `fn*` that works like the old `fn` (that is, it always creates a `FunctionDef`). Since this is intended only for internal use, like `with*`, I haven't documented it.
2017-04-13 06:36:00 +03:00
Kodi Arfer 491b474e7f Make `setv` return None for more types of rvalues 2017-04-07 21:21:19 +03:00
Kodi Arfer 286d568959 Fix a crash when tokenizing a single quote 2017-04-07 21:12:17 +03:00
Tuukka Turto 4a5e2fd852 Merge branch 'master' into walk-loop 2017-04-01 08:15:10 +03:00
Kodi Arfer a7085138f6 Add tests for #533 2017-03-30 16:10:34 -07:00
Kodi Arfer 5aadeba3fe Fix bug: `loop` replaced strings equal to "recur" 2017-03-30 15:49:10 -07:00
Kodi Arfer e478008cce Fix HyMacroExpansionError underline alignment 2017-03-24 11:09:30 -07:00
Kodi Arfer ca1bd0ffd3 Add a test for as-> in the REPL
Closes #1255.
2017-03-24 09:03:55 -07:00
Kodi Arfer 33a696d487 Add a command-line option --repl-output-fn (especially for hy.contrib.hy-repr) 2017-03-24 09:03:12 -07:00
Kodi Arfer bf2f90a0d9 Add hy.contrib.hy-repr 2017-03-24 08:43:53 -07:00
Kodi Arfer 32e76caafe Refactor test_bin 2017-03-24 08:43:53 -07:00
Kodi Arfer ae1dd78c53 Make `setv` always return None 2017-03-24 06:38:30 +02:00
Tuukka Turto 2ee91f6dc6 Merge branch 'yield-ret'
Conflicts:
	NEWS
2017-03-19 22:26:13 +02:00
Ryan Gonzalez 7c82c01a6a Fix #151 (again!): yield inside with wasn't propagated to Result 2017-03-08 16:04:48 -06:00
Kodi Arfer 5f00921dea Fix #1243: `read` raises EOFError on false inputs (#1244)
* Fix #1243: `read` raises EOFError on false inputs

* Fix crash when trying to `eval` false values
2017-03-06 10:51:25 -06:00
Kodi Arfer 8b6a45e43a Remove `car` and `cdr` in favor of `first` and `rest` (#1241)
* Remove uses of `car` and `cdr` in /hy

* Remove uses of `car` and `cdr` in quote tests

* Remove `car` and `cdr` in favor of `first` and `rest`

I beefed up the documentation and tests for `first` and `rest` while I was at it.

I defined `car` and `cdr` in native_tests.cons so the tests read a bit more naturally.
2017-03-06 10:34:40 -06:00
Kodi Arfer 8ecb17d1fd Fix bug: quoting a bytestring raises ImportError (#1245) 2017-03-04 19:04:28 -06:00
Kodi Arfer 6620cc4e6f Merge pull request #1235 from Kodiologist/test-reorg
Minor test reorganization
2017-03-02 18:45:17 -08:00
Kodi Arfer 484daafa53 Move hy.core.reserved to hy.extra.reserved (#1231)
It was an odd one out by being in hy.core but needing to be called by a qualified name. It's at home in hy.extra.
2017-03-02 16:49:32 -06:00
Kodi Arfer ebfa636b50 Fix #1237: iterator-handling bug in `partition`
Also, `partition` with n < 0 now raises an error.
2017-02-26 20:37:35 +02:00
Kodi Arfer d649147b0c Minor test reorganization
This removes two singleton directories.
2017-02-24 12:47:35 -08:00
Kodi Arfer e4a7b317e1 Make `fn` work like `lambda` and remove `lambda` (#1228)
* with-decorator: Allow a `setv` form as the form to be decorated

This feature is of dubious value by itself, but it's necessary to allow `defn` to create a lambda instead of a `def`.

* Make `fn` work the same as `lambda`

That is, allow it to generate a `lambda` instead of a `def` statement if the function body is just an expression.

I've removed two uses of with_decorator in hy.compiler because they'd require adding another case to HyASTCompiler.compile_decorate_expression and they have no ultimate effect, anyway.

In a few tests, I've added a meaningless statement in `fn` bodies to force generation of a `def`.

I've removed `test_fn_compiler_empty_function` rather than rewrite it because it seems like a pain to maintain and not very useful.

* Remove `lambda`, now that `fn` does the same thing
2017-02-22 17:36:52 -06:00
Kodi Arfer 45b7a4ac9d Add bytestring literals 2017-02-19 09:04:45 +02:00
Kodi Arfer 92d5d6b42c Merge pull request #1224 from Kodiologist/refactor-models
Refactor hy.models
2017-02-17 07:42:40 -08:00
Kodi Arfer 0336ff3c68 Don't put redundant names in _stdlib (#1221)
This prevents pointless imports of hy.core, like importing `map` in Python 3.
2017-02-16 21:14:06 -07:00
Kodi Arfer ace125ee9b Consolidate hy.models.* and tests/models/* into one file apiece
They were a lot of similar, tiny files.
2017-02-16 19:43:00 -08:00
Kodi Arfer f3edeb99ae Allow commas and underscores in numeric literals
You can use them as thousands separators.

This change differs from PEP 515 in that not only does it allow commas in addition to underscores, but it's much more liberal about placement. Any number of underscores or commas can be placed anywhere, even at the start.
2017-02-15 09:03:24 +02:00
Kodi Arfer 23a7363cce Fix a test for Python 2 2017-02-13 09:12:21 -08:00
Kodi Arfer 31f3a55a26 Remove tests of `let` 2017-02-13 09:12:13 -08:00
Kodi Arfer b1df5d1428 Remove extra uses of `let` in native_tests.language
Tests of `let` itself remain.
2017-02-04 09:18:22 -08:00
Kodi Arfer d72abb39f1 Remove uses of `let` from various tests 2017-02-04 09:07:27 -08:00
Kodi Arfer 1abf293793 Test the use of `and` in shadowed chained comparisons 2017-02-03 15:43:00 -08:00
Kodi Arfer 9ca7f49c88 Make xor return single true inputs
The documentation should now be correct (#1214).
2017-02-03 22:25:38 +02:00
Kodi Arfer ed930edefe Allow keyword args in method calls before the obj (#1167)
Unlike Python, Hy allows the programmer to intermingle positional and keyword arguments. This change removes an exception to that rule for method calls, in which the method callee always had to be the first thing after the method. Thus, `(.split :sep "o" "foo")` now compiles to `"foo".split(sep="o")` instead of `HyKeyword("sep").split("o", "foo")`.
2017-01-03 00:24:55 -07:00
Jakub Wilk 7aaf5f5330 Fix invalid escape sequences
Fixes:

    hy/cmdline.py:175: DeprecationWarning: invalid escape sequence \_
    tests/lex/test_lex.py:267: DeprecationWarning: invalid escape sequence \s
    tests/compilers/test_compiler.py:45: DeprecationWarning: invalid escape sequence \*

when run against Python 3.6 with warnings enabled.
2017-01-01 00:20:04 +03:00
Kodi Arfer 9449584c7f Merge branch 'contrib-cleanup' 2016-12-30 08:06:59 -08:00
Kodi Arfer 91b26d1fdd Remove contrib.meth
This seems to be specific to Flask, a web framework.
2016-12-29 08:35:54 -08:00
Kodi Arfer 85b4160637 Remove contrib.curry
It's undocumented and of dubious value.
2016-12-29 08:35:54 -08:00
Kodi Arfer e5c6f733a4 Remove tests for contrib.botsbuildbots
This is an Easter egg whose tests add a dependency (requests) and cause a test failure if you don't have an active Internet connection.
2016-12-29 08:35:54 -08:00
Kodi Arfer 8eceb4fe9d Move contrib.anaphoric to contrib.extra 2016-12-29 08:35:41 -08:00
Kodi Arfer 397fa80380 Revert "Modernized." (#1085) (#1188)
This reverts commit 13b484ce46 and fixes #1183.
2016-12-27 09:09:58 -06:00
Kodi Arfer d980a4a8ee Remove contrib.alias
I don't see why you'd put this in the standard library. I guess it could be useful for when you're maintaining a library and you want to change the name of a function or macro but keep the old name around for a while so people's code doesn't break immediately. But that's a pretty limited purpose.
2016-12-26 15:39:26 -08:00
Philip Xu eb8fe0b085 Add test for juxt 2016-12-25 16:57:50 -05:00
Philip Xu f8a5c151f8 Remove trailing space 2016-12-25 16:56:24 -05:00
Tuukka Turto 71f30e845d Add comp, constantly and complement (#1179)
* Add comp, constantly and complement

relates #1176

* Fix composition order in comp

* comp without parameters returns identity

* Doc edits for comp, complement, constantly

* Test that `(comp)` returns `identity` exactly

* Simplify the `reduce` call in `comp`

* updated version of comp
2016-12-25 13:11:25 -07:00
Kodi Arfer a4158c5543 Add tests for the empty keyword
I have some macros for using pandas and NumPy that expect : to be a keyword instead of an ordinary symbol. These tests will ensure that we don't break this unless we want to.
2016-12-21 10:19:42 -08:00
Elf M. Sternberg 13b484ce46 Modernized. 2016-12-20 10:54:11 +02:00
Tuukka Turto e588b4928d add defmacro! and fix macro expansion error message (#1172)
* added defmacro!

* revert #924

#924 had an error and should never have been merged in the first place. (see #903)

* put back import getargspec

Without the `formatargspec` this time.

* Give better error message on failed macro expansion

Better error messages work most of the time. In cases where there are
parameters that aren't valid in Python, error message shown is rather
ugly. But this is better than no error messages at all and such
macros with strange parameter names are rather rare.

* fix flake8 errors

* Minor English improvements
2016-12-14 18:10:46 -06:00
Kodi Arfer 5b85990d87 Add a module for getting reserved words (#1171)
This is helpful for writing syntax highlighters (e.g., https://github.com/hylang/hy/pull/1170).
2016-12-12 10:11:42 +02:00
Kodi Arfer b3d7069fb3 Merge branch 'seq' 2016-12-08 10:27:33 -08:00
Kodi Arfer 6bf5ebd8ee Remove some trailing spaces 2016-12-07 16:17:52 -08:00
Ryan Gonzalez 2c9a224bd6 Merge pull request #1050 from tuturto/multimethod
Modify multimethods to use dispatching function
2016-12-07 17:20:04 -06:00
Ryan Gonzalez 5b879323aa Lvalue of setv is checked too early when using `or`
Fix #1151
2016-12-01 09:49:51 +02:00
Tuukka Turto 4219faf532 Update true, false -> True, False 2016-11-30 23:45:21 +02:00
Tuukka Turto 269218a8fd Merge branch 'master' into seq 2016-11-30 23:41:01 +02:00
Ryan Gonzalez 24ebbc611e Give an error on empty attributes (#1138)
Give an error on empty attributes

closes #1137
2016-11-30 07:00:48 +02:00
Tuukka Turto 00615cef36 Add arity-overloaded defn
Old defmulti has been renamed to defn and extended to detect when it is
used to define regular function and when a arity-overloaded one.
2016-11-29 16:21:31 +02:00
Tuukka Turto aeab485a4f Merge branch 'master' into multimethod 2016-11-29 07:14:54 +02:00
Kodi Arfer ed8e37da62 Burninate the synonyms `true`, `false`, and `nil`
Per the straw poll in #908, as an alternative to #1147.

Now you must use `True`, `False`, and `None`, as in Python. Or just assign `true` to `True`, etc.; the old synonyms aren't reserved words anymore.
2016-11-23 18:35:17 -08:00
Tuukka Turto a7f6d1d3f7 Add support for multiple statements in sequences 2016-11-09 08:52:18 +02:00
Tuukka Turto 584a40d9c0 Update tests to work with Pytho 2.x
In Python 2.x (range 10) is mapped to xrange(10) in Python
terms. However, xrange doesn't support slicing, which caused tests to
fail. By forxing xrange into list, we have slicing available.
2016-11-09 05:07:31 +02:00
Tuukka Turto 241d554b0b Add lazy sequences into contrib 2016-11-08 21:23:49 +02:00
Kodi Arfer 2242097b6b Translate (.a.b.c x) to x.a.b.c(). (#1105)
Translate (.a.b.c x) to x.a.b.c().

This is useful for, e.g., calling the Series.str.lower method in pandas.
2016-11-07 19:45:25 +02:00
Tuukka Turto bae4d61e04 Fix require to new syntax 2016-11-03 14:32:23 +02:00
Tuukka Turto 77bc767907 Merge branch 'master' into multimethod
Conflicts:
	docs/contrib/multi.rst
2016-11-03 14:06:13 +02:00
Tuukka Turto f60ed24c29 Add docs and tests for as-> macro (#1141)
Add docs and tests for as-> macro

Closes #1047
2016-11-03 10:20:26 +02:00
Kodi Arfer 14fddbe6c3 Give `require` the same features as `import` (#1142)
Give `require` the same features as `import`

You can now do (require foo), (require [foo [a b c]]), (require [foo [*]]), and (require [foo :as bar]). The first and last forms get you macros named foo.a, foo.b, etc. or bar.a, bar.b, etc., respectively. The second form only gets the macros in the list.

Implements #1118 and perhaps partly addresses #277.

N.B. The new meaning of (require foo) will cause all existing code that uses macros to break. Simply replace these forms with (require [foo [*]]) to get your code working again.

There's a bit of a hack involved in the forms (require foo) or (require [foo :as bar]). When you call (foo.a ...) or (bar.a ...), Hy doesn't actually look inside modules. Instead, these (require ...) forms give the macros names that have periods in them, which happens to work fine with the way Hy finds and interprets macro calls.

* Make `require` syntax stricter and add tests

* Update documentation for `require`

* Documentation wording improvements

* Allow :as in `require` name lists
2016-11-03 09:35:58 +02:00
Tuukka Turto 9ee9f3a55a Merge branch 'master' into pr/1131 2016-10-20 19:12:33 +03:00