summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/06-imports/src/line.hob2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/NamespaceNameResolution.java5
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/NamespaceNameResolutionTests.java12
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(