Skip to content

Commit 37cd980

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

File tree

1 file changed

+49
-76
lines changed

1 file changed

+49
-76
lines changed

build-script.py

Lines changed: 49 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,46 @@ 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+
return {
297+
SWIFTSYNTAX_DIR: swiftsyntax_destination,
298+
SWIFTSYNTAXBUILDER_DIR: swiftsyntaxbuilder_destination,
299+
SWIFTSYNTAXPARSER_DIR: swiftsyntaxparser_destination,
300+
SWIFTSYNTAXBUILDERGENERATION_DIR: swiftsyntaxbuildergenerator_destination,
301+
}
302+
303+
304+
def generate_gyb_files(
305+
gyb_exec: str, gyb_dir_mapping: Dict[str, Optional[str]],
306+
add_source_locations: bool, verbose: bool,
295307
) -> None:
296308
print("** Generating gyb Files **")
297309

298310
check_gyb_exec(gyb_exec)
299311
check_rsync()
300312

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-
)
313+
for source_dir, destination_dir in gyb_dir_mapping.items():
314+
generate_gyb_files_helper(
315+
source_dir,
316+
destination_dir,
317+
gyb_exec,
318+
add_source_locations,
319+
verbose
320+
)
321+
if source_dir == SWIFTSYNTAX_DIR:
322+
generate_syntax_node_template_gyb_files(
323+
destination_dir,
324+
gyb_exec,
325+
add_source_locations,
326+
verbose
327+
)
335328

336329
print("** Done Generating gyb Files **")
337330

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

460453

461454
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"
455+
gyb_dirs = gyb_dir_mapping(
456+
swiftsyntax_destination=tempfile.mkdtemp(),
457+
swiftsyntaxbuilder_destination=tempfile.mkdtemp(),
458+
swiftsyntaxparser_destination=tempfile.mkdtemp(),
459+
swiftsyntaxbuildergenerator_destination=tempfile.mkdtemp(),
473460
)
474461

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-
480462
generate_gyb_files(
481463
gyb_exec,
482-
verbose=verbose,
464+
gyb_dir_mapping=gyb_dirs,
483465
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
466+
verbose=verbose,
488467
)
489468

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-
)
469+
for source_dir, destination_dir in gyb_dir_mapping.items():
470+
if destination_dir is None:
471+
raise ValueError('gyb_dir_mapping should have custom temp dirs')
472+
473+
pre_generated_dir = os.path.join(source_dir, "gyb_generated")
474+
check_generated_files_match(
475+
pre_generated_dir,
476+
destination_dir
477+
)
506478

507479

508480
def verify_code_generated_files(
@@ -710,8 +682,9 @@ def generate_source_code_command(args: argparse.Namespace) -> None:
710682
try:
711683
generate_gyb_files(
712684
args.gyb_exec,
713-
verbose=args.verbose,
685+
gyb_dir_mapping=gyb_dir_mapping(),
714686
add_source_locations=args.add_source_locations,
687+
verbose=args.verbose,
715688
)
716689
except subprocess.CalledProcessError as e:
717690
fail_for_called_process_error("Generating .gyb files failed", e)

0 commit comments

Comments
 (0)