Commit Graph

2605 Commits

Author SHA1 Message Date
Kodi Arfer
f1e693c96b Fix a Python 2 crash 2019-02-03 14:13:48 -05:00
Kodi Arfer
ada524e887
Merge pull request #1729 from Kodiologist/recursive-require-star
Make (require [foo [*]]) pull in macros required by `foo`
2019-01-31 13:37:52 -05:00
Kodi Arfer
983ea2dda2 Make (require [foo [*]]) pull in macros required by foo 2019-01-31 12:42:40 -05:00
Kodi Arfer
a5ed98f5b9
Merge pull request #1731 from Quelklef/master
Some documentation additions
2019-01-29 08:27:37 -05:00
Eli
e4fd74af1b Clarifying &optional documentation (fixes #1722) 2019-01-20 17:11:52 -05:00
Eli
3d2be62d4b Add synonyms for argument unpacking, for text-search purposes 2019-01-19 13:33:54 -05:00
Kodi Arfer
a42e17a025
Merge pull request #1715 from Kodiologist/interop-docs
Fix an example in interop.rst
2019-01-12 12:06:49 -05:00
Kodi Arfer
70747a58c3 Fix an example in interop.rst 2018-12-29 19:57:18 -05:00
Kodi Arfer
c4f73f061f
Merge pull request #1710 from Kodiologist/low-mangling
Fix mangling of characters below 0xFF
2018-12-29 19:56:37 -05:00
Kodi Arfer
b777972a0e Fix mangling of characters below 0xFF 2018-12-14 15:54:23 -05:00
Kodi Arfer
55ec6a0552
Merge pull request #1708 from brandonwillard/defmain-args-fix
Make `defmain` args optional or variadic when empty
2018-12-11 10:32:18 -05:00
Brandon T. Willard
f040bbe96f Update NEWS 2018-11-29 14:37:52 -06:00
Brandon T. Willard
b8b02c9df9 Handle empty defmain args
Closes hylang/hy#1707.
2018-11-29 14:37:52 -06:00
Kodi Arfer
9efd2a9d61
Merge pull request #1700 from brandonwillard/reuse-compiler-instances
Reuse Hy compiler instances
2018-11-28 19:04:41 -05:00
Brandon T. Willard
690416b3d6 Update description of eval in core.rst 2018-11-28 17:08:10 -06:00
Brandon T. Willard
3d0659b723 Update NEWS 2018-11-28 16:35:42 -06:00
Brandon T. Willard
15c68455ec Use a fixed compiler in HyREPL
These changes make `HyREPL` use a single `HyASTCompiler` instance, instead of
creating one every time a valid source string is processed.

This change avoids the unnecessary re-initiation of the standard library
`import` and `require` steps that currently occur within the module tracked by a
`HyREPL` instance.

Also, one can now pass an existing compiler instance to `hy_repl` and
`hy_compiler`.

Closes hylang/hy#1698.
2018-11-28 16:35:42 -06:00
Kodi Arfer
fb0220bd52
Merge pull request #1699 from brandonwillard/reorganize-imports
Reorganize utility functions and imports
2018-11-28 14:23:34 -05:00
Brandon T. Willard
8b6646d5c9 Remove hy.core compilation requirement from hy package
Previously, when importing `hy` (and any of its sub-packages/modules), Hy source
compilation for `hy.core.language` was necessarily triggered.  This, in turn,
would trigger compilation of the other standard library source files.

This commit removes that chain of events and allows the `hy` package to be
imported without any Hy compilation.

Furthermore, `read` and `read_str` are now implemented in Python and the Hy
standard library files now handle their own dependencies explicitly (i.e. they
`import` and/or `require` the other standard library files upon which they
depend).

The latter changes were necessary, because the automatically triggered
compilation of `hy.core.language` (and associated standard library files) was
serving--implicitly--as a means of producing bytecode in an order that just
happened to work for any compilation occurring afterward.  This chain of
events/dependencies was extremely cryptic, brittle, and difficult to debug, and
these changes should help to remedy that.

Closes hylang/hy#1697.
2018-11-28 14:12:33 -05: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
Kodi Arfer
3e0112f362
Merge pull request #1691 from jwilk-forks/isidentifier
Catch IndentationError in isidentifier()
2018-11-27 17:23:57 -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
Kodi Arfer
c5abc85a2d
Merge pull request #1682 from brandonwillard/macro-changes
Macro processing updates and fixes
2018-11-09 11:13:32 -05:00
Brandon T. Willard
aa9182d76c Make the stdlib dictionary a class instance variable 2018-11-08 22:57:17 -06:00
Brandon T. Willard
3b01742818 Update NEWS 2018-11-08 22:57:17 -06: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
144a7fa240 Produce Python AST for require statements and skip self requires
Closes hylang/hy#1211.
2018-11-08 22:57:17 -06:00
Kodi Arfer
58003389c5 Integrate hy.inspect into hy.macros
It's compatibility code, and there's not a lot of it, and having a module with the same name as a standard module can be a bit troublesome.
2018-11-08 22:57:17 -06:00
Kodi Arfer
701db83ba9 Remove get_arity
This function wasn't being used anywhere.
2018-11-08 22:56:42 -06:00
Kodi Arfer
4132adb9fe
Merge pull request #1683 from brandonwillard/fix-py27-failed-import-modules
Fix `sys.modules` for failed imports in Python 2.7
2018-10-16 16:05:40 -04:00
Brandon T. Willard
a9763b34cf Fix sys.modules for failed imports in Python 2.7
Newly imported modules with compile and/or run-time errors were not being
removed from `sys.modules`.  This commit modifies the Python 2.7 loader so that
it follows Python's failed-initial-import logic and removes the module from
`sys.modules`.
2018-09-29 20:57:28 -05:00
Kodi Arfer
d2319dc91c
Merge pull request #1679 from brandonwillard/fix-doc-macro
Fix missing import in `doc` macro expansion
2018-09-24 17:01:39 -04:00
Brandon T. Willard
96f99c29d1 Fix missing import in doc macro expansion 2018-09-24 16:39:13 -04:00
Kodi Arfer
1707f602f7
Merge pull request #1678 from brandonwillard/run-ambiguous-files-as-hy
Allow `runpy` to consider non-standard Hy source extensions
2018-09-24 16:36:36 -04:00
Brandon T. Willard
c0c5c9c699 Make cmdline Hy process unknown filetypes as Hy source
This change a Hy-preferring `runhy` that is used by cmdline Hy.  Standard
`runpy` is still patched so that it can run `.hy` files, but the default
behaviour for unknown filetypes is preserved (i.e. assume they are Python
source).

Closes hylang/hy#1677.
2018-09-24 16:27:50 -04:00
Kodi Arfer
a2f3a08750
Merge pull request #1673 from brandonwillard/fix-docstring-with-imports
Fix AST handling of docstrings and __future__ ordering
2018-09-11 16:32:57 -04:00
Brandon T. Willard
f4e5f02b3e Updated NEWS 2018-09-11 16:26:21 -04:00
Brandon T. Willard
a9fca8001e Fix AST handling of docstrings and __future__ ordering
This closes hylang/hy#1367 and closes hylang/hy#1540
2018-09-11 16:26:21 -04:00
Kodi Arfer
4af87dca64
Merge pull request #1672 from brandonwillard/new-patch-importer
New patch importer
2018-09-03 07:36:53 -04:00
Brandon T. Willard
5d325a5156 Add a test for module docstrings 2018-08-27 01:02:29 -05:00
Brandon T. Willard
2ea1e8e017 Make Hy a Python-source module type 2018-08-26 13:20:49 -05:00
Brandon T. Willard
32033b03ce Fix pytest hook so that ignore works consistently 2018-08-26 00:27:36 -05:00
Brandon T. Willard
b12fd33e6f Update NEWS 2018-08-26 00:27:36 -05:00
Brandon T. Willard
bbc66d0042 Add test for shadowed-basename imports
This test ensures that Hy will load a `.hy` instead of a `.py` counterpart.
2018-08-26 00:27:36 -05:00
Brandon T. Willard
1da29417fe Add test for circular imports
Closes hylang/hy#1134.
2018-08-26 00:27:36 -05:00
Brandon T. Willard
cbaba4a10a Use Python cmdline file-relative sys.path
Closes hylang/hy#1457.
2018-08-26 00:27:21 -05:00
Brandon T. Willard
c022abc831 Add Python cmdline bytecode option and set sys.executable
Closes hylang/hy#459.
2018-08-26 00:17:12 -05:00
Brandon T. Willard
4839acadf7 Add tests for importing __main__.hy files
Closes hylang/hy#1466.
2018-08-25 22:50:45 -05:00
Brandon T. Willard
e9e7171b56 Add module reloading tests 2018-08-25 22:50:45 -05: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