@@ -472,7 +472,7 @@ let does_content_match_file_hash ~reader file content =
472472 * Add success/error info to passed accumulator. *)
473473let reducer
474474 ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch
475- ~max_header_tokens ~noflow ~parse_unchanged
475+ ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged
476476 parse_results file
477477: results =
478478 (* It turns out that sometimes files appear and disappear very quickly. Just
@@ -525,6 +525,13 @@ let reducer
525525 if noflow file then { info with Docblock. flow = Some Docblock. OptOut }
526526 else info
527527 in
528+ let info = match jsx_pragma with
529+ | Some jsx_pragma ->
530+ let padding = (String. make 1 '\n' ) ^ (String. make 1 ' ' ) in
531+ let (jsx_expr, _) = Parser_flow. jsx_pragma_expression (padding ^ jsx_pragma) (Some file) in
532+ { info with Docblock. jsx = Some (Docblock. Jsx_pragma (jsx_pragma, jsx_expr)) }
533+ | None -> info
534+ in
528535 begin match (do_parse ~parse_options ~info content file) with
529536 | Parse_ok parse_ok ->
530537 let ast, file_sig = basic parse_ok in
@@ -602,13 +609,13 @@ let next_of_filename_set ?(with_progress=false) workers filenames =
602609 else MultiWorkerLwt. next workers (FilenameSet. elements filenames)
603610
604611let parse ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch ~profile
605- ~max_header_tokens ~noflow ~parse_unchanged workers next
612+ ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged workers next
606613: results Lwt.t =
607614 let t = Unix. gettimeofday () in
608615 let reducer =
609616 reducer
610617 ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch
611- ~max_header_tokens ~noflow ~parse_unchanged
618+ ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged
612619 in
613620 let % lwt results = MultiWorkerLwt. call
614621 workers
@@ -632,15 +639,15 @@ let parse ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch ~profile
632639 Lwt. return results
633640
634641let reparse
635- ~transaction ~reader ~parse_options ~profile ~max_header_tokens ~noflow
642+ ~transaction ~reader ~parse_options ~profile ~max_header_tokens ~noflow ~ jsx_pragma
636643 ~parse_unchanged ~with_progress ~workers ~modified :files ~deleted =
637644 (* save old parsing info for files *)
638645 let all_files = FilenameSet. union files deleted in
639646 let master_mutator, worker_mutator = Parsing_heaps.Reparse_mutator. create transaction all_files in
640647 let next = next_of_filename_set ?with_progress workers files in
641648 let % lwt results =
642649 parse ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch: false ~profile
643- ~max_header_tokens ~noflow ~parse_unchanged workers next
650+ ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged workers next
644651 in
645652 let modified = results.parse_ok |> FilenameMap. keys |> FilenameSet. of_list in
646653 let modified = List. fold_left (fun acc (fail , _ , _ ) ->
@@ -664,6 +671,7 @@ let parse_with_defaults ?types_mode ?use_strict ~reader options workers next =
664671 let facebook_fbt = Options. facebook_fbt options in
665672 let arch = Options. arch options in
666673 let abstract_locations = options.Options. opt_abstract_locations in
674+ let jsx_pragma = Options. jsx_pragma options in
667675 let parse_options =
668676 make_parse_options ~arch ~abstract_locations ~types_mode ~use_strict ~module_ref_prefix
669677 ~facebook_fbt ()
@@ -673,7 +681,7 @@ let parse_with_defaults ?types_mode ?use_strict ~reader options workers next =
673681 let worker_mutator = Parsing_heaps.Parse_mutator. create () in
674682 parse
675683 ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch: false
676- ~profile ~max_header_tokens ~noflow ~parse_unchanged workers next
684+ ~profile ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged workers next
677685
678686let reparse_with_defaults
679687 ~transaction ~reader ?types_mode ?use_strict ?with_progress
@@ -686,12 +694,13 @@ let reparse_with_defaults
686694 let facebook_fbt = Options. facebook_fbt options in
687695 let arch = Options. arch options in
688696 let abstract_locations = options.Options. opt_abstract_locations in
697+ let jsx_pragma = Options. jsx_pragma options in
689698 let parse_options =
690699 make_parse_options ~arch ~abstract_locations ~types_mode ~use_strict ~module_ref_prefix
691700 ~facebook_fbt ()
692701 in
693702 reparse
694- ~transaction ~reader ~parse_options ~profile ~max_header_tokens ~noflow
703+ ~transaction ~reader ~parse_options ~profile ~max_header_tokens ~noflow ~jsx_pragma
695704 ~parse_unchanged ~with_progress ~workers ~modified ~deleted
696705
697706(* ensure_parsed takes a set of files, finds the files which haven't been parsed, and parses them.
@@ -730,6 +739,7 @@ let ensure_parsed ~reader options workers files =
730739 let facebook_fbt = Options. facebook_fbt options in
731740 let arch = Options. arch options in
732741 let abstract_locations = options.Options. opt_abstract_locations in
742+ let jsx_pragma = Options. jsx_pragma options in
733743
734744 let parse_options =
735745 make_parse_options ~types_mode ~use_strict ~module_ref_prefix ~facebook_fbt ~arch
@@ -738,7 +748,7 @@ let ensure_parsed ~reader options workers files =
738748
739749 let % lwt results = parse
740750 ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch: true
741- ~profile ~max_header_tokens ~noflow ~parse_unchanged workers next
751+ ~profile ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged workers next
742752 in
743753
744754 Lwt. return results.parse_hash_mismatch_skips
0 commit comments