From 08d1cc0d7a12e5595d34933b982f73dc522232ff Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 19 Jun 2026 17:20:07 +0100 Subject: Throw better error on unknown namespace --- .../org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java | 5 +++-- .../hobgoblin/compiler/typechecker/UnknownNamespaceError.java | 11 +++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/typechecker/UnknownNamespaceError.java (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java index a8d8dee..9dba876 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java @@ -7,6 +7,7 @@ import org.zwobble.hobgoblin.compiler.config.ProjectConfig; import org.zwobble.hobgoblin.compiler.parser.Parser; import org.zwobble.hobgoblin.compiler.typechecker.TypeChecker; import org.zwobble.hobgoblin.compiler.typechecker.TypeCheckerGlobalContext; +import org.zwobble.hobgoblin.compiler.typechecker.UnknownNamespaceError; import org.zwobble.hobgoblin.compiler.types.NamespaceName; import org.zwobble.sourcetext.SourceText; @@ -87,8 +88,8 @@ public class HobgoblinCompiler { ); if (!handledNamespaceNames.contains(importedNamespaceName)) { unhandledDependencies.add( - // TODO: better error - Optional.ofNullable(namespaceNodesByName.get(importedNamespaceName)).orElseThrow() + Optional.ofNullable(namespaceNodesByName.get(importedNamespaceName)) + .orElseThrow(() -> new UnknownNamespaceError(importedNamespaceName, importNode.source())) ); } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/UnknownNamespaceError.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/UnknownNamespaceError.java new file mode 100644 index 0000000..fb06f3b --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/UnknownNamespaceError.java @@ -0,0 +1,11 @@ +package org.zwobble.hobgoblin.compiler.typechecker; + +import org.zwobble.hobgoblin.compiler.errors.SourceError; +import org.zwobble.hobgoblin.compiler.sources.Source; +import org.zwobble.hobgoblin.compiler.types.NamespaceName; + +public class UnknownNamespaceError extends SourceError { + public UnknownNamespaceError(NamespaceName namespaceName, Source source) { + super("Unknown namespace: " + namespaceName, source); + } +} -- cgit v1.2.3