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
- The extension pack reference — the extensions these settings configure.
- Debugging — launch configs in context.
- Commands reference — the shortcuts these files enable.
- Workspace standards — the rules a workspace must satisfy.