2 * Copyright (c) 2015, Facebook, Inc.
5 * This source code is licensed under the MIT license found in the
6 * LICENSE file in the "hack" directory of this source tree.
10 open Config_file.Getters
13 module Watchman
= struct
20 sockname
: string option;
23 synchronous_timeout
: int;
28 debug_logging
= false;
30 (* buck and hgwatchman use a 10 second timeout, too *)
34 synchronous_timeout
= 120;
37 let load ~current_version ~
default config
=
38 let prefix = Some
"watchman" in
42 ~
default:default.enabled
55 int_
"init_timeout" ~
prefix ~
default:default.init_timeout config
57 let sockname = string_opt
"sockname" ~
prefix config
in
62 ~
default:default.subscribe
66 let synchronous_timeout =
70 ~
default:default.synchronous_timeout
77 ~
default:default.debug_logging
91 module RemoteTypeCheck
= struct
93 (* Controls the `defer_class_declaration_threshold` setting on the remote worker *)
94 declaration_threshold
: int;
95 (* A list of error phases; if, before type checking, errors in these phases
96 are present, then remote type checking will be disabled *)
97 disabled_on_errors
: Errors.phase list
;
98 (* Enables remote type check *)
100 (* Indicates how long to wait between heartbeats (in seconds) *)
101 heartbeat_period
: int;
102 load_naming_table_on_full_init
: bool;
105 (* Dictates the number of remote type checking workers *)
107 (* Indicates whether files-to-declare should be fetched by VFS
108 (see `declaration_threshold`) *)
109 prefetch_deferred_files
: bool;
110 (* If set, distributes type checking to remote workers if the number of files to
111 type check exceeds the threshold. If not set, then always checks everything locally. *)
112 recheck_threshold
: int option;
113 worker_min_log_level
: Hh_logger.Level.t
;
114 (* Indicates the size of the job below which a virtual file system should
115 be used by the remote worker *)
116 worker_vfs_checkout_threshold
: int;
117 (* File system mode used by ArtifactStore *)
118 file_system_mode
: ArtifactStore.file_system_mode
;
124 declaration_threshold
= 50;
125 disabled_on_errors
= [];
126 (* Indicates how long to wait between heartbeats (in seconds) *)
127 heartbeat_period
= 15;
128 load_naming_table_on_full_init
= false;
129 max_batch_size
= 25_000;
130 min_batch_size
= 5_000;
132 prefetch_deferred_files
= false;
133 recheck_threshold
= None
;
134 worker_min_log_level
= Hh_logger.Level.Info
;
135 worker_vfs_checkout_threshold
= 10_000;
136 file_system_mode
= ArtifactStore.Distributed
;
139 let load ~current_version ~
default config
=
140 let prefix = Some
"remote_type_check" in
141 let declaration_threshold =
143 "declaration_threshold"
145 ~
default:default.declaration_threshold
149 let file_system_mode =
150 let open ArtifactStore
in
151 let file_system_mode =
155 ~
default:(string_of_file_system_mode Distributed
)
158 match file_system_mode_of_string
file_system_mode with
160 | None
-> Distributed
162 let enabled_on_errors =
165 ~delim
:(Str.regexp
",")
169 |> List.fold ~init
:[] ~f
:(fun acc phase
->
170 match Errors.phase_of_string phase
with
171 | Some phase
-> phase
:: acc
174 let disabled_on_errors =
176 [Errors.Typing
; Errors.Decl
; Errors.Parsing
; Errors.Init
; Errors.Naming
]
179 (List.exists
enabled_on_errors ~f
:(fun enabled_phase
->
180 enabled_phase
= phase
)))
182 let heartbeat_period =
183 int_
"heartbeat_period" ~
prefix ~
default:default.heartbeat_period config
186 int_
"num_workers" ~
prefix ~
default:default.num_workers config
189 int_
"max_batch_size" ~
prefix ~
default:default.max_batch_size config
192 int_
"min_batch_size" ~
prefix ~
default:default.min_batch_size config
194 let prefetch_deferred_files =
196 "prefetch_deferred_files"
198 ~
default:default.prefetch_deferred_files
202 let recheck_threshold = int_opt
"recheck_threshold" ~
prefix config
in
203 let load_naming_table_on_full_init =
205 "load_naming_table_on_full_init"
207 ~
default:default.load_naming_table_on_full_init
215 ~
default:default.enabled
219 let worker_min_log_level =
221 Hh_logger.Level.of_enum_string
222 (String.lowercase_ascii
225 "worker_min_log_level"
227 (Hh_logger.Level.to_enum_string
default.worker_min_log_level)
230 | Some level
-> level
231 | None
-> Hh_logger.Level.Debug
233 let worker_vfs_checkout_threshold =
235 "worker_vfs_checkout_threshold"
237 ~
default:default.worker_vfs_checkout_threshold
241 declaration_threshold;
245 load_naming_table_on_full_init;
249 prefetch_deferred_files;
251 worker_min_log_level;
252 worker_vfs_checkout_threshold;
257 module RecheckCapture
= struct
259 (* Enables recheck environment capture *)
261 (* If the error theshold is not met, then the recheck environment that
262 doesn't meet the fanout-related thresholds will not be captured. *)
263 error_threshold
: int;
264 (* We will automatically capture the recheck environment if
265 the number of files to recheck exceeds this threshold.
266 The number of rechecked files is always less than or equal to
268 fanout_threshold
: int;
269 (* We will automatically capture the recheck environment if
270 the number of rechecked files exceeds this threshold *)
271 rechecked_files_threshold
: int;
272 (* If set, determines the rate of sampling of rechecks regardless of
273 their fanout size. The error threshold would still apply.
274 NOTE: valid values fall between 0.0 (0%) and 1.0 (100%).
275 Values less than 0.0 will be interpreted as 0.0; values greater than
276 1.0 will be interpreted as 1.0 *)
277 sample_threshold
: float;
283 (* We wouldn't capture small rechecks unless they have at least
286 (* If capturing is enabled and the recheck fanout (pre-type-check)
287 meets this threshold, then we would snapshot the changed files. *)
288 fanout_threshold
= 40_000;
289 (* If the number of files actually rechecked meets this threshold
290 and we already snapshotted the changed files based on fanout
291 size or sampling, we would capture the recheck environment. *)
292 rechecked_files_threshold
= 5_000;
293 (* We wouldn't take changed files snapshots of small fanouts
294 unless they are randomly selected with the probability controlled
295 by the sample_threshold setting. By default, we don't snapshot
296 any small fanouts. *)
297 sample_threshold
= 0.0;
300 let load ~current_version ~
default config
=
301 let prefix = Some
"recheck_capture" in
306 ~
default:default.enabled
310 let error_threshold =
311 int_
"error_threshold" ~
prefix ~
default:default.error_threshold config
313 let fanout_threshold =
314 int_
"fanout_threshold" ~
prefix ~
default:default.fanout_threshold config
316 let rechecked_files_threshold =
318 "rechecked_files_threshold"
320 ~
default:default.rechecked_files_threshold
323 let sample_threshold =
324 let sample_threshold =
328 ~
default:default.sample_threshold
331 if sample_threshold > 1.0 then
333 else if sample_threshold < 0.0 then
342 rechecked_files_threshold;
348 min_log_level
: Hh_logger.Level.t
;
349 (* Indicates whether we attempt to fix the credentials if they're broken *)
350 attempt_fix_credentials
: bool;
351 log_categories
: string list
;
352 (* the list of experiments from the experiments config *)
353 experiments
: string list
;
354 (* a free-form diagnostic string *)
355 experiments_config_meta
: string;
356 use_saved_state
: bool;
357 (* should we attempt to load saved-state? (subject to further options) *)
358 require_saved_state
: bool;
359 (* if attempting saved-state, should we fail upon failure? *)
360 load_state_script_timeout
: int;
361 (** Prefer using Ocaml implementation over load script. *)
363 load_state_natively
: bool;
364 type_decl_bucket_size
: int;
365 extend_fast_bucket_size
: int;
367 enable_fuzzy_search
: bool;
370 (* Limit the number of clients that can sit in purgatory waiting
371 * for a server to be started because we don't want this to grow
373 max_purgatory_clients
: int;
374 search_chunk_size
: int;
377 saved_state_cache_limit
: int;
378 can_skip_deptable
: bool;
379 shm_dirs
: string list
;
380 state_loader_timeouts
: State_loader_config.timeouts
;
381 max_workers
: int option;
382 max_bucket_size
: int;
383 (* See HhMonitorInformant. *)
384 use_dummy_informant
: bool;
385 informant_min_distance_restart
: int;
386 informant_use_xdb
: bool;
387 use_full_fidelity_parser
: bool;
388 interrupt_on_watchman
: bool;
389 interrupt_on_client
: bool;
391 prechecked_files
: bool;
392 predeclare_ide
: bool;
393 predeclare_ide_deps
: bool;
394 max_typechecker_worker_memory_mb
: int option;
396 hg_aware_parsing_restart_threshold
: int;
397 hg_aware_redecl_restart_threshold
: int;
398 hg_aware_recheck_restart_threshold
: int;
399 (* Flag to disable conservative behavior in incremental-mode typechecks.
401 * By default, when a class has changed and we do not have access to the old
402 * version of its declaration (and thus cannot determine HOW it has changed),
403 * we conservatively redeclare the entire set of files where the class or any
404 * of its members were referenced. Likewise for definitions of functions or
407 * This flag disables that behavior--instead, when a class has changed, we
408 * only redeclare files with an Extends dependency on the class, and we do not
409 * redeclare any files when a function or global constant changes.
411 disable_conservative_redecl
: bool;
412 ide_parser_cache
: bool;
413 ide_tast_cache
: bool;
414 (* When enabled, save hot class declarations (for now, specified in a special
415 file in the repository) when generating a saved state. *)
416 store_decls_in_saved_state
: bool;
417 (* When enabled, load class declarations stored in the saved state, if any, on
419 load_decls_from_saved_state
: bool;
420 (* Size of Gc.major_slice to be performed when server is idle. 0 to disable *)
422 (* Look up class members lazily from shallow declarations instead of eagerly
423 computing folded declarations representing the entire class type. *)
424 shallow_class_decl
: bool;
425 (* If false, only the type check delegate's logic will be used.
426 If the delegate fails to type check, the typing check service as a whole
428 num_local_workers
: int option;
429 (* If the number of files to type check is fewer than this value, the files
430 will be type checked sequentially (in the master process). Otherwise,
431 the files will be type checked in parallel (in MultiWorker workers). *)
432 parallel_type_checking_threshold
: int;
433 (* If set, defers class declarations after N lazy declarations; if not set,
434 always lazily declares classes not already in cache. *)
435 defer_class_declaration_threshold
: int option;
436 (* If set, prevents type checking of files from being deferred more than
437 the number of times greater than or equal to the threshold. If not set,
438 defers class declarations indefinitely. *)
439 max_times_to_defer_type_checking
: int option;
440 (* The whether to use the hook that prefetches files on an Eden checkout *)
441 prefetch_deferred_files: bool;
442 (* Settings controlling how and whether we capture the recheck environment *)
443 recheck_capture
: RecheckCapture.t
;
444 (* The version of the Remote Execution CLI tool to use *)
445 recli_version
: string;
446 (* Remote type check settings that can be changed, e.g., by GK *)
447 remote_type_check
: RemoteTypeCheck.t
;
448 (* If set, uses the key to fetch type checking jobs *)
449 remote_worker_key
: string option;
450 (* If set, uses the check ID when logging events in the context of remove init/work *)
451 remote_check_id
: string option;
452 (* The version of the package the remote worker is to install *)
453 remote_version_specifier
: string option;
454 (* Name of the transport channel used by remote type checking. TODO: move into remote_type_check. *)
455 remote_transport_channel
: string option;
456 (* Enables the reverse naming table to fall back to SQLite for queries. *)
457 naming_sqlite_path
: string option;
458 enable_naming_table_fallback
: bool;
459 (* Selects a search provider for autocomplete and symbol search *)
460 symbolindex_search_provider
: string;
461 symbolindex_quiet
: bool;
462 symbolindex_file
: string option;
463 (* Allows hh_server to invalidate units in hhvm based on local changes *)
464 tico_invalidate_files
: bool;
465 (* Use finer grain hh_server dependencies *)
466 tico_invalidate_smart
: bool;
467 (* If --profile-log, we'll record telemetry on typechecks that took longer than the threshold. In case of profile_type_check_twice we judge by the second type check. *)
468 profile_type_check_duration_threshold
: float;
469 (* The flag "--config profile_type_check_twice=true" causes each file to be typechecked twice in succession. If --profile-log then both times are logged. *)
470 profile_type_check_twice
: bool;
471 (* If --profile-log, we can use "--config profile_owner=<str>" to send an arbitrary "owner" along with the telemetry *)
472 profile_owner
: string;
473 (* If --profile-log, we can use "--config profile_desc=<str>" to send an arbitrary "desc" along with telemetry *)
474 profile_desc
: string;
475 (* Allows the IDE to show the 'find all implementations' button *)
476 go_to_implementation
: bool;
477 watchman
: Watchman.t
;
482 min_log_level
= Hh_logger.Level.Info
;
483 attempt_fix_credentials
= false;
486 experiments_config_meta
= "";
487 use_saved_state
= false;
488 require_saved_state
= false;
489 load_state_script_timeout
= 20;
490 load_state_natively
= false;
491 type_decl_bucket_size
= 1000;
492 extend_fast_bucket_size
= 2000;
493 enable_on_nfs
= false;
494 enable_fuzzy_search
= true;
497 max_purgatory_clients
= 400;
498 search_chunk_size
= 0;
501 saved_state_cache_limit
= 20;
502 can_skip_deptable
= true;
503 shm_dirs
= [GlobalConfig.shm_dir
; GlobalConfig.tmp_dir
];
505 max_bucket_size
= Bucket.max_size
();
506 state_loader_timeouts
= State_loader_config.default_timeouts
;
507 use_dummy_informant
= true;
508 informant_min_distance_restart
= 100;
509 informant_use_xdb
= false;
510 use_full_fidelity_parser
= true;
511 interrupt_on_watchman
= false;
512 interrupt_on_client
= false;
513 trace_parsing
= false;
514 prechecked_files
= false;
515 predeclare_ide
= false;
516 predeclare_ide_deps
= false;
517 max_typechecker_worker_memory_mb
= None
;
519 hg_aware_parsing_restart_threshold
= 0;
520 hg_aware_redecl_restart_threshold
= 0;
521 hg_aware_recheck_restart_threshold
= 0;
522 disable_conservative_redecl
= false;
523 ide_parser_cache
= false;
524 ide_tast_cache
= false;
525 store_decls_in_saved_state
= false;
526 load_decls_from_saved_state
= false;
528 shallow_class_decl
= false;
529 num_local_workers
= None
;
530 parallel_type_checking_threshold
= 10;
531 defer_class_declaration_threshold
= None
;
532 max_times_to_defer_type_checking
= None
;
533 prefetch_deferred_files = false;
534 recheck_capture
= RecheckCapture.default;
535 recli_version
= "STABLE";
536 remote_type_check
= RemoteTypeCheck.default;
537 remote_worker_key
= None
;
538 remote_check_id
= None
;
539 remote_version_specifier
= None
;
540 remote_transport_channel
= None
;
541 naming_sqlite_path
= None
;
542 enable_naming_table_fallback
= false;
543 symbolindex_search_provider
= "SqliteIndex";
544 symbolindex_quiet
= false;
545 symbolindex_file
= None
;
546 tico_invalidate_files
= false;
547 tico_invalidate_smart
= false;
548 profile_type_check_duration_threshold
= 0.05;
549 profile_type_check_twice
= false;
553 go_to_implementation
= true;
554 watchman
= Watchman.default;
559 try Sys.getenv
"HH_LOCALCONF_PATH"
560 with _
-> BuildOptions.system_config_path
562 Filename.concat
dir "hh.conf"
564 let state_loader_timeouts_ ~
default config
=
565 State_loader_config.(
566 let package_fetch_timeout =
568 "state_loader_timeout_package_fetch"
569 ~
default:default.package_fetch_timeout
572 let find_exact_state_timeout =
574 "state_loader_timeout_find_exact_state"
575 ~
default:default.find_exact_state_timeout
578 let find_nearest_state_timeout =
580 "state_loader_timeout_find_nearest_state"
581 ~
default:default.find_nearest_state_timeout
584 let current_hg_rev_timeout =
586 "state_loader_timeout_current_hg_rev"
587 ~
default:default.current_hg_rev_timeout
590 let current_base_rev_timeout =
592 "state_loader_timeout_current_base_rev_timeout"
593 ~
default:default.current_base_rev_timeout
597 State_loader_config.package_fetch_timeout;
598 find_exact_state_timeout;
599 find_nearest_state_timeout;
600 current_hg_rev_timeout;
601 current_base_rev_timeout;
604 let apply_overrides ~silent ~current_version ~config ~overrides
=
605 (* First of all, apply the CLI overrides so the settings below could be specified
606 altered via the CLI, even though the CLI overrides take precedence
607 over the experiments overrides *)
608 let config = Config_file.apply_overrides ~silent ~
config ~overrides
in
609 let prefix = Some
"experiments_config" in
611 bool_if_min_version
"enabled" ~
prefix ~
default:false ~current_version
config
614 Disk.mkdir_p
GlobalConfig.tmp_dir
;
615 let dir = string_
"path" ~
prefix ~
default:GlobalConfig.tmp_dir
config in
616 let owner = Sys_utils.get_primary_owner
() in
617 let file = Filename.concat
dir (Printf.sprintf
"hh.%s.experiments" owner) in
626 let ttl = float_of_int
(int_
"ttl_seconds" ~
prefix ~
default:86400 config) in
627 let source = string_opt
"source" ~
prefix config in
630 match Experiments_config_file.update ~
file ~
source ~
ttl with
632 | Error message
-> message
634 "Updating experimental config not enabled"
636 if Disk.file_exists
file then
637 (* Apply the experiments overrides *)
638 let experiment_overrides = Config_file.parse_local_config ~silent
file in
640 Config_file.apply_overrides
643 ~overrides
:experiment_overrides
645 (* Finally, reapply the CLI overrides, since they should take
646 precedence over the experiments overrides *)
647 (meta, Config_file.apply_overrides ~silent ~
config ~overrides
)
649 ("Experimental config not found on disk", config)
651 ("Experimental config not enabled", config)
653 let load_ fn ~silent ~current_version overrides
=
654 let config = Config_file.parse_local_config ~silent fn
in
655 let (experiments_config_meta
, config) =
656 apply_overrides ~silent ~current_version ~
config ~overrides
661 ~delim
:(Str.regexp
",")
662 ~
default:default.experiments
669 ~delim
:(Str.regexp
",")
670 ~
default:default.log_categories
675 Hh_logger.Level.of_enum_string
676 (String.lowercase_ascii
679 ~
default:(Hh_logger.Level.to_enum_string
default.min_log_level)
682 | Some level
-> level
683 | None
-> Hh_logger.Level.Debug
686 let use_saved_state =
687 bool_if_version
"use_mini_state" ~
default:default.use_saved_state config
689 let require_saved_state =
691 "require_saved_state"
692 ~
default:default.require_saved_state
695 let attempt_fix_credentials =
697 "attempt_fix_credentials"
698 ~
default:default.attempt_fix_credentials
703 bool_if_version
"enable_on_nfs" ~
default:default.enable_on_nfs config
705 let enable_fuzzy_search =
707 "enable_fuzzy_search"
708 ~
default:default.enable_fuzzy_search
712 bool_if_version
"lazy_parse" ~
default:default.lazy_parse config
715 bool_if_version
"lazy_init2" ~
default:default.lazy_init config
717 let max_purgatory_clients =
718 int_
"max_purgatory_clients" ~
default:default.max_purgatory_clients config
720 let search_chunk_size =
721 int_
"search_chunk_size" ~
default:default.search_chunk_size config
723 let load_state_script_timeout =
725 "load_mini_script_timeout"
726 ~
default:default.load_state_script_timeout
729 let load_state_natively =
731 "load_state_natively_v4"
732 ~
default:default.load_state_natively
735 let state_loader_timeouts =
736 state_loader_timeouts_ ~
default:State_loader_config.default_timeouts
config
738 let use_dummy_informant =
740 "use_dummy_informant"
741 ~
default:default.use_dummy_informant
744 let informant_min_distance_restart =
746 "informant_min_distance_restart"
747 ~
default:default.informant_min_distance_restart
750 let informant_use_xdb =
752 "informant_use_xdb_v5"
753 ~
default:default.informant_use_xdb
756 let type_decl_bucket_size =
757 int_
"type_decl_bucket_size" ~
default:default.type_decl_bucket_size config
759 let extend_fast_bucket_size =
761 "extend_fast_bucket_size"
762 ~
default:default.extend_fast_bucket_size
765 let io_priority = int_
"io_priority" ~
default:default.io_priority config in
766 let cpu_priority = int_
"cpu_priority" ~
default:default.cpu_priority config in
767 let saved_state_cache_limit =
769 "saved_state_cache_limit"
770 ~
default:default.saved_state_cache_limit
773 let can_skip_deptable =
776 ~
default:default.can_skip_deptable
781 ~delim
:(Str.regexp
",")
783 ~
default:default.shm_dirs
785 |> List.map ~f
:(fun dir -> Path.(to_string
@@ make
dir))
787 let max_workers = int_opt
"max_workers" config in
788 let max_bucket_size =
789 int_
"max_bucket_size" ~
default:default.max_bucket_size config
791 let interrupt_on_watchman =
793 "interrupt_on_watchman"
794 ~
default:default.interrupt_on_watchman
797 let interrupt_on_client =
799 "interrupt_on_client"
800 ~
default:default.interrupt_on_client
803 let use_full_fidelity_parser =
805 "use_full_fidelity_parser"
806 ~
default:default.use_full_fidelity_parser
810 bool_if_version
"trace_parsing" ~
default:default.trace_parsing config
812 let prechecked_files =
813 bool_if_version
"prechecked_files" ~
default:default.prechecked_files config
816 bool_if_version
"predeclare_ide" ~
default:default.predeclare_ide config
818 let predeclare_ide_deps =
820 "predeclare_ide_deps"
821 ~
default:default.predeclare_ide_deps
824 let max_typechecker_worker_memory_mb =
825 int_opt
"max_typechecker_worker_memory_mb" config
827 let hg_aware = bool_if_version
"hg_aware" ~
default:default.hg_aware config in
828 let disable_conservative_redecl =
830 "disable_conservative_redecl"
831 ~
default:default.disable_conservative_redecl
834 let store_decls_in_saved_state =
836 "store_decls_in_saved_state"
837 ~
default:default.store_decls_in_saved_state
840 let load_decls_from_saved_state =
842 "load_decls_from_saved_state"
843 ~
default:default.load_decls_from_saved_state
846 let hg_aware_parsing_restart_threshold =
848 "hg_aware_parsing_restart_threshold"
849 ~
default:default.hg_aware_parsing_restart_threshold
852 let hg_aware_redecl_restart_threshold =
854 "hg_aware_redecl_restart_threshold"
855 ~
default:default.hg_aware_redecl_restart_threshold
858 let hg_aware_recheck_restart_threshold =
860 "hg_aware_recheck_restart_threshold"
861 ~
default:default.hg_aware_recheck_restart_threshold
864 let ide_parser_cache =
865 bool_if_version
"ide_parser_cache" ~
default:default.ide_parser_cache config
868 bool_if_version
"ide_tast_cache" ~
default:default.ide_tast_cache config
871 int_
"idle_gc_slice" ~
default:default.idle_gc_slice config
873 let shallow_class_decl =
876 ~
default:default.shallow_class_decl
879 let parallel_type_checking_threshold =
881 "parallel_type_checking_threshold"
882 ~
default:default.parallel_type_checking_threshold
885 let num_local_workers = int_opt
"num_local_workers" config in
886 let defer_class_declaration_threshold =
887 int_opt
"defer_class_declaration_threshold" config
889 let max_times_to_defer_type_checking =
890 int_opt
"max_times_to_defer_type_checking" config
892 let prefetch_deferred_files =
894 "prefetch_deferred_files"
899 let recheck_capture =
900 RecheckCapture.load ~current_version ~
default:default.recheck_capture config
902 let remote_type_check =
905 ~
default:default.remote_type_check
909 Watchman.load ~current_version ~
default:default.watchman config
912 string_
"recli_version" ~
default:default.recli_version config
914 let remote_worker_key = string_opt
"remote_worker_key" config in
915 let remote_check_id = string_opt
"remote_check_id" config in
916 let remote_version_specifier = string_opt
"remote_version_specifier" config in
917 let remote_transport_channel = string_opt
"remote_transport_channel" config in
918 let enable_naming_table_fallback =
920 "enable_naming_table_fallback"
921 ~
default:default.enable_naming_table_fallback
925 let naming_sqlite_path =
926 if enable_naming_table_fallback then
927 string_opt
"naming_sqlite_path" config
931 let symbolindex_search_provider =
933 "symbolindex_search_provider"
934 ~
default:default.symbolindex_search_provider
937 let symbolindex_quiet =
940 ~
default:default.symbolindex_quiet
943 let symbolindex_file = string_opt
"symbolindex_file" config in
944 let tico_invalidate_files =
946 "tico_invalidate_files"
947 ~
default:default.tico_invalidate_files
950 let tico_invalidate_smart =
952 "tico_invalidate_smart"
953 ~
default:default.tico_invalidate_smart
956 let profile_type_check_duration_threshold =
958 "profile_type_check_duration_threshold"
959 ~
default:default.profile_type_check_duration_threshold
962 let profile_type_check_twice =
964 "profile_type_check_twice"
965 ~
default:default.profile_type_check_twice
969 string_
"profile_owner" ~
default:default.profile_owner config
972 string_
"profile_desc" ~
default:default.profile_desc config
974 let go_to_implementation =
976 "go_to_implementation"
977 ~
default:default.go_to_implementation
982 attempt_fix_credentials;
985 experiments_config_meta
;
988 load_state_script_timeout;
990 max_purgatory_clients;
991 type_decl_bucket_size;
992 extend_fast_bucket_size;
1000 saved_state_cache_limit;
1005 state_loader_timeouts;
1006 use_dummy_informant;
1007 informant_min_distance_restart;
1009 use_full_fidelity_parser;
1010 interrupt_on_watchman;
1011 interrupt_on_client;
1015 max_typechecker_worker_memory_mb;
1017 hg_aware_parsing_restart_threshold;
1018 hg_aware_redecl_restart_threshold;
1019 hg_aware_recheck_restart_threshold;
1020 disable_conservative_redecl;
1021 predeclare_ide_deps;
1024 store_decls_in_saved_state;
1025 load_decls_from_saved_state;
1029 parallel_type_checking_threshold;
1030 defer_class_declaration_threshold;
1031 max_times_to_defer_type_checking;
1032 prefetch_deferred_files;
1038 remote_version_specifier;
1039 remote_transport_channel;
1041 enable_naming_table_fallback;
1042 symbolindex_search_provider;
1045 tico_invalidate_files;
1046 tico_invalidate_smart;
1047 profile_type_check_duration_threshold;
1048 profile_type_check_twice;
1051 go_to_implementation;
1055 let load ~silent ~current_version config_overrides
=
1056 load_ path ~silent ~current_version config_overrides