The Problems tab
While you type, the editor collects everything that is wrong with the code before it runs — a name that does not exist, a type that does not fit, an import of a script that is not there, a package that would not install — and lists it in the Problems tab under the code. Each row says how serious it is, what is wrong, who found it and where; one click puts the cursor on the spot.
- Read a Problems row: severity, message, source and position
- Jump from a row to the code and copy a message
- Tell Problems (before a run) from the error block (after a run)
Before the run, not after
The bottom panel under the code always has Output and Logs. Problems joins them as a third tab only while there is something to report, with the count beside its name, and leaves again when the list is empty. If new problems arrive while you are on another tab, a dot appears on it — red when one of them is an error, amber otherwise.
Read and fix a list
Paste one of these into a new script. Each has a name that does not exist and something unused; the TypeScript one also assigns text to a number.
import json
def main(name: str = "Ana"):
return {"greeting": f"Hello, {nme}"}✕ undefined name 'nme' pyflakes 3:35 ⚠ 'json' imported but unused pyflakes 1:1 ⚠ E302 expected 2 blank lines, found 0 pycodestyle 2:1
- Start with the errors
A red ✕ is broken code — it will fail when it runs. Amber ⚠ warnings and blue info notes are about style or code that does nothing; the run still works.
- Jump to the line
Click anywhere on a row: the editor scrolls and puts the cursor at that line and column. Hover the position on the right to read it in full — Line 3, Column 35.
- Copy the message
The copy button on a row copies its message — handy to paste into the AI chat or a search.
- Fix and watch it clear
Rows update as you type. Rename
nmetoname, remove the unused import, and the tab disappears.
Where problems come from
The source is printed before the position on every row. Problems from the editor’s own checks come first, then the language server’s.
| Source | What it reports |
|---|---|
install | A package the editor could not install for an import, as name@version: message, on the import’s line |
imports | An import of a project script that would fail — missing, other language, a cycle, too deep — in the words a run would use (see Import your own scripts) |
pyflakes, pycodestyle | Python: undefined names, unused imports and variables, and style rules such as E302 |
typescript | TypeScript and JavaScript: type errors, unknown names, unused code |
clangd | C and C++: compile errors and warnings before the worker compiles |
Severities
| Icon | Severity | Meaning |
|---|---|---|
| ✕ red | Error | Broken code that will not run as written |
| ⚠ amber | Warning | Style issues and likely mistakes |
| ⓘ blue | Info | Notes you may ignore |
| ○ grey | Hint | Suggestions such as unused code |
Limits
- Problems never block Save or Run: you decide. A run with an error in Problems will most likely fail.
- Language-server rows need the server to be connected; with it disconnected, only the
importsandinstallrows remain. - Messages come from each language’s tools and stay in English.