Skip to content

Commit 241b1d6

Browse files
committed
Refactor gyb-generation in build-script.py
This removes some duplicated code in favor of loops.
1 parent e5dc525 commit 241b1d6

File tree

1 file changed

+52
-76
lines changed

1 file changed

+52
-76
lines changed

build-script.py

Lines changed: 52 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,6 @@ def generate_gyb_file(gyb_file: str) -> None:
238238
pass
239239

240240

241-
242241
# Generate the syntax node `.swift` files from `SyntaxNodes.swift.gyb.template`.
243242
# `destination_dir` is not `None`, the resulting files will be written to
244243
# `destination_dir/syntax_nodes`, otherwise they will be written to
@@ -286,52 +285,49 @@ def generate_syntax_node_template_gyb_files(
286285
)
287286

288287

289-
def generate_gyb_files(
290-
gyb_exec: str, verbose: bool, add_source_locations: bool,
288+
# Maps directories containing .gyb files to the directories the generated files should
289+
# live in.
290+
def gyb_dir_mapping(
291291
swiftsyntax_destination: Optional[str] = None,
292292
swiftsyntaxbuilder_destination: Optional[str] = None,
293293
swiftsyntaxparser_destination: Optional[str] = None,
294-
swiftsyntaxbuildergenerator_destination: Optional[str] = None
294+
swiftsyntaxbuildergenerator_destination: Optional[str] = None,
295+
) -> Dict[str, Optional[str]]:
296+
"""
297+
298+
"""
299+
return {
300+
SWIFTSYNTAX_DIR: swiftsyntax_destination,
301+
SWIFTSYNTAXBUILDER_DIR: swiftsyntaxbuilder_destination,
302+
SWIFTSYNTAXPARSER_DIR: swiftsyntaxparser_destination,
303+
SWIFTSYNTAXBUILDERGENERATION_DIR: swiftsyntaxbuildergenerator_destination,
304+
}
305+
306+
307+
def generate_gyb_files(
308+
gyb_exec: str, gyb_dir_mapping: Dict[str, Optional[str]],
309+
add_source_locations: bool, verbose: bool,
295310
) -> None:
296311
print("** Generating gyb Files **")
297312

298313
check_gyb_exec(gyb_exec)
299314
check_rsync()
300315

301-
generate_gyb_files_helper(
302-
SWIFTSYNTAX_DIR,
303-
swiftsyntax_destination,
304-
gyb_exec,
305-
add_source_locations,
306-
verbose
307-
)
308-
generate_gyb_files_helper(
309-
SWIFTSYNTAXBUILDER_DIR,
310-
swiftsyntaxbuilder_destination,
311-
gyb_exec,
312-
add_source_locations,
313-
verbose
314-
)
315-
generate_gyb_files_helper(
316-
SWIFTSYNTAXPARSER_DIR,
317-
swiftsyntaxparser_destination,
318-
gyb_exec,
319-
add_source_locations,
320-
verbose
321-
)
322-
generate_gyb_files_helper(
323-
SWIFTSYNTAXBUILDERGENERATION_DIR,
324-
swiftsyntaxbuildergenerator_destination,
325-
gyb_exec,
326-
add_source_locations,
327-
verbose
328-
)
329-
generate_syntax_node_template_gyb_files(
330-
swiftsyntax_destination,
331-
gyb_exec,
332-
add_source_locations,
333-
verbose
334-
)
316+
for source_dir, destination_dir in gyb_dir_mapping.items():
317+
generate_gyb_files_helper(
318+
source_dir,
319+
destination_dir,
320+
gyb_exec,
321+
add_source_locations,
322+
verbose
323+
)
324+
if source_dir == SWIFTSYNTAX_DIR:
325+
generate_syntax_node_template_gyb_files(
326+
destination_dir,
327+
gyb_exec,
328+
add_source_locations,
329+
verbose
330+
)
335331

336332
print("** Done Generating gyb Files **")
337333

@@ -459,50 +455,29 @@ def build(self, product_name: str) -> None:
459455

460456

461457
def verify_generated_files(gyb_exec: str, verbose: bool) -> None:
462-
user_swiftsyntax_generated_dir = os.path.join(
463-
SWIFTSYNTAX_DIR, "gyb_generated"
464-
)
465-
user_swiftsyntaxbuilder_generated_dir = os.path.join(
466-
SWIFTSYNTAXBUILDER_DIR, "gyb_generated"
467-
)
468-
user_swiftsyntaxparser_generated_dir = os.path.join(
469-
SWIFTSYNTAXPARSER_DIR, "gyb_generated"
470-
)
471-
user_swiftsyntaxbuildergeneration_generated_dir = os.path.join(
472-
SWIFTSYNTAXBUILDERGENERATION_DIR, "gyb_generated"
458+
gyb_dirs = gyb_dir_mapping(
459+
swiftsyntax_destination=tempfile.mkdtemp(),
460+
swiftsyntaxbuilder_destination=tempfile.mkdtemp(),
461+
swiftsyntaxparser_destination=tempfile.mkdtemp(),
462+
swiftsyntaxbuildergenerator_destination=tempfile.mkdtemp(),
473463
)
474464

475-
self_swiftsyntax_generated_dir = tempfile.mkdtemp()
476-
self_swiftsyntaxbuilder_generated_dir = tempfile.mkdtemp()
477-
self_swiftsyntaxparser_generated_dir = tempfile.mkdtemp()
478-
self_swiftsyntaxbuildergeneration_generated_dir = tempfile.mkdtemp()
479-
480465
generate_gyb_files(
481466
gyb_exec,
482-
verbose=verbose,
467+
gyb_dir_mapping=gyb_dirs,
483468
add_source_locations=False,
484-
swiftsyntax_destination=self_swiftsyntax_generated_dir,
485-
swiftsyntaxbuilder_destination=self_swiftsyntaxbuilder_generated_dir,
486-
swiftsyntaxparser_destination=self_swiftsyntaxparser_generated_dir,
487-
swiftsyntaxbuildergenerator_destination=self_swiftsyntaxbuildergeneration_generated_dir # noqa: E501
469+
verbose=verbose,
488470
)
489471

490-
check_generated_files_match(
491-
self_swiftsyntax_generated_dir,
492-
user_swiftsyntax_generated_dir
493-
)
494-
check_generated_files_match(
495-
self_swiftsyntaxbuilder_generated_dir,
496-
user_swiftsyntaxbuilder_generated_dir
497-
)
498-
check_generated_files_match(
499-
self_swiftsyntaxparser_generated_dir,
500-
user_swiftsyntaxparser_generated_dir
501-
)
502-
check_generated_files_match(
503-
self_swiftsyntaxbuildergeneration_generated_dir,
504-
user_swiftsyntaxbuildergeneration_generated_dir
505-
)
472+
for source_dir, destination_dir in gyb_dir_mapping.items():
473+
if destination_dir is None:
474+
raise ValueError('gyb_dir_mapping should have custom temp dirs')
475+
476+
pre_generated_dir = os.path.join(source_dir, "gyb_generated")
477+
check_generated_files_match(
478+
pre_generated_dir,
479+
destination_dir
480+
)
506481

507482

508483
def verify_code_generated_files(
@@ -710,8 +685,9 @@ def generate_source_code_command(args: argparse.Namespace) -> None:
710685
try:
711686
generate_gyb_files(
712687
args.gyb_exec,
713-
verbose=args.verbose,
688+
gyb_dir_mapping=gyb_dir_mapping(),
714689
add_source_locations=args.add_source_locations,
690+
verbose=args.verbose,
715691
)
716692
except subprocess.CalledProcessError as e:
717693
fail_for_called_process_error("Generating .gyb files failed", e)

0 commit comments

Comments
 (0)