Make importing a dotted name a syntax error, per Python
This commit is contained in:
parent
86deff6531
commit
7abd8ffc2a
1
NEWS.rst
1
NEWS.rst
@ -67,6 +67,7 @@ Bug Fixes
|
|||||||
* `NaN` can no longer create an infinite loop during macro-expansion
|
* `NaN` can no longer create an infinite loop during macro-expansion
|
||||||
* Fixed a bug that caused `try` to drop expressions
|
* Fixed a bug that caused `try` to drop expressions
|
||||||
* Fixed a bug where the compiler didn't properly compile `unquote-splice`
|
* Fixed a bug where the compiler didn't properly compile `unquote-splice`
|
||||||
|
* Trying to import a dotted name is now a syntax error, as in Python
|
||||||
|
|
||||||
Misc. Improvements
|
Misc. Improvements
|
||||||
----------------------------
|
----------------------------
|
||||||
|
@ -1176,10 +1176,12 @@ class HyASTCompiler(object):
|
|||||||
|
|
||||||
return operand
|
return operand
|
||||||
|
|
||||||
|
_symn = some(lambda x: isinstance(x, HySymbol) and "." not in x)
|
||||||
|
|
||||||
@special(["import", "require"], [many(
|
@special(["import", "require"], [many(
|
||||||
SYM |
|
SYM |
|
||||||
brackets(SYM, sym(":as"), SYM) |
|
brackets(SYM, sym(":as"), _symn) |
|
||||||
brackets(SYM, brackets(many(SYM + maybe(sym(":as") + SYM)))))])
|
brackets(SYM, brackets(many(_symn + maybe(sym(":as") + _symn)))))])
|
||||||
def compile_import_or_require(self, expr, root, entries):
|
def compile_import_or_require(self, expr, root, entries):
|
||||||
"""
|
"""
|
||||||
TODO for `require`: keep track of what we've imported in this run and
|
TODO for `require`: keep track of what we've imported in this run and
|
||||||
|
@ -283,6 +283,13 @@ def test_ast_require():
|
|||||||
cant_compile("(require [tests.resources.tlib [* *]])")
|
cant_compile("(require [tests.resources.tlib [* *]])")
|
||||||
|
|
||||||
|
|
||||||
|
def test_ast_import_require_dotted():
|
||||||
|
"""As in Python, it should be a compile-type error to attempt to
|
||||||
|
import a dotted name."""
|
||||||
|
cant_compile("(import [spam [foo.bar]])")
|
||||||
|
cant_compile("(require [spam [foo.bar]])")
|
||||||
|
|
||||||
|
|
||||||
def test_ast_no_pointless_imports():
|
def test_ast_no_pointless_imports():
|
||||||
def contains_import_from(code):
|
def contains_import_from(code):
|
||||||
return any([isinstance(node, ast.ImportFrom)
|
return any([isinstance(node, ast.ImportFrom)
|
||||||
|
Loading…
Reference in New Issue
Block a user