{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "Schema for Wake - development, testing, and static analysis framework for Solidity", "properties": { "subconfigs": { "type": "array", "description": "List of paths to additional config files to load", "items": { "type": "string", "format": "path" } }, "api_keys": { "type": "object", "description": "API keys for various services", "additionalProperties": { "type": "string" } }, "compiler": { "type": "object", "properties": { "solc": { "description": "Default configuration for Solidity files not belonging to a subproject", "type": "object", "properties": { "allow_paths": { "type": "array", "description": "Additional allowed paths for solc --allow-paths", "items": { "type": "string", "format": "path" } }, "evm_version": { "type": "string", "description": "Version of the EVM to compile for", "enum": ["homestead", "tangerineWhistle", "spuriousDragon", "byzantium", "constantinople", "petersburg", "istanbul", "berlin", "london", "paris", "shanghai", "cancun", "prague", "osaka"] }, "exclude_paths": { "type": "array", "description": "Files in these paths are excluded from compilation unless imported from non-excluded file", "default": ["node_modules", "venv", ".venv", "lib", "script", "test"], "items": { "type": "string", "format": "path" } }, "include_paths": { "type": "array", "description": "Paths to search for direct (non-relative) imports", "default": ["node_modules"], "items": { "type": "string", "format": "path" } }, "optimizer": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "runs": { "type": "integer", "default": 200, "minimum": 1 }, "details": { "type": "object", "properties": { "peephole": { "type": "boolean" }, "inliner": { "type": "boolean" }, "jumpdest_remover": { "type": "boolean" }, "order_literals": { "type": "boolean" }, "deduplicate": { "type": "boolean" }, "cse": { "type": "boolean" }, "constant_optimizer": { "type": "boolean" }, "simple_counter_for_loop_unchecked_increment": { "type": "boolean" }, "yul_details": { "type": "object", "properties": { "stack_allocation": { "type": "boolean" }, "optimizer_steps": { "type": "string" } } } } } } }, "remappings": { "type": "array", "items": { "type": "string" } }, "target_version": { "type": "string", "description": "Target Solidity version for all files", "pattern": "^\\d+\\.\\d+\\.\\d+$" }, "via_IR": { "type": "boolean", "description": "Use new IR-based compiler pipeline" }, "metadata": { "type": "object", "properties": { "append_CBOR": { "type": "boolean" }, "use_literal_content": { "type": "boolean" }, "bytecode_hash": { "type": "string", "enum": ["none", "ipfs", "bzzr1"] } } } } } } }, "lsp": { "type": "object", "description": "Configuration for the Language Server Protocol features", "properties": { "compilation_delay": { "type": "number", "description": "Delay to wait after a file content change before recompiling", "default": 0, "minimum": 0 }, "code_lens": { "type": "object", "description": "Configuration for LSP code lens features", "properties": { "enable": { "type": "boolean", "default": true, "description": "Show code lenses" }, "sort_tag_priority": { "type": "array", "description": "Order of code lens with the same start and end position", "default": ["lsp-references", "lsp-selectors", "lsp-inheritance-graph", "lsp-linearized-inheritance-graph"], "items": { "type": "string" } } } }, "detectors": { "type": "object", "properties": { "enable": { "type": "boolean", "default": true, "description": "Run detectors in LSP" } } }, "inlay_hints": { "type": "object", "description": "Configuration for LSP inlay hints", "properties": { "enable": { "type": "boolean", "default": true, "description": "Show inlay hints" }, "sort_tag_priority": { "type": "array", "description": "Priority order for inlay hint types", "default": [], "items": { "type": "string" } } } }, "find_references": { "type": "object", "properties": { "include_declarations": { "type": "boolean", "default": false, "description": "Include declarations in the results" } } } } }, "testing": { "type": "object", "description": "Configuration for testing", "properties": { "cmd": { "type": "string", "enum": ["anvil", "ganache", "hardhat"], "default": "anvil", "description": "Which development chain to use for testing" }, "anvil": { "type": "object", "properties": { "cmd_args": { "type": "string", "default": "--prune-history 100 --transaction-block-keeper 10 --steps-tracing --silent", "description": "Arguments for the Anvil command" } } }, "ganache": { "type": "object", "properties": { "cmd_args": { "type": "string", "default": "-k istanbul -q", "description": "Arguments for the Ganache command" } } }, "hardhat": { "type": "object", "properties": { "cmd_args": { "type": "string", "default": "", "description": "Arguments for the Hardhat command" } } } } }, "deployment": { "type": "object", "description": "Configuration for deployment", "properties": { "confirm_transactions": { "type": "boolean", "default": true, "description": "Require confirmation for each transaction" }, "silent": { "type": "boolean", "default": false, "description": "Do not require confirmation for each transaction and do not print transaction status" } } }, "detectors": { "type": "object", "description": "Configuration for detectors", "properties": { "exclude": { "type": "array", "description": "Names of detectors that should not be loaded", "items": { "type": "string" }, "default": [] }, "only": { "type": "array", "description": "Names of detectors that should only be loaded", "items": { "type": "string" } }, "ignore_paths": { "type": "array", "description": "Detections in these paths must be ignored under all circumstances. Useful for ignoring detections in Solidity test files", "items": { "type": "string", "format": "path" }, "default": ["venv", ".venv", "test"] }, "exclude_paths": { "type": "array", "description": "Detections in these paths are ignored unless linked to a (sub)detection in a non-excluded path. Useful for ignoring detections in dependencies", "items": { "type": "string", "format": "path" }, "default": ["node_modules", "lib", "script"] } } }, "printers": { "type": "object", "description": "Configuration for printers", "properties": { "exclude": { "type": "array", "description": "Names of printers that should not be loaded", "items": { "type": "string" }, "default": [] }, "only": { "type": "array", "description": "Names of printers that should only be loaded", "items": { "type": "string" } } } }, "detector": { "type": "object", "description": "Namespace for detector-specific config options. Each property should be named after the detector name and hold an object with string keys matching the Click option names", "additionalProperties": { "type": "object" } }, "printer": { "type": "object", "description": "Namespace for printer-specific config options. Each property should be named after the printer name and hold an object with string keys matching the Click option names", "additionalProperties": { "type": "object" } }, "general": { "type": "object", "properties": { "call_trace_options": { "type": "array", "items": { "type": "string", "enum": ["contract_name", "address", "function_name", "named_arguments", "arguments", "status", "call_type", "value", "gas", "sender", "return_value", "error", "events"] }, "default": ["contract_name", "function_name", "named_arguments", "status", "call_type", "value", "return_value", "error", "events"], "description": "Information to show in call traces" }, "json_rpc_timeout": { "type": "number", "default": 15, "minimum": 0, "description": "Timeout applied to JSON-RPC requests" }, "link_format": { "type": "string", "default": "vscode://file/{path}:{line}:{col}", "description": "Format of links used in detectors and printers" } } }, "generator": { "type": "object", "description": "Unstable, may change in the future", "properties": { "control_flow_graph": { "type": "object", "properties": { "direction": { "type": "string", "enum": ["TB", "BT", "LR", "RL"], "description": "Graph direction: TB (top-bottom), BT (bottom-top), LR (left-right), RL (right-left)", "default": "TB" }, "vscode_urls": { "type": "boolean", "description": "Generate VSCode-compatible URLs in graph output", "default": true } } }, "imports_graph": { "type": "object", "properties": { "direction": { "type": "string", "enum": ["TB", "BT", "LR", "RL"], "description": "Graph direction: TB (top-bottom), BT (bottom-top), LR (left-right), RL (right-left)", "default": "TB" }, "imports_direction": { "type": "string", "enum": ["imported-to-importing", "importing-to-imported"], "description": "Direction of import arrows in the graph", "default": "imported-to-importing" }, "vscode_urls": { "type": "boolean", "description": "Generate VSCode-compatible URLs in graph output", "default": true } } }, "inheritance_graph": { "type": "object", "properties": { "direction": { "type": "string", "enum": ["TB", "BT", "LR", "RL"], "default": "BT", "description": "Graph direction: TB (top-bottom), BT (bottom-top), LR (left-right), RL (right-left)" }, "vscode_urls": { "type": "boolean", "default": true, "description": "Generate VSCode-compatible URLs in graph output" } } }, "inheritance_graph_full": { "type": "object", "properties": { "direction": { "type": "string", "enum": ["TB", "BT", "LR", "RL"], "default": "BT", "description": "Graph direction: TB (top-bottom), BT (bottom-top), LR (left-right), RL (right-left)" }, "vscode_urls": { "type": "boolean", "default": true, "description": "Generate VSCode-compatible URLs in graph output" } } }, "linearized_inheritance_graph": { "type": "object", "properties": { "direction": { "type": "string", "enum": ["TB", "BT", "LR", "RL"], "default": "LR", "description": "Graph direction: TB (top-bottom), BT (bottom-top), LR (left-right), RL (right-left)" }, "vscode_urls": { "type": "boolean", "default": true, "description": "Generate VSCode-compatible URLs in graph output" } } } } }, "subproject": { "type": "object", "description": "Configuration for subdirectories requiring different compiler settings than the default", "additionalProperties": { "type": "object", "properties": { "paths": { "type": "array", "items": { "type": "string", "format": "path" }, "default": [], "description": "Paths to subproject files and directories" }, "target_version": { "type": "string", "description": "Target Solidity version for this subproject", "pattern": "^\\d+\\.\\d+\\.\\d+$" }, "evm_version": { "type": "string", "description": "Version of the EVM to compile for", "enum": ["homestead", "tangerineWhistle", "spuriousDragon", "byzantium", "constantinople", "petersburg", "istanbul", "berlin", "london", "paris", "shanghai", "cancun", "prague", "osaka"] }, "optimizer": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "runs": { "type": "integer", "default": 200, "minimum": 1 }, "details": { "type": "object", "properties": { "peephole": { "type": "boolean" }, "inliner": { "type": "boolean" }, "jumpdest_remover": { "type": "boolean" }, "order_literals": { "type": "boolean" }, "deduplicate": { "type": "boolean" }, "cse": { "type": "boolean" }, "constant_optimizer": { "type": "boolean" }, "simple_counter_for_loop_unchecked_increment": { "type": "boolean" }, "yul_details": { "type": "object", "properties": { "stack_allocation": { "type": "boolean" }, "optimizer_steps": { "type": "string" } } } } } } }, "via_IR": { "type": "boolean", "description": "Use new IR-based compiler pipeline" }, "metadata": { "type": "object", "properties": { "append_CBOR": { "type": "boolean" }, "use_literal_content": { "type": "boolean" }, "bytecode_hash": { "type": "string", "enum": ["none", "ipfs", "bzzr1"] } } } } } } } }