client/command_arguments.py (149 lines of code) (raw):
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
import enum
from dataclasses import dataclass, field
from pathlib import Path
from typing import List, Optional, Set
TEXT: str = "text"
JSON: str = "json"
SARIF: str = "sarif"
class IncrementalStyle(enum.Enum):
SHALLOW = "shallow"
FINE_GRAINED = "fine_grained"
def __str__(self) -> str:
return self.value
class ProfileOutput(enum.Enum):
TRACE_EVENT: str = "trace_event"
COLD_START_PHASES: str = "cold_start_phases"
INCREMENTAL_UPDATES: str = "incremental_updates"
TAINT: str = "taint"
INDIVIDUAL_TABLE_SIZES: str = "individual_table_sizes"
TOTAL_SHARED_MEMORY_SIZE_OVER_TIME: str = "total_shared_memory_size_over_time"
TOTAL_SHARED_MEMORY_SIZE_OVER_TIME_GRAPH: str = (
"total_shared_memory_size_over_time_graph" # noqa B950
)
def __str__(self) -> str:
return self.value
class MissingFlowsKind(str, enum.Enum):
OBSCURE: str = "obscure"
TYPE: str = "type"
@dataclass(frozen=True)
class CommandArguments:
local_configuration: Optional[str] = None
version: bool = False
debug: bool = False
sequential: bool = False
strict: bool = False
show_error_traces: bool = False
output: str = TEXT
enable_profiling: bool = False
enable_memory_profiling: bool = False
noninteractive: bool = False
logging_sections: Optional[str] = None
log_identifier: Optional[str] = None
logger: Optional[str] = None
targets: List[str] = field(default_factory=list)
source_directories: List[str] = field(default_factory=list)
do_not_ignore_errors_in: List[str] = field(default_factory=list)
buck_mode: Optional[str] = None
no_saved_state: bool = False
search_path: List[str] = field(default_factory=list)
binary: Optional[str] = None
exclude: List[str] = field(default_factory=list)
typeshed: Optional[str] = None
save_initial_state_to: Optional[str] = None
load_initial_state_from: Optional[str] = None
changed_files_path: Optional[str] = None
saved_state_project: Optional[str] = None
dot_pyre_directory: Optional[Path] = None
isolation_prefix: Optional[str] = None
python_version: Optional[str] = None
shared_memory_heap_size: Optional[int] = None
shared_memory_dependency_table_power: Optional[int] = None
shared_memory_hash_table_power: Optional[int] = None
number_of_workers: Optional[int] = None
enable_hover: Optional[bool] = None
enable_go_to_definition: Optional[bool] = None
use_buck2: Optional[bool] = None
@dataclass(frozen=True)
class StartArguments:
changed_files_path: Optional[str] = None
debug: bool = False
enable_memory_profiling: bool = False
enable_profiling: bool = False
load_initial_state_from: Optional[str] = None
log_identifier: Optional[str] = None
logging_sections: Optional[str] = None
no_saved_state: bool = False
no_watchman: bool = False
noninteractive: bool = False
save_initial_state_to: Optional[str] = None
saved_state_project: Optional[str] = None
sequential: bool = False
show_error_traces: bool = False
store_type_check_resolution: bool = False
terminal: bool = False
wait_on_initialization: bool = False
@dataclass(frozen=True)
class IncrementalArguments:
output: str = TEXT
no_start: bool = False
start_arguments: StartArguments = field(default_factory=StartArguments)
@dataclass(frozen=True)
class CheckArguments:
debug: bool = False
enable_memory_profiling: bool = False
enable_profiling: bool = False
log_identifier: Optional[str] = None
logging_sections: Optional[str] = None
noninteractive: bool = False
output: str = TEXT
sequential: bool = False
show_error_traces: bool = False
@dataclass(frozen=True)
class InferArguments:
working_directory: Path
annotate_attributes: bool = False
annotate_from_existing_stubs: bool = False
debug_infer: bool = False
quote_annotations: bool = False
dequalify: bool = False
enable_memory_profiling: bool = False
enable_profiling: bool = False
log_identifier: Optional[str] = None
logging_sections: Optional[str] = None
use_future_annotations: bool = False
in_place: bool = False
simple_annotations: bool = False
paths_to_modify: Optional[Set[Path]] = None
print_only: bool = False
read_stdin: bool = False
sequential: bool = False
@dataclass(frozen=True)
class RageArguments:
output: Optional[Path] = None
server_log_count: Optional[int] = None
@dataclass(frozen=True)
class StatisticsArguments:
filter_paths: List[str] = field(default_factory=list)
log_identifier: Optional[str] = None
log_results: bool = False
print_aggregates: bool = False
@dataclass(frozen=True)
class AnalyzeArguments:
debug: bool = False
dump_call_graph: Optional[str] = None
dump_model_query_results: Optional[str] = None
enable_memory_profiling: bool = False
enable_profiling: bool = False
find_missing_flows: Optional[MissingFlowsKind] = None
inline_decorators: bool = False
log_identifier: Optional[str] = None
maximum_tito_depth: Optional[int] = None
maximum_trace_length: Optional[int] = None
no_verify: bool = False
output: str = TEXT
repository_root: Optional[str] = None
rule: List[int] = field(default_factory=list)
save_results_to: Optional[str] = None
sequential: bool = False
taint_models_path: List[str] = field(default_factory=list)
use_cache: bool = False