mirror of
https://gitlab.gnome.org/jwestman/blueprint-compiler.git
synced 2025-05-04 15:59:08 -04:00
Reduce errors when a namespace is not found
When the typelib for a namespace is not found, don't emit "namespace not imported" errors. Just emit the one error on the import statement.
This commit is contained in:
parent
402677f687
commit
bc605c5df8
6 changed files with 20 additions and 1 deletions
|
@ -741,6 +741,7 @@ class Repository(GirNode):
|
||||||
class GirContext:
|
class GirContext:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.namespaces = {}
|
self.namespaces = {}
|
||||||
|
self.not_found_namespaces: T.Set[str] = set()
|
||||||
|
|
||||||
def add_namespace(self, namespace: Namespace):
|
def add_namespace(self, namespace: Namespace):
|
||||||
other = self.namespaces.get(namespace.name)
|
other = self.namespaces.get(namespace.name)
|
||||||
|
@ -781,7 +782,7 @@ class GirContext:
|
||||||
|
|
||||||
ns = ns or "Gtk"
|
ns = ns or "Gtk"
|
||||||
|
|
||||||
if ns not in self.namespaces:
|
if ns not in self.namespaces and ns not in self.not_found_namespaces:
|
||||||
raise CompileError(
|
raise CompileError(
|
||||||
f"Namespace {ns} was not imported",
|
f"Namespace {ns} was not imported",
|
||||||
did_you_mean=(ns, self.namespaces.keys()),
|
did_you_mean=(ns, self.namespaces.keys()),
|
||||||
|
|
|
@ -76,6 +76,14 @@ class Import(AstNode):
|
||||||
UseNumberText("version").expected("a version number"),
|
UseNumberText("version").expected("a version number"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def namespace(self):
|
||||||
|
return self.tokens["namespace"]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def version(self):
|
||||||
|
return self.tokens["version"]
|
||||||
|
|
||||||
@validate("namespace", "version")
|
@validate("namespace", "version")
|
||||||
def namespace_exists(self):
|
def namespace_exists(self):
|
||||||
gir.get_namespace(self.tokens["namespace"], self.tokens["version"])
|
gir.get_namespace(self.tokens["namespace"], self.tokens["version"])
|
||||||
|
|
|
@ -58,6 +58,8 @@ class UI(AstNode):
|
||||||
try:
|
try:
|
||||||
if i.gir_namespace is not None:
|
if i.gir_namespace is not None:
|
||||||
gir_ctx.add_namespace(i.gir_namespace)
|
gir_ctx.add_namespace(i.gir_namespace)
|
||||||
|
else:
|
||||||
|
gir_ctx.not_found_namespaces.add(i.namespace)
|
||||||
except CompileError as e:
|
except CompileError as e:
|
||||||
e.start = i.group.tokens["namespace"].start
|
e.start = i.group.tokens["namespace"].start
|
||||||
e.end = i.group.tokens["version"].end
|
e.end = i.group.tokens["version"].end
|
||||||
|
|
6
tests/sample_errors/ns_not_found.blp
Normal file
6
tests/sample_errors/ns_not_found.blp
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
using Gtk 4.0;
|
||||||
|
using NotARealNamespace 1;
|
||||||
|
|
||||||
|
NotARealNamespace.Widget widget {
|
||||||
|
property: true;
|
||||||
|
}
|
1
tests/sample_errors/ns_not_found.err
Normal file
1
tests/sample_errors/ns_not_found.err
Normal file
|
@ -0,0 +1 @@
|
||||||
|
2,7,19,Namespace NotARealNamespace-1 could not be found
|
|
@ -224,6 +224,7 @@ class TestSamples(unittest.TestCase):
|
||||||
self.assert_sample_error("menu_no_id")
|
self.assert_sample_error("menu_no_id")
|
||||||
self.assert_sample_error("menu_toplevel_attribute")
|
self.assert_sample_error("menu_toplevel_attribute")
|
||||||
self.assert_sample_error("no_import_version")
|
self.assert_sample_error("no_import_version")
|
||||||
|
self.assert_sample_error("ns_not_found")
|
||||||
self.assert_sample_error("ns_not_imported")
|
self.assert_sample_error("ns_not_imported")
|
||||||
self.assert_sample_error("not_a_class")
|
self.assert_sample_error("not_a_class")
|
||||||
self.assert_sample_error("object_dne")
|
self.assert_sample_error("object_dne")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue