Commit Graph

651 Commits

Author SHA1 Message Date
redraiment
2b40dea54d Fixes #1875: parse-args requires values to be representable as Hy models
* Update argument spec parse logic of parse-args function.
* Update test case of parse-args function.
* Update document of parse-args function.
* Describe the change in NEWS file.
2020-03-31 10:44:26 -04:00
Kodi Arfer
80eb27906a Update copyright years 2020-01-09 14:05:12 -05:00
Kodi Arfer
0e55d7d955 Allow more than two arguments to in or not-in 2020-01-09 14:04:12 -05:00
Kodi Arfer
170febb2e8 Implement chained comparisons 2020-01-09 14:04:12 -05:00
Kodi Arfer
2074e4bd2f Change the indentation of a test 2020-01-09 14:04:12 -05:00
Kodi Arfer
cfbc45a586 Test that ap-each returns None 2019-12-21 14:36:25 -05:00
Kodi Arfer
e57bbb92db Use a gensym for it in anaphoric macros 2019-12-21 14:36:25 -05:00
Kodi Arfer
bafd919605 Clean up the implementations of anaphoric macros 2019-12-21 14:36:24 -05:00
Kodi Arfer
b12c930444 Allow non-constant n in ap-dotimes 2019-12-21 11:10:30 -05:00
Kodi Arfer
f6b9ba9b8f Fix some bugs in ap-reduce 2019-12-15 14:55:31 -05:00
Kodi Arfer
592c681261 Clean up native-tests.extra.anaphoric 2019-12-15 14:55:31 -05:00
Kodi Arfer
8872f0b44c Remove hy.contrib.multi 2019-11-18 20:06:17 -05:00
Adam Porter
0f3d256ebf Add: parse-args function
Closes #1719.
2019-10-30 10:16:45 -05:00
Ryan Gonzalez
e1ab140a6e Implement the of macro 2019-10-08 09:40:15 -05:00
Ryan Gonzalez
1865feb7d6 Implement PEP 3107 & 526 annotations (closes #1794) 2019-10-08 09:40:15 -05:00
Kodi Arfer
e6aac2308a Update tests for tuple HySequences 2019-08-18 09:43:02 -04:00
Kodi Arfer
9ddb3b1031 Rewrite _with 2019-08-18 09:43:02 -04:00
Kodi Arfer
bc524daee8 Remove dead code 2019-08-18 09:43:02 -04:00
Kodi Arfer
a9c6ab6391 Remove native_tests/mathematics
It should now be fully redundant with native_tests/operators.
2019-08-08 15:12:03 -04:00
Kodi Arfer
6fb6eefd6b Make augmented assignment operators variadic 2019-08-08 15:12:03 -04:00
Kodi Arfer
d32e460531 Remove some exceptions in keyword parsing 2019-07-24 11:21:11 -04:00
Ryan Gonzalez
289f172d56 Fix #1790: Rework statements in while condition
This avoids compiling them more than once while also applying some simplification.
2019-07-22 11:34:48 -04:00
Kodi Arfer
d99cf80986 Run statements in the second argument of assert
I've edited the test to use a list instead of a set because the order of evaluation probably ought to be guaranteed.
2019-07-21 10:17:24 -04:00
Kodi Arfer
6bc9e842e1 Clean up whitespace 2019-07-17 14:34:31 -04:00
Kodi Arfer
308bedbebe Remove uses of defclass attribute lists 2019-07-17 14:34:31 -04:00
Kodi Arfer
36708e8e99 Fix a test for Python 3.8.0b1
`int`, among other types, no longer has a `__str__` method, so `(str '3)` now returns "(HyInteger 3)" instead of "3".
2019-06-25 12:41:46 -04:00
Kodi Arfer
9b4178ebd0 Remove undocumented fns integer and string 2019-06-04 14:01:59 -04:00
Kodi Arfer
6af6a2945a Remove if-python2 and its uses 2019-06-04 14:01:59 -04:00
Kodi Arfer
67def3359f Remove Python 2 support from hy.importer 2019-06-04 14:01:59 -04:00
Kodi Arfer
ea872c3983 Remove native tests of Python 2 2019-06-04 14:01:59 -04:00
Kodi Arfer
4a2e7e1bd0 Integrate py3_only_tests into native_tests/language 2019-06-04 14:01:59 -04:00
Kodi Arfer
e77ce92635 Simplify gensym format 2019-04-29 08:10:51 -04:00
Kodi Arfer
6c74cf1f07 Add setx for assignment expressions 2019-04-23 15:35:12 -04:00
Kodi Arfer
8df0a41d7d Provide Module(..., type_ignores) for Python 3.8 2019-04-23 15:35:12 -04:00
Tristan Cacqueray
d793cee90a add tuple? function hy.core
`tuple?` will test if the argument is an instance of tuple.
2019-04-23 15:25:49 -04:00
Tristan Cacqueray
b0ed103931 add list? function to hy.core
`list?` will test if the argument is an instance of list.
2019-04-09 00:07:10 +00:00
Kodi Arfer
efed0b6c23 Move Python 3.5 tests to py3_only_tests.hy 2019-03-17 18:33:06 -04:00
Kodi Arfer
85f203ba43 Remove checks in tests for Python 3.5 2019-03-17 18:30:42 -04:00
Kodi Arfer
5bfc140b4d Implement format strings 2019-02-26 14:04:24 -05:00
Brandon T. Willard
9e62903d8a Add special exception and handling for wrapper errors 2019-02-07 13:45:41 -05:00
Brandon T. Willard
fb6feaf082 Improve correspondence with Python errors and console behavior
Compiler and command-line error messages now reflect their Python counterparts.
E.g. where Python emits a `SyntaxError`, so does Hy; same for `TypeError`s.
Multiple tests have been added that check the format and type of raised
exceptions over varying command-line invocations (e.g. interactive and not).

A new exception type for `require` errors was added so that they can be treated
like normal run-time errors and not compiler errors.

The Hy REPL has been further refactored to better match the class-structured
API.  Now, different error types are handled separately and leverage more base
class-provided functionality.

Closes hylang/hy#1486.
2019-02-07 13:45:41 -05:00
Kodi Arfer
62638b44a3 Update copyright years 2019-02-07 08:57:35 -05:00
Kodi Arfer
983ea2dda2 Make (require [foo [*]]) pull in macros required by foo 2019-01-31 12:42:40 -05:00
Kodi Arfer
b777972a0e Fix mangling of characters below 0xFF 2018-12-14 15:54:23 -05:00
Brandon T. Willard
b8b02c9df9 Handle empty defmain args
Closes hylang/hy#1707.
2018-11-29 14:37:52 -06:00
Brandon T. Willard
86fda31ab1 Move compilation and parsing functions out of importer.py
Functions and variables relating to compilation and parsing have been moved to
`compiler.py` and `lex/__init__.py`, respectively.  Those functions are
  - `hy_parse` from `hy.importer` to `hy.lex`
  - `hy_eval`, `ast_compile`, and `calling_module` from `hy.importer` to
  `hy.compiler`

Closes hylang/hy#1695.
2018-11-28 14:12:33 -05:00
Jakub Wilk
28504ba85d Catch IndentationError in isidentifier()
Fixes:

    >>> from hy._compat import isidentifier
    >>> isidentifier(u"  0\n 0")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "hy/_compat.py", line 47, in isidentifier
        tokens = list(T.generate_tokens(StringIO(x).readline))
      File "/usr/lib/python2.7/tokenize.py", line 374, in generate_tokens
        ("<tokenize>", lnum, pos, line))
      File "<tokenize>", line 2
        0
        ^
    IndentationError: unindent does not match any outer indentation level
2018-11-27 17:15:21 -05:00
Brandon T. Willard
010986e8ca Implement minimal macro namespacing and add tests
This commit adds just enough namespacing to resolve a macro first in the macro's
defining module's namespace (i.e. the module assigned to the `HyASTCompiler`),
then in the namespace/module it's evaluated in.  Namespacing is accomplished by
adding a `module` attribute to `HySymbol`, so that `HyExpression`s can be
checked for this definition namespace attribute and their car symbol resolved
per the above.

As well, a couple tests have been added that cover
- the loading of module-level macros
  - e.g. that only macros defined in the `require`d module are added
- the AST generated for `require`
  - using macros loaded from modules imported via bytecode
- the non-local macro namespace resolution described above
  - a `require`d macro that uses a macro `require` exclusively in its
    module-level namespace
- and that (second-degree `require`d) macros can reference variables within
  their module-level namespaces.

Closes hylang/hy#1268, closes hylang/hy#1650, closes hylang/hy#1416.
2018-11-08 22:57:17 -06:00
Brandon T. Willard
96f99c29d1 Fix missing import in doc macro expansion 2018-09-24 16:39:13 -04:00
Brandon T. Willard
87a5b117a1 Implement new importer using PEP-302 semantics
Python 3.x is patched in a way that integrates `.hy` source files into
Pythons default `importlib` machinery.  In Python 2.7, a PEP-302 "importer"
and "loader" is implemented according to the standard `import` logic (via
`pkgutil` and later pure-Python `imp` package code).

In both cases, the entry-point for the loaders is through `sys.path_hooks` only.
As well, the import semantics have been updated all throughout to utilize
`importlib` and follow aspects of PEP-420.  This, along with some light
patches, should allow for basic use of `runpy`, `py_compile` and `reload`.

In all cases, if a `.hy` file is shadowed by a `.py`, Hy will silently use
`.hy`.
2018-08-25 22:50:38 -05:00