Add properties to AST types

I want to have a cleaner API that relies less on the specifics of the
grammar and parser.
This commit is contained in:
James Westman 2023-01-09 21:55:14 -06:00
parent 0b7dbaf90d
commit 6938267952
No known key found for this signature in database
GPG key ID: CE2DBA0ADB654EA6
4 changed files with 34 additions and 10 deletions

View file

@ -39,6 +39,10 @@ class Menu(AstNode):
def tag(self) -> str:
return self.tokens["tag"]
@property
def items(self) -> T.List[T.Union["Menu", "MenuAttribute"]]:
return self.children
@validate("menu")
def has_id(self):
if self.tokens["tag"] == "menu" and self.tokens["id"] is None:

View file

@ -22,7 +22,7 @@ from .. import gir
from .imports import GtkDirective, Import
from .gtkbuilder_template import Template
from .gobject_object import Object
from .gtk_menu import menu
from .gtk_menu import menu, Menu
from .common import *
@ -64,6 +64,24 @@ class UI(AstNode):
return gir_ctx
@property
def using(self) -> T.List[Import]:
return self.children[Import]
@property
def gtk_decl(self) -> GtkDirective:
return self.children[GtkDirective][0]
@property
def contents(self) -> T.List[T.Union[Object, Template, Menu]]:
return [
child
for child in self.children
if isinstance(child, Object)
or isinstance(child, Template)
or isinstance(child, Menu)
]
@property
def objects_by_id(self):
return {

View file

@ -203,6 +203,10 @@ class Flag(AstNode):
class FlagsValue(Value):
grammar = [Flag, "|", Delimited(Flag, "|")]
@property
def flags(self) -> T.List[Flag]:
return self.children
@validate()
def parent_is_bitfield(self):
type = self.parent.value_type