Files
swift-mirror/lib/Syntax/Status.md
2017-03-02 17:02:50 -08:00

480 lines
9.3 KiB
Markdown

# Swift Syntax Library Implementation Status
## Represented Grammar Productions
Include the following in each entry:
- Grammar production(s)
- See [Summary of the Swift Grammar](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/zzSummaryOfTheGrammar.html)
- C++ types representing the productions
- Testing status
- With APIs
- Make APIs
- Builder APIs (if applicable)
- SR links
- Related lib/AST changes
### Declarations
- declaration-modifiers
- `DeclModifierListSyntax`
- declaration-modifier
- `DeclModifierSyntax`
- struct-declaration
- `StructDeclSyntax`
- typealias-assignment
typealias-declaration
- `TypeAliasDeclSyntax`
- class-body
class-members
- `DeclMembersSyntax`
- `ClassDeclSyntax` used for the `{` `}` braces.
- extension-body
- `DeclMembersSyntax`
- protocol-body
- `DeclMembersSyntax`
- struct-body
struct-members
- `DeclMembersSyntax`
- `StructDeclSyntax` used for the `{` `}` braces.
- function-declaration
- `FunctionDeclSyntax`
- function-body
- `CodeBlockSyntax`
- function-result
- `TypeSyntax`
- function-signature
- `FunctionSignatureSyntax`
- parameter-clause
- `FunctionParameterClauseSyntax`
- parameter-list
- `FunctionParameterListSyntax`
- parameter
- `FunctionParameterSyntax`
### Statements
- statement
- `StmtSyntax` (Abstract base class)
- statements
- `StmtListSyntax`
- code-block
- `CodeBlockSyntax`
- fallthrough-statement
- `FallthroughStmtSyntax`
- break-statement
- `BreakStmtSyntax`
- continue-statement
- `ContinueStmtSyntax`
- return-statement
- `ReturnStmtSyntax`
### Expressions
- binary-literal
- decimal-literal
- hexadecimal-literal
- integer-literal
- octal-literal
- `IntegerLiteralExprSyntax`
- function-call-argument
- `FunctionCallArgumentSyntax`
- function-call-argument-list
- `FunctionCallArgumentListSyntax`
- function-call-expression
- function-call-argument-clause
- `FunctionCallExprSyntax`
### Types
- type
- type-annotation
- `TypeSyntax` (Abstract base class)
- protocol-identifier
- type-identifier
- `TypeIdentifierSyntax`
- optional-type
- `OptionalTypeSyntax`
- implicitly-unwrapped-optional-type
- `ImplicitlyUnwrappedOptionalTypeSyntax`
- array-type
- `ArrayTypeSyntax`
- dictionary-type
- `DictionaryTypeSyntax`
- function-type
- function-type-argument
- function-type-argument-clause
- `FunctionTypeSyntax`
- function-type-argument-list
- `TypeArgumentListSyntax`
- metatype-type
- `MetatypeTypeSyntax`
- tuple-type
- `TupleTypeSyntax`
- tuple-type-element
- `TupleTypeElementSyntax`
- tuple-type-element-list
- `TupleTypeElementListSyntax`
### Type Attributes
- attribute
- attribute-argument-clause
- `TypeAttributeSyntax`
- attributes
- `TypeAttributesSyntax`
- balanced-token
- `BalancedTokenSyntax`
- balanced-tokens
- `BalancedTokensSyntax`
### Generics
- generic-argument-clause
- `GenericArgumentClauseSyntax`
- generic-argument-list
- `GenericArgumentListSyntax`
- generic-parameter-clause
- `GenericParameterClauseSyntax`
- generic-parameter
- `GenericParameterSyntax`
- generic-parameter-list
- `GenericParameterListSyntax`
- conformance-requirement
- `ConformanceRequirementSyntax`
- same-type-requirement
- `SameTypeRequirementSyntax`
- generic-where-clause
- `GenericWhereClauseSyntax`
- requirement-list
- `GenericRequirementListSyntax`
### Identifiers and Terminal Tokens
- access-level-modifier
- argument-label
- attribute-name
- boolean-literal
- class-name
- closure-parameter-name
- element-name
- enum-case-name
- enum-name
- external-parameter-name
- function-name
- identifier-pattern
- import-kind
- import-path-identifier
- label-name
- local-parameter-name
- mutation-modifier
- platform-name
- precedence-group-name
- protocol-name
- sign
- struct-name
- type-name
- typealias-name
- variable-name
- identifier
- `TokenSyntax`
## Unrepresented Grammar Productions
These are categorized somewhat by difficulty and priority.
### Easy
- array-literal
- array-literal-items
- as-pattern
- case-condition
- case-label
- dynamic-type-expression
- floating-point-literal
- forced-value-expression
- identifier-list
- implicit-member-expression
- import-path
- in-out-expression
- interpolated-text
- interpolated-text-item
- is-pattern
- key-path-expression
- line-control-statement
- optional-chaining-expression
- optional-pattern
- parenthesized-expression
- platform-condition
- platform-version
- postfix-operator-declaration
- precedence-group-assignment
- precedence-group-associativity
- precedence-group-names
- statement-label
- static-string-literal
- swift-version
- throw-statement
- value-binding-pattern
- where-clause
- dictionary-literal
- dictionary-literal-items
- dictionary-literal-item
- capture-list
- capture-list-items
- capture-list-item
- defer-statement
### Medium
- else-directive-clause
- elseif-directive-clauses
- elseif-directive-clause
- precedence-group-declaration
- precedence-group-relation
- expression-list
- availability-condition
- availability-arguments
- availability-argument
- switch-cases
- switch-case
- constant-declaration
- catch-clauses
- catch-clause
- variable-declaration
- do-statement
- for-in-statement
- guard-statement
- case-item-list
- import-declaration
- if-directive-clause
- if-statement
- else-clause
- protocol-associated-type-declaration
- repeat-while-statement
- while-statement
- tuple-expression
- tuple-element-list
- tuple-element
- tuple-pattern
- tuple-pattern-element-list
- tuple-pattern-element
- switch-statement
- explicit-member-expression
- optional-binding-condition
- operator-declaration
- selector-expression
- protocol-composition-type
- conditional-operator
- deinitializer-declaration
- didSet-clause
- willSet-clause
- pattern-initializer-list
- pattern-initializer
- prefix-expression
- prefix-operator-declaration
- infix-operator-declaration
- infix-operator-group
- binary-expression
### Hard
- protocol-declaration
- closure-expression
- closure-signature
- closure-parameter-clause
- closure-parameter-list
- closure-parameter
- extension-declaration
- enum-declaration
- class-declaration
- getter-setter-block
- getter-setter-keyword-block
- getter-keyword-clause
- getter-clause
- setter-keyword-clause
- setter-clause
- setter-name
- subscript-declaration
- enum-case-pattern
- initializer-declaration
- initializer-head
- interpolated-string-literal
- conditional-compilation-block
## Trivial and Intermediate Grammar Productions
- binary-expressions
- binary-operator
- compilation-condition
- capture-specifier
- precedence-group-attributes
- precedence-group-attribute
- prefix-operator
- type-casting-operator
- willSet-didSet-block
- architecture
- string-literal
- argument-names
- array-literal-item
- type-casting-pattern
- assignment-operator
- expression-pattern
- binary-digit
- binary-literal-character
- binary-literal-characters
- branch-statement
- class-member
- class-requirement
- condition
- condition-list
- compiler-control-statement
- control-transfer-statement
- decimal-digit
- decimal-digits
- decimal-exponent
- decimal-fraction
- decimal-literal-character
- decimal-literal-characters
- default-argument-clause
- default-label
- dot-operator-character
- dot-operator-characters
- dot-operator-head
- else-directive
- elseif-directive
- endif-directive
- escaped-character
- expression
- extension-member
- file-name
- floating-point-e
- floating-point-p
- function-head
- hexadecimal-digit
- hexadecimal-exponent
- hexadecimal-fraction
- identifier-character
- identifier-characters
- identifier-head
- if-directive
- where-expression
- implicit-parameter-name
- initializer
- initializer-body
- initializer-expression
- labeled-statement (TODO: Put in loop-, if-, switch-, do-statement layout)
- line-number
- literal
- literal-expression
- loop-statement
- nil-literal
- numeric-literal
- octal-digit
- octal-literal-character
- octal-literal-characters
- operating-system
- operator
- operator-character
- operator-characters
- operator-head
- pattern
- postfix-expression
- postfix-operator
- postfix-self-expression
- protocol-composition-continuation
- protocol-initializer-declaration
- protocol-member
- protocol-member-declaration
- protocol-members
- extension-members
- protocol-method-declaration
- protocol-property-declaration
- protocol-subscript-declaration
- quoted-text
- quoted-text-item
- raw-value-assignment
- raw-value-literal
- raw-value-style-enum
- raw-value-style-enum-case
- raw-value-style-enum-case-clause
- raw-value-style-enum-case-list
- playground-literal
- raw-value-style-enum-member
- raw-value-style-enum-members
- requirement
- self-expression
- self-initializer-expression
- self-method-expression
- self-subscript-expression
- struct-member
- subscript-expression
- subscript-head
- subscript-result
- superclass-expression
- superclass-initializer-expression
- superclass-method-expression
- superclass-subscript-expression
- top-level-declaration
- try-operator
- type-inheritance-clause
- type-inheritance-list
- unicode-scalar-digits
- union-style-enum
- union-style-enum-case
- union-style-enum-case-clause
- union-style-enum-case-list
- union-style-enum-member
- union-style-enum-members
- variable-declaration-head
- wildcard-expression
- wildcard-pattern
- primary-expression
- generic-argument