{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/wake/latest.json",
  "title": "Schema for Wake - development, testing, and static analysis framework for Solidity",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/Ackee-Blockchain/wake/refs/heads/main/docs/wake-schema.json",
    "sourceSha256": "7ee7207e45095fdec5aeff2e0f00257514a91f8779f44b339b457493d5784e71",
    "fileMatch": [
      "**/*wake.toml",
      "**/*.wake.toml"
    ],
    "parsers": [
      "toml"
    ]
  },
  "type": "object",
  "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"
                ]
              }
            }
          }
        }
      }
    }
  }
}
