This reference collects the shareable configuration files a data-creator workspace ships. Every snippet is a real, paste-ready fragment, organized by file.

.vscode/settings.json — workspace settings

Committed to the repo. Applies to every contributor.

Baseline

{
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "source.organizeImports": "explicit",
    "source.fixAll": "explicit"
  },
  "editor.rulers": [100],
  "editor.tabSize": 4,
  "editor.insertSpaces": true,
  "editor.detectIndentation": false,
  "files.trimTrailingWhitespace": true,
  "files.insertFinalNewline": true,
  "files.trimFinalNewlines": true,
  "files.eol": "\n"
}

Python

{
  "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
  "python.terminal.activateEnvironment": true,
  "python.testing.pytestEnabled": true,
  "python.testing.unittestEnabled": false,
  "python.testing.pytestArgs": ["tests", "-v"],
  "python.analysis.typeCheckingMode": "basic",
  "python.analysis.autoImportCompletions": true,
  "python.analysis.diagnosticMode": "workspace",
  "python.analysis.indexing": true,
  "[python]": {
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
      "source.organizeImports": "explicit",
      "source.fixAll": "explicit"
    }
  }
}

SQL / dbt

{
  "sqlfluff.config": "${workspaceFolder}/.sqlfluff",
  "sqlfluff.format.enabled": true,
  "sqlfluff.linter.run": "onSave",
  "[sql]": {
    "editor.defaultFormatter": "dorzey.vscode-sqlfluff",
    "editor.formatOnSave": true
  },
  "[jinja-sql]": {
    "editor.defaultFormatter": "dorzey.vscode-sqlfluff"
  },
  "files.associations": {
    "*.sql": "jinja-sql"
  },
  "dbt.profilesDir": "${env:HOME}/.dbt",
  "dbt.runOnSave": false
}

YAML

{
  "yaml.schemas": {
    "https://json.schemastore.org/github-workflow.json": ".github/workflows/*.{yml,yaml}",
    "https://json.schemastore.org/dbt_yml.json": "**/schema.yml",
    "https://raw.githubusercontent.com/databricks/cli/main/bundle/schema/bundle.schema.json": "databricks.yml"
  },
  "yaml.format.enable": true,
  "yaml.validate": true,
  "[yaml]": {
    "editor.defaultFormatter": "redhat.vscode-yaml",
    "editor.tabSize": 2
  }
}

Markdown

{
  "[markdown]": {
    "editor.defaultFormatter": "yzhang.markdown-all-in-one",
    "editor.formatOnSave": true,
    "editor.wordWrap": "on",
    "editor.quickSuggestions": {
      "comments": "off",
      "strings": "off",
      "other": "off"
    }
  },
  "markdown.extension.toc.levels": "2..4",
  "markdown.extension.toc.updateOnSave": true
}

Terminal

{
  "terminal.integrated.defaultProfile.osx": "zsh",
  "terminal.integrated.fontFamily": "MesloLGS NF",
  "terminal.integrated.fontSize": 13,
  "terminal.integrated.env.osx": {
    "AWS_PROFILE": "dev",
    "DBT_PROFILES_DIR": "${env:HOME}/.dbt"
  }
}

Files

{
  "files.exclude": {
    "**/__pycache__": true,
    "**/.pytest_cache": true,
    "**/.ruff_cache": true,
    "**/target": true,
    "**/dbt_packages": true,
    "**/logs": true
  },
  "search.exclude": {
    "**/__pycache__": true,
    "**/target": true,
    "**/dbt_packages": true,
    "**/.venv": true
  },
  "files.watcherExclude": {
    "**/__pycache__/**": true,
    "**/target/**": true,
    "**/dbt_packages/**": true,
    "**/.venv/**": true
  }
}

Tip

files.watcherExclude is the most-missed setting on slow workspaces. VS Code's default watcher polls every file; excluding .venv, target, and dbt_packages can drop CPU from 30% to 2% on a medium repo.

.vscode/launch.json — debugger configs

Committed to the repo. Every named config appears in the debug dropdown.

Python: current file

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Current File",
      "type": "debugpy",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal",
      "justMyCode": true
    }
  ]
}

Pytest: current file

{
  "name": "Pytest: Current File",
  "type": "debugpy",
  "request": "launch",
  "module": "pytest",
  "args": ["${file}", "-s", "-v"],
  "console": "integratedTerminal",
  "justMyCode": true
}

Pytest: single test

{
  "name": "Pytest: Single Test",
  "type": "debugpy",
  "request": "launch",
  "module": "pytest",
  "args": ["${file}::${input:testName}", "-s", "-v"],
  "console": "integratedTerminal"
},
"inputs": [
  {
    "id": "testName",
    "type": "promptString",
    "description": "Test name (e.g., test_my_function)"
  }
]

Databricks Connect: debug current file

{
  "name": "Python: Databricks Connect",
  "type": "debugpy",
  "request": "launch",
  "program": "${file}",
  "console": "integratedTerminal",
  "justMyCode": false,
  "env": {
    "SPARK_LOCAL_IP": "127.0.0.1",
    "PYSPARK_PYTHON": "${command:python.interpreterPath}"
  }
}

Attach to a container

{
  "name": "Python: Attach to Container",
  "type": "debugpy",
  "request": "attach",
  "connect": { "host": "localhost", "port": 5678 },
  "pathMappings": [
    { "localRoot": "${workspaceFolder}", "remoteRoot": "/app" }
  ],
  "justMyCode": false
}

Attach to Astro

{
  "name": "Python: Attach to Astro",
  "type": "debugpy",
  "request": "attach",
  "connect": { "host": "localhost", "port": 5678 },
  "pathMappings": [
    { "localRoot": "${workspaceFolder}/dags", "remoteRoot": "/usr/local/airflow/dags" }
  ]
}

Module

{
  "name": "Python: CLI Module",
  "type": "debugpy",
  "request": "launch",
  "module": "mypackage.cli",
  "args": ["--verbose", "input.csv"],
  "console": "integratedTerminal",
  "env": { "LOG_LEVEL": "DEBUG" }
}

.vscode/tasks.json — task definitions

Committed to the repo. Run with Cmd+Shift+B (default build) or the Tasks: Run Task palette entry.

Full example

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "dbt: build modified+",
      "type": "shell",
      "command": "dbt build --select state:modified+ --defer --state target/",
      "group": { "kind": "build", "isDefault": true },
      "presentation": { "reveal": "always", "panel": "dedicated" },
      "problemMatcher": []
    },
    {
      "label": "dbt: test current model",
      "type": "shell",
      "command": "dbt test --select ${fileBasenameNoExtension}",
      "presentation": { "reveal": "always" }
    },
    {
      "label": "dbt: docs generate and serve",
      "type": "shell",
      "command": "dbt docs generate && dbt docs serve --port 8080",
      "presentation": { "reveal": "always", "panel": "dedicated" },
      "isBackground": true
    },
    {
      "label": "astro: restart",
      "type": "shell",
      "command": "astro dev restart",
      "presentation": { "reveal": "always" }
    },
    {
      "label": "astro: test current DAG",
      "type": "shell",
      "command": "astro dev run dags test ${input:dagId} ${input:logicalDate}",
      "presentation": { "reveal": "always" }
    },
    {
      "label": "databricks: deploy dev",
      "type": "shell",
      "command": "databricks bundle deploy --target dev",
      "presentation": { "reveal": "always" }
    },
    {
      "label": "databricks: run current bundle job",
      "type": "shell",
      "command": "databricks bundle run ${input:jobName} --target dev",
      "presentation": { "reveal": "always" }
    },
    {
      "label": "ruff: fix all",
      "type": "shell",
      "command": "ruff check --fix .",
      "problemMatcher": "$ruff"
    },
    {
      "label": "sqlfluff: fix models",
      "type": "shell",
      "command": "sqlfluff fix models/",
      "presentation": { "reveal": "silent" }
    },
    {
      "label": "pre-commit: run all",
      "type": "shell",
      "command": "pre-commit run --all-files",
      "presentation": { "reveal": "always" }
    }
  ],
  "inputs": [
    {
      "id": "dagId",
      "type": "promptString",
      "description": "DAG id to test"
    },
    {
      "id": "logicalDate",
      "type": "promptString",
      "description": "Logical date (ISO8601 UTC)",
      "default": "2026-04-20T00:00:00+00:00"
    },
    {
      "id": "jobName",
      "type": "promptString",
      "description": "Databricks bundle job name"
    }
  ]
}

Bind a task to a shortcut

User-level keybindings.json:

[
  {
    "key": "cmd+alt+d",
    "command": "workbench.action.tasks.runTask",
    "args": "dbt: build modified+"
  }
]

.vscode/extensions.json — recommendations

{
  "recommendations": [
    "ms-python.python",
    "ms-python.vscode-pylance",
    "charliermarsh.ruff",
    "dbtLabsInc.dbt",
    "innoverio.vscode-dbt-power-user",
    "dorzey.vscode-sqlfluff",
    "samuelcolvin.jinjahtml",
    "databricks.databricks",
    "redhat.vscode-yaml",
    "tamasfe.even-better-toml",
    "mikestead.dotenv",
    "yzhang.markdown-all-in-one",
    "bierner.markdown-mermaid",
    "eamodio.gitlens",
    "GitHub.vscode-pull-request-github",
    "ms-vscode-remote.remote-containers"
  ],
  "unwantedRecommendations": [
    "ms-python.black-formatter",
    "ms-python.isort",
    "ms-python.flake8"
  ]
}

Note

unwantedRecommendations is worth setting. It stops VS Code from nagging contributors to install Black when your project uses Ruff, or isort when Ruff handles imports.

User settings (personal, not committed)

These live in your user settings.json. Do not commit them to the repo.

{
  "workbench.colorTheme": "Default Dark Modern",
  "workbench.iconTheme": "material-icon-theme",
  "editor.fontFamily": "JetBrains Mono",
  "editor.fontSize": 14,
  "editor.lineHeight": 22,
  "editor.cursorBlinking": "smooth",
  "workbench.editor.enablePreview": false,
  "workbench.settings.editor": "json",
  "extensions.autoUpdate": false,
  "extensions.autoCheckUpdates": true,
  "telemetry.telemetryLevel": "off"
}

Anti-patterns

Committing user settings

Themes, font choices, and keybinding overrides belong in user settings or Settings Sync. Committing them to .vscode/settings.json imposes your preferences on every contributor.

Committing secrets via env

Never do this:

// DO NOT COMMIT
"terminal.integrated.env.osx": {
  "DATABRICKS_TOKEN": "dapi1234..."
}

Use .envrc + direnv for per-project envs, or have the Databricks extension handle auth natively.

Workspace-scope extension pinning

VS Code does not support workspace-scope extension pinning. If you need pinning, use a devcontainer or an Extension Pack published by platform.

Overly aggressive format-on-save

Auto-formatting SQL that someone hand-aligned for readability destroys the alignment. Leave formatting to the author for files where layout carries meaning.

Enabling every language server's "strict" mode

Pylance strict, mypy strict, ruff ALL — each generates noise that drowns out real issues. Start at basic/default. Tighten deliberately as the team's habits improve.

See also