Skip to content

Commit a8fa3ba

Browse files
committed
Added helper variables and methods for SwiftSyntax gyb
swiftlang/swift-syntax#268
1 parent b684431 commit a8fa3ba

File tree

4 files changed

+22
-8
lines changed

4 files changed

+22
-8
lines changed

utils/gyb_syntax_support/Child.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ class Child(object):
1212
def __init__(self, name, kind, description=None, is_optional=False,
1313
token_choices=None, text_choices=None, node_choices=None,
1414
collection_element_name=None,
15-
classification=None, force_classification=False):
15+
classification=None, force_classification=False,
16+
is_indented=False, requires_leading_newline=False):
1617
"""
1718
If a classification is passed, it specifies the color identifiers in
1819
that subtree should inherit for syntax coloring. Must be a member of
@@ -29,6 +30,8 @@ def __init__(self, name, kind, description=None, is_optional=False,
2930
self.collection_element_name = collection_element_name
3031
self.classification = classification_by_name(classification)
3132
self.force_classification = force_classification
33+
self.is_indented = is_indented
34+
self.requires_leading_newline = requires_leading_newline
3235

3336
# If the child has "token" anywhere in the kind, it's considered
3437
# a token node. Grab the existing reference to that token from the

utils/gyb_syntax_support/CommonNodes.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,16 @@
3939

4040
# code-block-item-list -> code-block-item code-block-item-list?
4141
Node('CodeBlockItemList', kind='SyntaxCollection',
42-
element='CodeBlockItem'),
42+
element='CodeBlockItem', elements_separated_by_newline=True),
4343

4444
# code-block -> '{' stmt-list '}'
4545
Node('CodeBlock', kind='Syntax',
4646
traits=['Braced', 'WithStatements'],
4747
children=[
4848
Child('LeftBrace', kind='LeftBraceToken'),
4949
Child('Statements', kind='CodeBlockItemList',
50-
collection_element_name='Statement'),
51-
Child('RightBrace', kind='RightBraceToken'),
50+
collection_element_name='Statement', is_indented=True),
51+
Child('RightBrace', kind='RightBraceToken',
52+
requires_leading_newline=True),
5253
]),
5354
]

utils/gyb_syntax_support/DeclNodes.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,13 +288,14 @@
288288
children=[
289289
Child('LeftBrace', kind='LeftBraceToken'),
290290
Child('Members', kind='MemberDeclList',
291-
collection_element_name='Member'),
292-
Child('RightBrace', kind='RightBraceToken'),
291+
collection_element_name='Member', is_indented=True),
292+
Child('RightBrace', kind='RightBraceToken',
293+
requires_leading_newline=True),
293294
]),
294295

295296
# member-decl-list = member-decl member-decl-list?
296297
Node('MemberDeclList', kind='SyntaxCollection',
297-
element='MemberDeclListItem'),
298+
element='MemberDeclListItem', elements_separated_by_newline=True),
298299

299300
# member-decl = decl ';'?
300301
Node('MemberDeclListItem', kind='Syntax', omit_when_empty=True,

utils/gyb_syntax_support/Node.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ class Node(object):
1919

2020
def __init__(self, name, description=None, kind=None, traits=None,
2121
children=None, element=None, element_name=None,
22-
element_choices=None, omit_when_empty=False):
22+
element_choices=None, omit_when_empty=False,
23+
elements_separated_by_newline=False):
2324
self.syntax_kind = name
2425
self.swift_syntax_kind = lowercase_first_word(name)
2526
self.name = kind_to_type(self.syntax_kind)
@@ -47,6 +48,7 @@ def __init__(self, name, description=None, kind=None, traits=None,
4748
self.collection_element_name = element_name or self.collection_element
4849
self.collection_element_type = kind_to_type(self.collection_element)
4950
self.collection_element_choices = element_choices or []
51+
self.elements_separated_by_newline = elements_separated_by_newline
5052

5153
def is_base(self):
5254
"""
@@ -86,3 +88,10 @@ def shall_be_omitted_when_empty(self):
8688
has no children.
8789
"""
8890
return self.omit_when_empty
91+
92+
def is_token(self):
93+
"""
94+
Returns true if this child has a token kind.
95+
"""
96+
return 'Token' in self.syntax_kind or \
97+
'Token' in self.collection_element

0 commit comments

Comments
 (0)