{
  "definitions": [
    {
      "callable": true,
      "callees": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "isRuntimeOnly",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "handleCall",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        },
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "onImport",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 90,
      "name": "countSubject",
      "signature": "const countSubject = function countSubject(state: FileState, specifier: string | null): void {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "callSpecifier",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        },
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "countSubject",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        },
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "isImportExpression",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        },
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "isRequireCall",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "onCall",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 96,
      "name": "handleCall",
      "signature": "const handleCall = function handleCall(state: FileState, call: DomNode): void {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "asNode",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        },
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "countSubject",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        },
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "specifierOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "importHandler",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 107,
      "name": "onImport",
      "signature": "const onImport = function onImport(state: FileState, node: Rule.Node): void {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "isDomNode",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "onImport",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 34,
      "name": "asNode",
      "signature": "const asNode = function asNode(value: unknown): DomNode | null {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "handleCall",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "callHandler",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 111,
      "name": "onCall",
      "signature": "const onCall = function onCall(state: FileState, node: Rule.Node): void {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "asNode",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 30,
      "name": "isDomNode",
      "signature": "const isDomNode = function isDomNode(value: unknown): value is DomNode {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "create",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 38,
      "name": "normalizedFilename",
      "signature": "const normalizedFilename = function normalizedFilename(context: Rule.RuleContext): string {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "create",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 42,
      "name": "isTestFile",
      "signature": "const isTestFile = function isTestFile(filename: string): boolean {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "countSubject",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 46,
      "name": "isRuntimeOnly",
      "signature": "const isRuntimeOnly = function isRuntimeOnly(specifier: string): boolean {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "onImport",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 58,
      "name": "specifierOf",
      "signature": "const specifierOf = function specifierOf(node: DomNode | null): string | null {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "handleCall",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 63,
      "name": "callSpecifier",
      "signature": "const callSpecifier = function callSpecifier(call: DomNode): string | null {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "handleCall",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 68,
      "name": "isRequireCall",
      "signature": "const isRequireCall = function isRequireCall(call: DomNode): boolean {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "handleCall",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 72,
      "name": "isImportExpression",
      "signature": "const isImportExpression = function isImportExpression(call: DomNode): boolean {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "exitHandler",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 118,
      "name": "onProgramExit",
      "signature": "const onProgramExit = function onProgramExit(state: FileState, context: Rule.RuleContext, node: Rule.Node): void {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "create",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 124,
      "name": "buildHandlers",
      "signature": "const buildHandlers = function buildHandlers("
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "buildHandlers",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        },
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "isTestFile",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        },
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "normalizedFilename",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "method_definition",
      "line": 146,
      "name": "create",
      "signature": "create(context: Rule.RuleContext): Rule.RuleListener {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "onCall",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 128,
      "name": "callHandler",
      "signature": "const callHandler = (node: Rule.Node): void => {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "onImport",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 131,
      "name": "importHandler",
      "signature": "const importHandler = (node: Rule.Node): void => {"
    },
    {
      "callable": true,
      "callees": [
        {
          "file": "rules/eslint/no-test-without-subject.eslint.rule.ts",
          "name": "onProgramExit",
          "source": {
            "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
            "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts",
            "label": "rules/eslint/no-test-without-subject.eslint.rule.ts",
            "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md",
            "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts"
          }
        }
      ],
      "callers": [],
      "exported": false,
      "flow": "entry",
      "kind": "lexical_declaration",
      "line": 134,
      "name": "exitHandler",
      "signature": "const exitHandler = (node: Rule.Node): void => {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "interface_declaration",
      "line": 6,
      "name": "DomNode",
      "signature": "interface DomNode {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "interface_declaration",
      "line": 17,
      "name": "FileState",
      "signature": "interface FileState {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 22,
      "name": "TEST_MARKER",
      "signature": "const TEST_MARKER = \".test.\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 23,
      "name": "RUNTIME_ONLY_EXACT",
      "signature": "const RUNTIME_ONLY_EXACT = new Set([\"vitest\", \"chai\", \"sinon\", \"expect\", \"should\"]);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 24,
      "name": "RUNTIME_ONLY_PREFIXES",
      "signature": "const RUNTIME_ONLY_PREFIXES = [\"node:\", \"@jest/\", \"@vitest/\", \"@playwright/\"];"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 25,
      "name": "SUITE_NAMES",
      "signature": "const SUITE_NAMES = new Set([\"describe\", \"it\", \"test\", \"suite\", \"context\"]);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 27,
      "name": "TAG",
      "signature": "const TAG = \"[no_test_without_subject]\";"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 28,
      "name": "SUBJECTLESS_MESSAGE",
      "signature": "const SUBJECTLESS_MESSAGE = `This test declares suites or cases but imports no module under test — its only imports resolve to test-runtime modules. Import the module under test through its declared specifier and assert against its real exported surface; delete any logic re-implemented inside the test. ${TAG}`;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 59,
      "name": "source",
      "signature": "const source = node?.source;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 64,
      "name": "first",
      "signature": "const first = call.arguments?.[0];"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 76,
      "name": "suiteName",
      "signature": "const suiteName = function suiteName(callee: DomNode | undefined): string | null {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 101,
      "name": "name",
      "signature": "const name = suiteName(call.callee);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 112,
      "name": "call",
      "signature": "const call = asNode(node);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 145,
      "name": "rule",
      "signature": "const rule: Rule.RuleModule = {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 150,
      "name": "state",
      "signature": "const state: FileState = { subjectImports: 0, testStructure: false };"
    }
  ],
  "document": null,
  "findings": [],
  "generated": false,
  "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
  "language": "typescript",
  "layer": null,
  "name": "no-test-without-subject.eslint.rule.ts",
  "path": "rules/eslint/no-test-without-subject.eslint.rule.ts",
  "ref": "anatomy:file-governance-rules-eslint-no-test-without-subject-eslint-rule-ts",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/governance#folder-governance-rules-eslint",
          "json": "https://banes-lab.com/json/anatomy/governance/folder-governance-rules-eslint",
          "label": "rules/eslint",
          "markdown": "https://banes-lab.com/anatomy/governance/folder-governance-rules-eslint.md",
          "ref": "chapter:/anatomy/governance#folder-governance-rules-eslint"
        }
      ],
      "relation": "contained-in"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-testability",
          "json": "https://banes-lab.com/json/records/architecture/testability",
          "label": "Testability",
          "markdown": "https://banes-lab.com/records/architecture/testability.md",
          "ref": "architecture:testability"
        }
      ],
      "relation": "enforces"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/governance#folder-governance-rules-eslint",
          "json": "https://banes-lab.com/json/anatomy/governance/folder-governance-rules-eslint",
          "label": "rules/eslint",
          "markdown": "https://banes-lab.com/anatomy/governance/folder-governance-rules-eslint.md",
          "ref": "chapter:/anatomy/governance#folder-governance-rules-eslint"
        }
      ],
      "relation": "linked-from"
    }
  ],
  "slots": null,
  "stats": {
    "bytes": 5574,
    "callable": 20,
    "definitions": 34,
    "edges": 16,
    "exported": 0,
    "files": 1,
    "findings": {},
    "flows": {
      "relay": 5,
      "leaf": 10,
      "entry": 4,
      "isolated": 15
    },
    "lines": {
      "blank": 23,
      "code": 141,
      "total": 164
    }
  },
  "summary": "141 lines of code and 34 definitions.",
  "text": "https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.txt",
  "tree": "governance",
  "siblings": {
    "next": {
      "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-undeclared-dependency-eslint-rule-ts",
      "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-undeclared-dependency.eslint.rule.ts",
      "label": "rules/eslint/no-undeclared-dependency.eslint.rule.ts",
      "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-undeclared-dependency.eslint.rule.ts.md",
      "ref": "anatomy:file-governance-rules-eslint-no-undeclared-dependency-eslint-rule-ts"
    },
    "previous": {
      "href": "https://banes-lab.com/anatomy/governance#file-governance-rules-eslint-no-swallowed-failure-eslint-rule-ts",
      "json": "https://banes-lab.com/json/source/governance/rules/eslint/no-swallowed-failure.eslint.rule.ts",
      "label": "rules/eslint/no-swallowed-failure.eslint.rule.ts",
      "markdown": "https://banes-lab.com/source/governance/rules/eslint/no-swallowed-failure.eslint.rule.ts.md",
      "ref": "anatomy:file-governance-rules-eslint-no-swallowed-failure-eslint-rule-ts"
    }
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/source/governance/rules/eslint",
    "label": "rules/eslint",
    "markdown": "https://banes-lab.com/api/source/governance/rules/eslint.md",
    "ref": "api:source/governance/rules/eslint"
  }
}
