diff options
3 files changed, 9 insertions, 10 deletions
diff --git a/examples/06-imports/src/line.hob b/examples/06-imports/src/line.hob index 53ea271..562d77f 100644 --- a/examples/06-imports/src/line.hob +++ b/examples/06-imports/src/line.hob @@ -1,4 +1,4 @@ -import {Point} from ../point; +import {Point} from ./point; /// A straight line from one point to another. struct Line { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/NamespaceNameResolution.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/NamespaceNameResolution.java index ec6187d..e72e310 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/NamespaceNameResolution.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/NamespaceNameResolution.java @@ -19,12 +19,11 @@ public class NamespaceNameResolution { return importedNamespaceName; } - if (importedAncestorDepth.get() > current.parts().size()) { + if (importedAncestorDepth.get() >= current.parts().size()) { throw new RootNamespaceHasNoParentError(source); } - // TODO: should always skip right-most part? For instance, within src/line.hob, does ./point reference src/point.hob or src/line/point.hob? - var parts = new ArrayList<>(current.parts().subList(0, current.parts().size() - importedAncestorDepth.get())); + var parts = new ArrayList<>(current.parts().subList(0, current.parts().size() - importedAncestorDepth.get() - 1)); parts.addAll(importedNamespaceName.parts()); return new NamespaceName(parts); } diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/NamespaceNameResolutionTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/NamespaceNameResolutionTests.java index da0eb90..0ae6352 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/NamespaceNameResolutionTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/NamespaceNameResolutionTests.java @@ -29,8 +29,8 @@ public class NamespaceNameResolutionTests { } @Test - public void whenAncestorDepthIsZeroThenImportedNamespaceIsJoinedToCurrentNamespace() { - var current = NamespaceName.of("a", "b"); + public void whenAncestorDepthIsZeroThenImportedNamespaceIsJoinedToParentNamespace() { + var current = NamespaceName.of("a", "b", "c"); var importedAncestorDepth = Optional.of(0); var importedNamespaceName = NamespaceName.of("x", "y"); @@ -45,8 +45,8 @@ public class NamespaceNameResolutionTests { } @Test - public void whenAncestorDepthIsGreaterThanZeroThenThatManyPartsAreStrippedOffCurrentNamespaceBeforeJoining() { - var current = NamespaceName.of("a", "b", "c"); + public void whenAncestorDepthIsGreaterThanZeroThenThatManyPartsAreStrippedOffParentNamespaceBeforeJoining() { + var current = NamespaceName.of("a", "b", "c", "d"); var importedAncestorDepth = Optional.of(2); var importedNamespaceName = NamespaceName.of("x", "y"); @@ -61,9 +61,9 @@ public class NamespaceNameResolutionTests { } @Test - public void whenAncestorDepthIsGreaterThanPartsThenErrorIsThrown() { + public void whenAncestorDepthIsGreaterThanAncestorPartsThenErrorIsThrown() { var current = NamespaceName.of("a", "b", "c"); - var importedAncestorDepth = Optional.of(4); + var importedAncestorDepth = Optional.of(3); var importedNamespaceName = NamespaceName.of("x", "y"); assertThrows(RootNamespaceHasNoParentError.class, () -> resolveNamespaceName( |
