diff --git a/widlparser/constructs.py b/widlparser/constructs.py index dfa081e..b39ab60 100644 --- a/widlparser/constructs.py +++ b/widlparser/constructs.py @@ -55,11 +55,7 @@ def _parse_extended_attributes(self, tokens: Tokenizer, parent: Construct) -> Op @property def idl_type(self) -> str: """Get construct type.""" - raise NotImplementedError # subclasses must override - - @property - def name(self) -> Optional[str]: - return None + raise NotImplementedError() # subclasses must override @property def constructors(self) -> List[Construct]: @@ -227,7 +223,7 @@ def idl_type(self) -> str: return 'const' @property - def name(self) -> Optional[str]: + def name(self) -> str: """Get name.""" return self._name.name @@ -309,7 +305,7 @@ def idl_type(self) -> str: return 'enum' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name @property @@ -368,7 +364,7 @@ def idl_type(self) -> str: return 'typedef' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name def _str(self) -> str: @@ -442,7 +438,7 @@ def idl_type(self) -> str: return 'argument' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name @property @@ -531,8 +527,8 @@ def idl_type(self) -> str: return self.member.idl_type @property - def name(self) -> Optional[str]: - return self.member.name + def name(self) -> str: + return cast(str, self.member.name) @property def method_name(self) -> Optional[str]: @@ -612,7 +608,8 @@ def idl_type(self) -> str: return self.member.idl_type @property - def name(self) -> Optional[str]: + def name(self) -> str: + assert (self.member.name is not None) return self.member.name @property @@ -748,7 +745,7 @@ def idl_type(self) -> str: return 'interface' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name @property @@ -923,7 +920,7 @@ def idl_type(self) -> str: return 'interface' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name @property @@ -1077,8 +1074,8 @@ def idl_type(self) -> str: return self.member.idl_type @property - def name(self) -> Optional[str]: - return self.member.name + def name(self) -> str: + return cast(str, self.member.name) @property def method_name(self) -> Optional[str]: @@ -1176,7 +1173,7 @@ def idl_type(self) -> str: return 'namespace' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name @property @@ -1326,7 +1323,7 @@ def idl_type(self) -> str: return 'dict-member' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name def _str(self) -> str: @@ -1409,7 +1406,7 @@ def idl_type(self) -> str: return 'dictionary' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name @property @@ -1576,7 +1573,7 @@ def idl_type(self) -> str: return 'callback' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name @property @@ -1731,11 +1728,11 @@ def idl_type(self) -> str: return 'implements' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name @property - def implements(self) -> Optional[str]: + def implements(self) -> str: return self._implements.name def _str(self) -> str: @@ -1784,11 +1781,11 @@ def idl_type(self) -> str: return 'includes' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name @property - def includes(self) -> Optional[str]: + def includes(self) -> str: return self._includes.name def _str(self) -> str: @@ -1826,8 +1823,12 @@ def idl_type(self) -> str: return 'extended-attribute' @property - def name(self) -> Optional[str]: - return None + def name(self) -> str: + return '' + + @property + def normal_name(self) -> str: + return '' def _str(self) -> str: return ''.join([str(token) for token in self.tokens]) @@ -1868,11 +1869,11 @@ def attribute(self) -> str: return _name(self._attribute) @property - def name(self) -> Optional[str]: - return self.parent.name if ('constructor' == self.idl_type) else self.attribute + def name(self) -> str: + return str(self.parent.name) if ('constructor' == self.idl_type) else self.attribute @property - def normal_name(self) -> Optional[str]: + def normal_name(self) -> str: return f'{self.parent.name}()' if ('constructor' == self.idl_type) else self.attribute def _str(self) -> str: @@ -1927,11 +1928,11 @@ def attribute(self) -> str: return _name(self._attribute) @property - def name(self) -> Optional[str]: - return self.parent.name if ('constructor' == self.idl_type) else self.attribute + def name(self) -> str: + return str(self.parent.name) if ('constructor' == self.idl_type) else self.attribute @property - def normal_name(self) -> Optional[str]: + def normal_name(self) -> str: if ('constructor' == self.idl_type): return (f'{self.parent.name}(' + (', '.join(argument.name for argument in self._arguments if (argument.name)) if (self._arguments) else '') + ')') @@ -1995,11 +1996,11 @@ def value(self) -> str: return _name(self._value) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self.value if ('constructor' == self.idl_type) else self.attribute @property - def normal_name(self) -> Optional[str]: + def normal_name(self) -> str: return (str(self.value) + '()') if ('constructor' == self.idl_type) else self.attribute def _str(self) -> str: @@ -2066,11 +2067,11 @@ def value(self) -> str: return _name(self._value) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self.value if ('constructor' == self.idl_type) else self.attribute @property - def normal_name(self) -> Optional[str]: + def normal_name(self) -> str: return (str(self.value) + '()') if ('constructor' == self.idl_type) else self.attribute def _str(self) -> str: @@ -2146,11 +2147,11 @@ def value(self) -> str: return _name(self._value) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self.value if ('constructor' == self.idl_type) else self.attribute @property - def normal_name(self) -> Optional[str]: + def normal_name(self) -> str: if ('constructor' == self.idl_type): return self.value + '(' + (', '.join(argument.name for argument in self._arguments if (argument.name)) if (self._arguments) else '') + ')' return self.attribute @@ -2225,7 +2226,7 @@ def attribute(self) -> str: return _name(self._attribute) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self.attribute def _str(self) -> str: @@ -2256,7 +2257,7 @@ class ExtendedAttribute(Construct): | ExtendedAttributeIdentList | ExtendedAttributeTypePair """ - attribute: Construct + attribute: ExtendedAttributeType @classmethod def peek(cls, tokens: Tokenizer) -> bool: @@ -2290,7 +2291,7 @@ def idl_type(self) -> str: return self.attribute.idl_type @property - def name(self) -> Optional[str]: + def name(self) -> str: return self.attribute.name @property @@ -2328,3 +2329,14 @@ def _define_markup(self, generator: MarkupGenerator) -> Production: def __repr__(self) -> str: return repr(self.attribute) + + +ExtendedAttributeType = Union[ + ExtendedAttributeNamedArgList, + ExtendedAttributeArgList, + ExtendedAttributeNoArgs, + ExtendedAttributeTypePair, + ExtendedAttributeIdentList, + ExtendedAttributeIdent, + ExtendedAttributeUnknown, +] diff --git a/widlparser/productions.py b/widlparser/productions.py index dae7f59..140bd15 100644 --- a/widlparser/productions.py +++ b/widlparser/productions.py @@ -513,7 +513,7 @@ def __init__(self, tokens: Tokenizer) -> None: self._did_parse(tokens, False) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name[1:] if ('_' == self._name[0]) else self._name @property @@ -1604,7 +1604,7 @@ def __init__(self, tokens: Tokenizer) -> None: self._did_parse(tokens) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name def _str(self) -> str: @@ -1674,12 +1674,6 @@ def __init__(self, tokens: Tokenizer, parent: ComplexProduction = None) -> None: else: tokens.error('Dictionary argument "', argument.name, '" without required members must be marked optional') - @property - def name(self) -> Optional[str]: - if (self.arguments): - return self.arguments[0].name - return None - @property # get all possible variants of argument names def argument_names(self) -> Sequence[str]: if (self.arguments): @@ -1777,7 +1771,7 @@ def __init__(self, tokens: Tokenizer) -> None: self._did_parse(tokens) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name def _str(self) -> str: @@ -1814,7 +1808,7 @@ def __init__(self, tokens: Tokenizer) -> None: self._did_parse(tokens) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name def _str(self) -> str: @@ -1863,7 +1857,7 @@ def __init__(self, tokens: Tokenizer, parent: ComplexProduction) -> None: self._did_parse(tokens) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name def _str(self) -> str: @@ -1918,7 +1912,7 @@ def stringifier(self) -> bool: return False @property - def name(self) -> Optional[str]: + def name(self) -> str: return self.attribute.name def _str(self) -> str: @@ -1964,7 +1958,7 @@ def stringifier(self) -> bool: return False @property - def name(self) -> Optional[str]: + def name(self) -> str: return self.attribute.name def _str(self) -> str: @@ -2005,7 +1999,7 @@ def __init__(self, tokens: Tokenizer) -> None: self._did_parse(tokens) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name def _str(self) -> str: @@ -2059,8 +2053,8 @@ def idl_type(self) -> str: return 'method' @property - def name(self) -> Optional[str]: - return self._name.name if (self._name) else None + def name(self) -> str: + return self._name.name if (self._name) else '' @property def arguments(self) -> ArgumentList: @@ -2148,7 +2142,7 @@ def idl_type(self) -> str: return 'iterable' @property - def name(self) -> Optional[str]: + def name(self) -> str: return '__iterable__' def _str(self) -> str: @@ -2254,7 +2248,7 @@ def idl_type(self) -> str: return 'async-iterable' @property - def name(self) -> Optional[str]: + def name(self) -> str: return '__async_iterable__' @property @@ -2346,7 +2340,7 @@ def idl_type(self) -> str: return 'maplike' @property - def name(self) -> Optional[str]: + def name(self) -> str: return '__maplike__' def _str(self) -> str: @@ -2410,7 +2404,7 @@ def idl_type(self) -> str: return 'setlike' @property - def name(self) -> Optional[str]: + def name(self) -> str: return '__setlike__' def _str(self) -> str: @@ -2467,7 +2461,7 @@ def idl_type(self) -> str: return 'method' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self.operation.name if (self.operation.name) else ('__' + _name(self.specials[0]) + '__') @property @@ -2531,7 +2525,7 @@ def idl_type(self) -> str: return 'method' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self.operation.name @property @@ -2609,7 +2603,7 @@ def stringifier(self) -> bool: return True @property - def name(self) -> Optional[str]: + def name(self) -> str: if (self.operation): return self.operation.name if (self.operation.name) else '__stringifier__' return self.attribute.name if (self.attribute and self.attribute.name) else '__stringifier__' @@ -2688,7 +2682,7 @@ def __init__(self, tokens: Tokenizer) -> None: self._did_parse(tokens) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name def _str(self) -> str: @@ -2728,7 +2722,7 @@ def __init__(self, tokens: Tokenizer) -> None: self._did_parse(tokens) @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._name.name def _str(self) -> str: @@ -2784,7 +2778,7 @@ def stringifier(self) -> bool: return False @property - def name(self) -> Optional[str]: + def name(self) -> str: return self.operation.name if (self.operation) else cast(AttributeRest, self.attribute).name @property @@ -2866,7 +2860,7 @@ def idl_type(self) -> str: return 'method' @property - def name(self) -> Optional[str]: + def name(self) -> str: return self._constructor.name @property