from Child import Child from Node import Node # noqa: I201 AVAILABILITY_NODES = [ # availability-spec-list -> availability-entry availability-spec-list? Node('AvailabilitySpecList', kind='SyntaxCollection', element='AvailabilityArgument'), # Wrapper for all the different entries that may occur inside @available # availability-entry -> '*' ','? # | identifier ','? # | availability-version-restriction ','? # | availability-versioned-argument ','? Node('AvailabilityArgument', kind='Syntax', description=''' A single argument to an `@available` argument like `*`, `iOS 10.1`, \ or `message: "This has been deprecated"`. ''', children=[ Child('Entry', kind='Syntax', description='The actual argument', node_choices=[ Child('Star', kind='SpacedBinaryOperatorToken', text_choices=['*']), Child('IdentifierRestriction', kind='IdentifierToken'), Child('AvailabilityVersionRestriction', kind='AvailabilityVersionRestriction'), Child('AvailabilityLabeledArgument', kind='AvailabilityLabeledArgument'), ]), Child('TrailingComma', kind='CommaToken', is_optional=True, description=''' A trailing comma if the argument is followed by another \ argument '''), ]), # Representation of 'deprecated: 2.3', 'message: "Hello world"' etc. # availability-versioned-argument -> identifier ':' version-tuple Node('AvailabilityLabeledArgument', kind='Syntax', description=''' A argument to an `@available` attribute that consists of a label and \ a value, e.g. `message: "This has been deprecated"`. ''', children=[ Child('Label', kind='IdentifierToken', description='The label of the argument'), Child('Colon', kind='ColonToken', description='The colon separating label and value'), Child('Value', kind='Syntax', node_choices=[ Child('String', 'StringLiteralToken'), Child('Version', 'VersionTuple'), ], description='The value of this labeled argument',), ]), # Representation for 'iOS 10', 'swift 3.4' etc. # availability-version-restriction -> identifier version-tuple Node('AvailabilityVersionRestriction', kind='Syntax', description=''' An argument to `@available` that restricts the availability on a \ certain platform to a version, e.g. `iOS 10` or `swift 3.4`. ''', children=[ Child('Platform', kind='IdentifierToken', classification='Keyword', description=''' The name of the OS on which the availability should be \ restricted or 'swift' if the availability should be \ restricted based on a Swift version. '''), Child('Version', kind='VersionTuple'), ]), # version-tuple -> integer-literal # | float-literal # | float-literal '.' integer-literal Node('VersionTuple', kind='Syntax', description=''' A version number of the form major.minor.patch in which the minor \ and patch part may be ommited. ''', children=[ Child('MajorMinor', kind='Syntax', node_choices=[ Child('Major', kind='IntegerLiteralToken'), Child('MajorMinor', kind='FloatingLiteralToken') ], description=''' In case the version consists only of the major version, an \ integer literal that specifies the major version. In case \ the version consists of major and minor version number, a \ floating literal in which the decimal part is interpreted \ as the minor version. '''), Child('PatchPeriod', kind='PeriodToken', is_optional=True, description=''' If the version contains a patch number, the period \ separating the minor from the patch number. '''), Child('PatchVersion', kind='IntegerLiteralToken', is_optional=True, description=''' The patch version if specified. '''), ]), ]