{
    "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
    "python.testing.pytestEnabled": true,
    "python.testing.unittestEnabled": false,
    "python.testing.pytestArgs": [
        "tests/unit",
        "tests/integration",
        "tests/e2e",
        "--cov=souschef",
        "--cov-report=term-missing"
    ],
    // Disable legacy linting in favour of Ruff
    "python.linting.enabled": false,
    "python.linting.flake8Enabled": false,
    "python.linting.pylintEnabled": false,
    "python.testing.cwd": "${workspaceFolder}",
    // Pylance: Real-time type checking and intellisense in VS Code
    // Note: mypy runs in CI for stricter checks; Pylance provides immediate feedback
    "python.analysis.typeCheckingMode": "standard",
    "python.analysis.diagnosticSeverityOverrides": {
        "reportUnknownParameterType": "none",
        "reportUnknownVariableType": "none",
        "reportUnknownArgumentType": "none",
        "reportMissingParameterType": "none",
        "reportGeneralTypeIssues": "warning",
        "reportOptionalMemberAccess": "warning",
        "reportMissingImports": "none"
    },
    "python.analysis.autoImportCompletions": true,
    "python.analysis.completeFunctionParens": true,
    "python.analysis.inlayHints.functionReturnTypes": true,
    "python.analysis.inlayHints.variableTypes": false,
    // Ruff: Primary linter and formatter (replaces Black, isort, flake8)
    "[python]": {
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "charliermarsh.ruff",
        "editor.codeActionsOnSave": {
            "source.fixAll": "explicit",
            "source.organizeImports": "explicit"
        }
    },
    "ruff.enable": true,
    "ruff.lint.enable": true,
    "ruff.organizeImports": true,
    "files.eol": "\n",
    "files.insertFinalNewline": true,
    "files.trimTrailingWhitespace": true,
    "files.associations": {
        "**/CODEOWNERS": "plaintext"
    },
    // Go extension: Use toolchain-aware Go binary
    "go.goroot": "/usr/local/go",
    "go.alternateTools": {
        "go": "/home/vscode/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.13.linux-arm64/bin/go"
    },
    "editor.rulers": [88],
    "editor.tabSize": 4,
    "editor.insertSpaces": true,
    "files.exclude": {
        "**/__pycache__": true,
        "**/*.pyc": true,
        "**/.pytest_cache": true,
        "**/.coverage": true,
        "**/.mypy_cache": true
    },
    "search.exclude": {
        "**/.venv": true,
        "**/node_modules": true,
        "**/*.egg-info": true
    },
    "cSpell.language": "en-AU",
    "cSpell.words": [
        "able",
        "acceptance",
        "accesses",
        "accuracy",
        "across",
        "Additional",
        "adds",
        "after",
        "Analyzes",
        "analyzing",
        "another",
        "ansi",
        "appgroup",
        "approach",
        "appuser",
        "architecture",
        "aren't",
        "arguments",
        "arrows",
        "assess",
        "assistant",
        "automatically",
        "avoid",
        "bags",
        "bang",
        "becomes",
        "been",
        "before",
        "behavior",
        "better",
        "between",
        "blue",
        "boot",
        "brace",
        "braces",
        "burst",
        "busy",
        "caching",
        "calculate",
        "calculates",
        "calculation",
        "call",
        "canary",
        "candidate",
        "captures",
        "cause",
        "challenges",
        "charlie",
        "charliermarsh",
        "checkout",
        "checksum",
        "Chef",
        "circular",
        "combined",
        "Combines",
        "commonpath",
        "comprehensive",
        "comprehensively",
        "configures",
        "confirms",
        "conflicting",
        "Consider",
        "contain",
        "containing",
        "containment",
        "conversions",
        "converted",
        "cookbook",
        "cookbooks",
        "correct",
        "correctly",
        "correctness",
        "Could",
        "cover",
        "covering",
        "crash",
        "Creates",
        "Creating",
        "Customizations",
        "databag",
        "databags",
        "days",
        "declarative",
        "deep",
        "degradation",
        "Deleting",
        "delimiters",
        "DENY",
        "dependency",
        "depends",
        "depth",
        "descriptive",
        "despite",
        "detected",
        "dictionaries",
        "directly",
        "doesn't",
        "done",
        "dpkg",
        "drop",
        "during",
        "echo",
        "echoes",
        "editable",
        "effort",
        "émojis",
        "enforces",
        "ensure",
        "entire",
        "epel",
        "equivalent",
        "equivalents",
        "essential",
        "estimation",
        "even",
        "example",
        "examples",
        "exercise",
        "exhaustive",
        "existent",
        "exists",
        "expectations",
        "expires",
        "explicitly",
        "exported",
        "exposed",
        "extends",
        "extensive",
        "extracted",
        "extracting",
        "extraction",
        "extracts",
        "facts",
        "fails",
        "false",
        "fastcgi",
        "fastmcp",
        "find",
        "fixture",
        "fixtures",
        "flags",
        "followed",
        "following",
        "Foodcritic",
        "Forced",
        "formatting",
        "friendly",
        "fstype",
        "full",
        "functionality",
        "further",
        "Galaxy",
        "gather",
        "generated",
        "generates",
        "generating",
        "Generation",
        "gnupg",
        "goss",
        "gracefully",
        "Graphs",
        "grub",
        "guards",
        "guidance",
        "guide",
        "habitat",
        "handles",
        "handling",
        "help",
        "heredocs",
        "higher",
        "identifies",
        "immediately",
        "impact",
        "important",
        "impossible",
        "including",
        "indicate",
        "indication",
        "indicators",
        "individual",
        "infrastructure",
        "installation",
        "installations",
        "installing",
        "Installs",
        "instead",
        "Intentional",
        "intentionally",
        "interaction",
        "internal",
        "involving",
        "issues",
        "itself",
        "Jenkins",
        "joining",
        "Just",
        "keepalive",
        "keyout",
        "Kitchen",
        "latest",
        "like",
        "limitations",
        "Linting",
        "logic",
        "logical",
        "look",
        "loops",
        "lowest",
        "LWRP",
        "Main",
        "making",
        "manipulation",
        "manually",
        "matrix",
        "meaningful",
        "Measures",
        "meet",
        "mentioned",
        "merges",
        "metaprogramming",
        "might",
        "migrating",
        "minimal",
        "minutes",
        "missing",
        "mitigation",
        "mkconfig",
        "mocked",
        "modern",
        "module",
        "MSIE",
        "must",
        "mysqld",
        "necessary",
        "Need",
        "needed",
        "needs",
        "newkey",
        "nodelay",
        "nofile",
        "nonexistent",
        "nopush",
        "normalised",
        "normalization",
        "normalizing",
        "NOSONAR",
        "notifies",
        "null",
        "Objectives",
        "occurred",
        "official",
        "okay",
        "opening",
        "optimization",
        "optional",
        "optionally",
        "Orchestrates",
        "others",
        "overall",
        "overridden",
        "Overview",
        "ownership",
        "pack",
        "parallel",
        "parsed",
        "parses",
        "parsing",
        "percentage",
        "percentages",
        "perform",
        "performance",
        "Performs",
        "phased",
        "phases",
        "pipefail",
        "piping",
        "planning",
        "playbook",
        "playbooks",
        "Poetry",
        "Populate",
        "possible",
        "postpone",
        "potential",
        "practices",
        "precedence",
        "presence",
        "prevent",
        "prevents",
        "privileges",
        "proc",
        "produce",
        "produces",
        "production",
        "profiling",
        "proper",
        "props",
        "Provide",
        "provided",
        "provides",
        "readability",
        "realistic",
        "realpath",
        "recognized",
        "recommend",
        "recommended",
        "recommends",
        "recursively",
        "reduced",
        "referer",
        "refers",
        "reloading",
        "removing",
        "representation",
        "required",
        "Requirements",
        "resolved",
        "resolves",
        "retries",
        "Returns",
        "rollout",
        "ruff",
        "runlist",
        "safe",
        "safely",
        "safer",
        "Sanitise",
        "sanitized",
        "Sanitizer",
        "sanitizers",
        "SCANNER",
        "scenarios",
        "scopes",
        "Scripted",
        "searches",
        "selfsigned",
        "serverspec",
        "setup",
        "showing",
        "shows",
        "skip",
        "snok",
        "somedir",
        "something",
        "SONAR",
        "souschef",
        "specified",
        "splitting",
        "stages",
        "staging",
        "stapling",
        "statements",
        "stopped",
        "strategies",
        "strategy",
        "stripping",
        "structure",
        "structured",
        "structures",
        "subj",
        "subscribes",
        "substantial",
        "succeeds",
        "Successfully",
        "sugar",
        "supports",
        "survey",
        "symbolic",
        "targeted",
        "targeting",
        "term",
        "testbag",
        "testinfra",
        "than",
        "that",
        "their",
        "them",
        "These",
        "they",
        "this",
        "thoroughly",
        "timedout",
        "timeout",
        "timing",
        "true",
        "trufflesecurity",
        "twine",
        "umbrella",
        "unchanged",
        "Uncovered",
        "unittests",
        "Unrecognized",
        "Updating",
        "Useful",
        "uses",
        "validated",
        "validating",
        "virtualenvs",
        "vulnerabilities",
        "weeks",
        "weight",
        "Whether",
        "which",
        "while",
        "winning",
        "within",
        "your"
    ],
    "yaml.customTags": [
        "tag:yaml.org,2002:python/name:pymdownx.superfences.fence_code_format",
        "tag:yaml.org,2002:python/name:material.extensions.emoji.twemoji",
        "tag:yaml.org,2002:python/name:material.extensions.emoji.to_svg"
    ],
    "sonarlint.connectedMode.project": {
        "connectionId": "kpeacocke",
        "projectKey": "kpeacocke_souschef"
    },
    "ansible.lightspeed.enabled": false,
    "chat.mcp.gallery.enabled": true,
    "chat.mcp.serverSampling": {
        "souschef/.vscode/mcp.json: souschef": {
            "allowedModels": [
                "copilot/claude-sonnet-4.5"
            ]
        }
    },
    // Go: Test discovery and execution settings
    "go.testFlags": ["-v"],
    "go.testTimeout": "300s",
    "go.testEnvVars": {
        "TF_ACC": "1"
    },
    "go.testEnvFile": "${workspaceFolder}/terraform-provider/.env.test",
    "go.useLanguageServer": true,
    "go.formatTool": "gofmt",
    "go.lintTool": "golint",
    "go.vetOnSave": "package",
    "go.testOnSave": false,
    "go.coverOnSave": false,
    "go.gocodeAutoBuild": false,
    "[go]": {
        "editor.formatOnSave": true,
        "editor.codeActionsOnSave": {
            "source.organizeImports": "explicit"
        }
    },
    "go.toolsManagement.checkForUpdates": "local",
    "go.useGoProxyToCheckForToolUpdates": false,
    // Go test explorer settings
    "go.testExplorer.enable": true,
    "go.testExplorer.showOutput": true,
    "go.testExplorer.packageDisplayMode": "hierarchical",
    "go.testExplorer.showDynamicSubtests": true,
    "go.testExplorer.showTestCoverage": true,
    // gopls (Go language server) configuration for workspace mode
    "gopls": {
        "build.buildFlags": ["-tags=test"],
        "ui.semanticTokens": true,
        "ui.codelenses": {
            "test": true,
            "generate": true,
            "gc_details": true
        },
        "experimentalWorkspaceModule": true,
        "allowImplicitNetworkAccess": true
    },
    // Go extension settings for test discovery and language server
    "[go]": {
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "golang.go",
        "editor.codeActionsOnSave": {
            "source.organizeImports": "explicit"
        }
    },
    "go.lintTool": "golangci-lint",
    "go.useLanguageServer": true,
    "go.lintOnSave": "package",
    "codeQL.createQuery.qlPackLocation": "/Users/kpeacocke/code/souschef",
    "python-envs.defaultEnvManager": "ms-python.python:system",
    "python-envs.defaultPackageManager": "ms-python.python:pip",
    "trivy.offlineScan": true,
    "snyk.advanced.autoSelectOrganization": true,
    "snyk.advanced.organization": "16296024-d80b-4481-bbf6-92e2a42b462e"
}
