2023-02-19 08:09:26 +00:00
|
|
|
---
|
|
|
|
title: Visual Studio Code
|
|
|
|
---
|
|
|
|
|
|
|
|
# :material-microsoft-visual-studio-code:Visual Studio Code
|
|
|
|
|
|
|
|
The Workspace Settings are stored in the project (repository) root and get
|
|
|
|
higher priorized than your user settings.
|
|
|
|
|
|
|
|
This helps to have different settings for different projects, while the user
|
|
|
|
settings get used as a default value if no workspace settings are provided.
|
|
|
|
|
2023-02-19 15:14:24 +00:00
|
|
|
## tasks.json
|
|
|
|
|
|
|
|
First we will create a task configuration which will create a virtual
|
|
|
|
environment and update the deps (pip, setuptools and wheel).
|
2023-02-19 08:09:26 +00:00
|
|
|
|
2023-02-19 15:14:24 +00:00
|
|
|
Into this venv we will then install the pyproject.toml in editable mode with
|
|
|
|
dev, docs and test dependencies.
|
2023-02-19 08:09:26 +00:00
|
|
|
|
2023-02-19 16:50:22 +00:00
|
|
|
```json title=".vscode/tasks.json"
|
2023-02-19 15:14:24 +00:00
|
|
|
{
|
|
|
|
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
|
|
|
// for the documentation about the tasks.json format
|
|
|
|
"version": "2.0.0",
|
|
|
|
"tasks": [
|
|
|
|
{
|
|
|
|
"label": "Create virtual environment",
|
|
|
|
"detail": "Create .venv and upgrade pip, setuptools and wheel",
|
|
|
|
"command": "python3",
|
|
|
|
"args": [
|
|
|
|
"-m",
|
|
|
|
"venv",
|
|
|
|
".venv",
|
|
|
|
"--prompt",
|
|
|
|
"InvokeAI",
|
|
|
|
"--upgrade-deps"
|
|
|
|
],
|
|
|
|
"runOptions": {
|
|
|
|
"instanceLimit": 1,
|
|
|
|
"reevaluateOnRerun": true
|
|
|
|
},
|
|
|
|
"group": {
|
|
|
|
"kind": "build"
|
|
|
|
},
|
|
|
|
"presentation": {
|
|
|
|
"echo": true,
|
|
|
|
"reveal": "always",
|
|
|
|
"focus": false,
|
|
|
|
"panel": "shared",
|
|
|
|
"showReuseMessage": true,
|
|
|
|
"clear": false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"label": "build InvokeAI",
|
|
|
|
"detail": "Build pyproject.toml with extras dev, docs and test",
|
2023-02-19 16:50:22 +00:00
|
|
|
"command": "${workspaceFolder}/.venv/bin/python3",
|
|
|
|
"args": [
|
|
|
|
"-m",
|
|
|
|
"pip",
|
|
|
|
"install",
|
|
|
|
"--use-pep517",
|
|
|
|
"--editable",
|
|
|
|
".[dev,docs,test]"
|
|
|
|
],
|
|
|
|
"dependsOn": "Create virtual environment",
|
2023-02-19 15:14:24 +00:00
|
|
|
"dependsOrder": "sequence",
|
|
|
|
"group": {
|
|
|
|
"kind": "build",
|
|
|
|
"isDefault": true
|
|
|
|
},
|
|
|
|
"presentation": {
|
|
|
|
"echo": true,
|
|
|
|
"reveal": "always",
|
|
|
|
"focus": false,
|
|
|
|
"panel": "shared",
|
|
|
|
"showReuseMessage": true,
|
|
|
|
"clear": false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
2023-02-19 08:09:26 +00:00
|
|
|
```
|
|
|
|
|
2023-02-19 16:50:22 +00:00
|
|
|
The fastest way to build InvokeAI now is ++cmd+shift+b++
|
|
|
|
|
2023-02-19 15:14:24 +00:00
|
|
|
## launch.json
|
|
|
|
|
|
|
|
This file is used to define debugger configurations, so that you can one-click
|
|
|
|
launch and monitor the application, set halt points to inspect specific states,
|
|
|
|
...
|
2023-02-19 08:09:26 +00:00
|
|
|
|
|
|
|
```json title=".vscode/launch.json"
|
|
|
|
{
|
|
|
|
"version": "0.2.0",
|
|
|
|
"configurations": [
|
|
|
|
{
|
2023-02-19 15:14:24 +00:00
|
|
|
"name": "invokeai web",
|
|
|
|
"type": "python",
|
|
|
|
"request": "launch",
|
|
|
|
"program": ".venv/bin/invokeai",
|
|
|
|
"justMyCode": true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "invokeai cli",
|
2023-02-19 08:09:26 +00:00
|
|
|
"type": "python",
|
|
|
|
"request": "launch",
|
|
|
|
"program": ".venv/bin/invokeai",
|
2023-02-19 15:14:24 +00:00
|
|
|
"justMyCode": true
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "mkdocs serve",
|
|
|
|
"type": "python",
|
|
|
|
"request": "launch",
|
|
|
|
"program": ".venv/bin/mkdocs",
|
|
|
|
"args": ["serve"],
|
2023-02-19 08:09:26 +00:00
|
|
|
"justMyCode": true
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2023-02-19 15:14:24 +00:00
|
|
|
Then you only need to hit ++f5++ and the fun begins :nerd: (It is asumed that
|
|
|
|
you have created a virtual environment via the [tasks](#tasksjson) from the
|
|
|
|
previous step.)
|
2023-02-19 08:09:26 +00:00
|
|
|
|
|
|
|
## extensions.json
|
|
|
|
|
|
|
|
A list of recommended vscode-extensions to make your life easier:
|
|
|
|
|
|
|
|
```json title=".vscode/extensions.json"
|
|
|
|
{
|
|
|
|
"recommendations": [
|
|
|
|
"editorconfig.editorconfig",
|
|
|
|
"github.vscode-pull-request-github",
|
|
|
|
"ms-python.black-formatter",
|
|
|
|
"ms-python.flake8",
|
|
|
|
"ms-python.isort",
|
|
|
|
"ms-python.python",
|
|
|
|
"ms-python.vscode-pylance",
|
|
|
|
"redhat.vscode-yaml",
|
|
|
|
"tamasfe.even-better-toml",
|
|
|
|
"eamodio.gitlens",
|
|
|
|
"foxundermoon.shell-format",
|
|
|
|
"timonwong.shellcheck",
|
|
|
|
"esbenp.prettier-vscode",
|
|
|
|
"davidanson.vscode-markdownlint",
|
|
|
|
"yzhang.markdown-all-in-one",
|
|
|
|
"bierner.github-markdown-preview",
|
|
|
|
"ms-azuretools.vscode-docker",
|
|
|
|
"mads-hartmann.bash-ide-vscode"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## settings.json
|
|
|
|
|
2023-02-19 15:14:24 +00:00
|
|
|
With bellow settings your files already get formated when you save them (only
|
|
|
|
your modifications if available), which will help you to not run into trouble
|
|
|
|
with the pre-commit hooks. If the hooks fail, they will prevent you from
|
|
|
|
commiting, but most hooks directly add a fixed version, so that you just need to
|
|
|
|
stage and commit them:
|
2023-02-19 08:09:26 +00:00
|
|
|
|
|
|
|
```json title=".vscode/settings.json"
|
|
|
|
{
|
|
|
|
"[json]": {
|
|
|
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
|
|
"editor.quickSuggestions": {
|
2023-02-19 15:14:24 +00:00
|
|
|
"comments": false,
|
|
|
|
"strings": true,
|
|
|
|
"other": true
|
2023-02-19 08:09:26 +00:00
|
|
|
},
|
|
|
|
"editor.suggest.insertMode": "replace",
|
|
|
|
"gitlens.codeLens.scopes": ["document"]
|
|
|
|
},
|
2023-02-19 15:14:24 +00:00
|
|
|
"[jsonc]": {
|
|
|
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
|
|
"editor.formatOnSave": true,
|
|
|
|
"editor.formatOnSaveMode": "modificationsIfAvailable"
|
|
|
|
},
|
2023-02-19 08:09:26 +00:00
|
|
|
"[python]": {
|
|
|
|
"editor.defaultFormatter": "ms-python.black-formatter",
|
|
|
|
"editor.formatOnSave": true,
|
|
|
|
"editor.formatOnSaveMode": "file"
|
|
|
|
},
|
|
|
|
"[toml]": {
|
|
|
|
"editor.defaultFormatter": "tamasfe.even-better-toml",
|
|
|
|
"editor.formatOnSave": true,
|
|
|
|
"editor.formatOnSaveMode": "modificationsIfAvailable"
|
|
|
|
},
|
|
|
|
"[yaml]": {
|
2023-02-19 15:14:24 +00:00
|
|
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
2023-02-19 08:09:26 +00:00
|
|
|
"editor.formatOnSave": true,
|
|
|
|
"editor.formatOnSaveMode": "modificationsIfAvailable"
|
|
|
|
},
|
|
|
|
"[markdown]": {
|
|
|
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
|
|
"editor.rulers": [80],
|
|
|
|
"editor.unicodeHighlight.ambiguousCharacters": false,
|
|
|
|
"editor.unicodeHighlight.invisibleCharacters": false,
|
|
|
|
"diffEditor.ignoreTrimWhitespace": false,
|
|
|
|
"editor.wordWrap": "on",
|
|
|
|
"editor.quickSuggestions": {
|
|
|
|
"comments": "off",
|
|
|
|
"strings": "off",
|
|
|
|
"other": "off"
|
2023-02-19 15:14:24 +00:00
|
|
|
},
|
|
|
|
"editor.formatOnSave": true,
|
|
|
|
"editor.formatOnSaveMode": "modificationsIfAvailable"
|
|
|
|
},
|
|
|
|
"[shellscript]": {
|
|
|
|
"editor.defaultFormatter": "foxundermoon.shell-format"
|
|
|
|
},
|
|
|
|
"[ignore]": {
|
|
|
|
"editor.defaultFormatter": "foxundermoon.shell-format"
|
2023-02-19 08:09:26 +00:00
|
|
|
},
|
|
|
|
"editor.rulers": [88],
|
|
|
|
"evenBetterToml.formatter.alignEntries": false,
|
|
|
|
"evenBetterToml.formatter.allowedBlankLines": 1,
|
|
|
|
"evenBetterToml.formatter.arrayAutoExpand": true,
|
|
|
|
"evenBetterToml.formatter.arrayTrailingComma": true,
|
|
|
|
"evenBetterToml.formatter.arrayAutoCollapse": true,
|
|
|
|
"evenBetterToml.formatter.columnWidth": 88,
|
|
|
|
"evenBetterToml.formatter.compactArrays": true,
|
|
|
|
"evenBetterToml.formatter.compactInlineTables": true,
|
|
|
|
"evenBetterToml.formatter.indentEntries": false,
|
|
|
|
"evenBetterToml.formatter.inlineTableExpand": true,
|
|
|
|
"evenBetterToml.formatter.reorderArrays": true,
|
|
|
|
"evenBetterToml.formatter.reorderKeys": true,
|
|
|
|
"evenBetterToml.formatter.compactEntries": false,
|
|
|
|
"evenBetterToml.schema.enabled": true,
|
|
|
|
"python.analysis.typeCheckingMode": "basic",
|
|
|
|
"python.formatting.provider": "black",
|
|
|
|
"python.languageServer": "Pylance",
|
|
|
|
"python.linting.enabled": true,
|
|
|
|
"python.linting.flake8Enabled": true,
|
|
|
|
"python.testing.unittestEnabled": false,
|
|
|
|
"python.testing.pytestEnabled": true,
|
|
|
|
"python.testing.pytestArgs": [
|
|
|
|
"tests",
|
|
|
|
"--cov=ldm",
|
|
|
|
"--cov-branch",
|
|
|
|
"--cov-report=term:skip-covered"
|
|
|
|
],
|
|
|
|
"yaml.schemas": {
|
2023-02-19 15:14:24 +00:00
|
|
|
"https://json.schemastore.org/prettierrc.json": "${workspaceFolder}/.prettierrc.yaml"
|
2023-02-19 08:09:26 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|