{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "stack": "ios",
  "description": "iOS / SwiftUI / UIKit test gap rules. Source files in *.swift; tests in *Tests.swift. Snapshot/ViewInspector tests are also recognised when the source is a SwiftUI View.",
  "sourceExtensions": [".swift"],
  "testPathSuffixes": ["Tests.swift", "Test.swift"],
  "testPathContains": ["/Tests/", "/UnitTests/", "/SnapshotTests/"],
  "excludePathGlobs": [
    "Pods/",
    "Carthage/",
    ".build/",
    "DerivedData/",
    "Generated/",
    "Sourcery/",
    "_Generated.swift",
    "Tests/Fixtures/"
  ],
  "publicApiPatterns": [
    { "id": "public_func", "regex": "\\bpublic\\s+func\\s+([A-Za-z_][A-Za-z0-9_]*)" },
    { "id": "public_class", "regex": "\\bpublic\\s+(?:final\\s+)?class\\s+([A-Z][A-Za-z0-9_]*)" },
    { "id": "public_struct", "regex": "\\bpublic\\s+struct\\s+([A-Z][A-Za-z0-9_]*)" },
    { "id": "public_enum", "regex": "\\bpublic\\s+enum\\s+([A-Z][A-Za-z0-9_]*)" },
    { "id": "public_proto", "regex": "\\bpublic\\s+protocol\\s+([A-Z][A-Za-z0-9_]*)" },
    { "id": "public_init", "regex": "\\bpublic\\s+init\\b" },
    { "id": "objc_export", "regex": "@objc(?:Members)?\\s+(?:public\\s+)?(?:func|class|var)" }
  ],
  "swiftUiViewPatterns": [
    { "id": "view_struct", "regex": "struct\\s+([A-Z][A-Za-z0-9_]*)\\s*:\\s*View\\b" },
    { "id": "config_struct", "regex": "struct\\s+([A-Z][A-Za-z0-9_]*Configuration)\\b" }
  ],
  "expectedTestKindsForView": ["snapshot", "viewinspector", "unit"],
  "snapshotPathHints": ["SnapshotTests", "__Snapshots__"],
  "hint": "Cover with a 3-layer test (structural ViewInspector + snapshot + unit) per swiftui-qa.md."
}
