@@ -458,7 +458,7 @@ let does_content_match_file_hash ~reader file content =
458458 * Add success/error info to passed accumulator. *)
459459let reducer
460460 ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch
461- ~max_header_tokens ~noflow ~parse_unchanged
461+ ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged
462462 parse_results file
463463: results =
464464 (* It turns out that sometimes files appear and disappear very quickly. Just
@@ -511,6 +511,13 @@ let reducer
511511 if noflow file then { info with Docblock. flow = Some Docblock. OptOut }
512512 else info
513513 in
514+ let info = match jsx_pragma with
515+ | Some jsx_pragma ->
516+ let padding = (String. make 1 '\n' ) ^ (String. make 1 ' ' ) in
517+ let (jsx_expr, _) = Parser_flow. jsx_pragma_expression (padding ^ jsx_pragma) (Some file) in
518+ { info with Docblock. jsx = Some (Docblock. Jsx_pragma (jsx_pragma, jsx_expr)) }
519+ | None -> info
520+ in
514521 begin match (do_parse ~parse_options ~info content file) with
515522 | Parse_ok parse_ok ->
516523 let ast, file_sig = basic parse_ok in
@@ -588,13 +595,13 @@ let next_of_filename_set ?(with_progress=false) workers filenames =
588595 else MultiWorkerLwt. next workers (FilenameSet. elements filenames)
589596
590597let parse ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch ~profile
591- ~max_header_tokens ~noflow ~parse_unchanged workers next
598+ ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged workers next
592599: results Lwt.t =
593600 let t = Unix. gettimeofday () in
594601 let reducer =
595602 reducer
596603 ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch
597- ~max_header_tokens ~noflow ~parse_unchanged
604+ ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged
598605 in
599606 let % lwt results = MultiWorkerLwt. call
600607 workers
@@ -618,15 +625,15 @@ let parse ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch ~profile
618625 Lwt. return results
619626
620627let reparse
621- ~transaction ~reader ~parse_options ~profile ~max_header_tokens ~noflow
628+ ~transaction ~reader ~parse_options ~profile ~max_header_tokens ~noflow ~ jsx_pragma
622629 ~parse_unchanged ~with_progress ~workers ~modified :files ~deleted =
623630 (* save old parsing info for files *)
624631 let all_files = FilenameSet. union files deleted in
625632 let master_mutator, worker_mutator = Parsing_heaps.Reparse_mutator. create transaction all_files in
626633 let next = next_of_filename_set ?with_progress workers files in
627634 let % lwt results =
628635 parse ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch: false ~profile
629- ~max_header_tokens ~noflow ~parse_unchanged workers next
636+ ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged workers next
630637 in
631638 let modified = results.parse_ok |> FilenameMap. keys |> FilenameSet. of_list in
632639 let modified = List. fold_left (fun acc (fail , _ , _ ) ->
@@ -648,6 +655,7 @@ let parse_with_defaults ?types_mode ?use_strict ~reader options workers next =
648655 in
649656 let module_ref_prefix = Options. haste_module_ref_prefix options in
650657 let facebook_fbt = Options. facebook_fbt options in
658+ let jsx_pragma = Options. jsx_pragma options in
651659 let arch = options.Options. opt_arch in
652660 let parse_options =
653661 make_parse_options ~arch ~types_mode ~use_strict ~module_ref_prefix ~facebook_fbt ()
@@ -657,7 +665,7 @@ let parse_with_defaults ?types_mode ?use_strict ~reader options workers next =
657665 let worker_mutator = Parsing_heaps.Parse_mutator. create () in
658666 parse
659667 ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch: false
660- ~profile ~max_header_tokens ~noflow ~parse_unchanged workers next
668+ ~profile ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged workers next
661669
662670let reparse_with_defaults
663671 ~transaction ~reader ?types_mode ?use_strict ?with_progress
@@ -668,12 +676,13 @@ let reparse_with_defaults
668676 let module_ref_prefix = Options. haste_module_ref_prefix options in
669677 let parse_unchanged = false in (* We're rechecking, so let's skip files which haven't changed *)
670678 let facebook_fbt = Options. facebook_fbt options in
679+ let jsx_pragma = Options. jsx_pragma options in
671680 let arch = options.Options. opt_arch in
672681 let parse_options =
673682 make_parse_options ~arch ~types_mode ~use_strict ~module_ref_prefix ~facebook_fbt ()
674683 in
675684 reparse
676- ~transaction ~reader ~parse_options ~profile ~max_header_tokens ~noflow
685+ ~transaction ~reader ~parse_options ~profile ~max_header_tokens ~noflow ~jsx_pragma
677686 ~parse_unchanged ~with_progress ~workers ~modified ~deleted
678687
679688(* ensure_parsed takes a set of files, finds the files which haven't been parsed, and parses them.
@@ -710,6 +719,7 @@ let ensure_parsed ~reader options workers files =
710719 MultiWorkerLwt. next ~progress_fn workers (FilenameSet. elements files_missing_asts)
711720 in
712721 let facebook_fbt = Options. facebook_fbt options in
722+ let jsx_pragma = Options. jsx_pragma options in
713723 let arch = options.Options. opt_arch in
714724
715725 let parse_options =
@@ -718,7 +728,7 @@ let ensure_parsed ~reader options workers files =
718728
719729 let % lwt results = parse
720730 ~worker_mutator ~reader ~parse_options ~skip_hash_mismatch: true
721- ~profile ~max_header_tokens ~noflow ~parse_unchanged workers next
731+ ~profile ~max_header_tokens ~noflow ~jsx_pragma ~ parse_unchanged workers next
722732 in
723733
724734 Lwt. return results.parse_hash_mismatch_skips
0 commit comments