[swiftSyntax] Add type annotations to speed up compile time

This commit is contained in:
Alex Hoppen
2018-06-26 15:53:06 -07:00
parent 8c8f4eb1df
commit 478518fcf7
3 changed files with 12 additions and 9 deletions

View File

@@ -46,8 +46,9 @@ public struct ${Builder} {
if let list = layout[idx] { if let list = layout[idx] {
layout[idx] = list.appending(elt.raw) layout[idx] = list.appending(elt.raw)
} else { } else {
layout[idx] = RawSyntax(kind: .${child.swift_syntax_kind}, layout[idx] = RawSyntax(kind: SyntaxKind.${child.swift_syntax_kind},
layout: [elt.raw], presence: .present) layout: [elt.raw],
presence: SourcePresence.present)
} }
} }
% else: % else:

View File

@@ -58,8 +58,7 @@ public enum SyntaxFactory {
% child_params.append("%s: %s" % (child.swift_name, param_type)) % child_params.append("%s: %s" % (child.swift_name, param_type))
% child_params = ', '.join(child_params) % child_params = ', '.join(child_params)
public static func make${node.syntax_kind}(${child_params}) -> ${node.name} { public static func make${node.syntax_kind}(${child_params}) -> ${node.name} {
let data = SyntaxData(raw: RawSyntax(kind: .${node.swift_syntax_kind}, let layout: [RawSyntax?] = [
layout: [
% for child in node.children: % for child in node.children:
% if child.is_optional: % if child.is_optional:
${child.swift_name}?.data.raw ?? ${make_missing_swift_child(child)}, ${child.swift_name}?.data.raw ?? ${make_missing_swift_child(child)},
@@ -67,15 +66,18 @@ public enum SyntaxFactory {
${child.swift_name}.data.raw, ${child.swift_name}.data.raw,
% end % end
% end % end
], presence: .present)) ]
let raw = RawSyntax(kind: SyntaxKind.${node.swift_syntax_kind},
layout: layout, presence: SourcePresence.present)
let data = SyntaxData(raw: raw)
return ${node.name}(root: data, data: data) return ${node.name}(root: data, data: data)
} }
% elif node.is_syntax_collection(): % elif node.is_syntax_collection():
public static func make${node.syntax_kind}( public static func make${node.syntax_kind}(
_ elements: [${node.collection_element_type}]) -> ${node.name} { _ elements: [${node.collection_element_type}]) -> ${node.name} {
let raw = RawSyntax(kind: .${node.swift_syntax_kind}, let raw = RawSyntax(kind: SyntaxKind.${node.swift_syntax_kind},
layout: elements.map { $0.data.raw }, layout: elements.map { $0.data.raw },
presence: .present) presence: SourcePresence.present)
let data = SyntaxData(raw: raw) let data = SyntaxData(raw: raw)
return ${node.name}(root: data, data: data) return ${node.name}(root: data, data: data)
} }

View File

@@ -77,11 +77,11 @@ def make_missing_swift_child(child):
tok_kind = token.swift_kind() if token else "unknown" tok_kind = token.swift_kind() if token else "unknown"
if not token or not token.text: if not token or not token.text:
tok_kind += '("")' tok_kind += '("")'
return 'RawSyntax.missingToken(.%s)' % tok_kind return 'RawSyntax.missingToken(TokenKind.%s)' % tok_kind
else: else:
missing_kind = "unknown" if child.syntax_kind == "Syntax" \ missing_kind = "unknown" if child.syntax_kind == "Syntax" \
else child.swift_syntax_kind else child.swift_syntax_kind
return 'RawSyntax.missing(.%s)' % missing_kind return 'RawSyntax.missing(SyntaxKind.%s)' % missing_kind
def create_node_map(): def create_node_map():