ScriptsGuide

Editor intelligence

The script editor talks to a real language server for every language — the same kind a desktop IDE uses. It suggests names as you type, shows a function’s signature and documentation on hover, underlines mistakes before you run, and jumps to a definition, even into another script of your project. Packages you import are installed for the editor as you type, so their types and completions show up at once.

7 min readBefore this: Writing codeOpen in Waiso
What you will learn
  • Use completions, hover cards and go-to-definition
  • Read the error marks before you run
  • Know what the import pills and the engine badge tell you

A language server per language

When you open a script, the editor connects to a language-server service over a WebSocket and keeps a private session for your tab. Each language has its own server:

LanguageServerGood at
Pythonpylsp (Jedi)Completions from type hints and installed packages, undefined names, unused imports
TypeScripttypescript-language-serverFull type checking, package types, path completion
JavaScripttypescript-language-serverTypes inferred from code and JSDoc
C / C++clangdCompletions and diagnostics against the worker’s gcc headers and waiso.h
report.pyPlatform SDKImport library
1import yaml2 3def main(title: str = "Daily report"):4    heading = title.5    rows = [{"city": "Recife", "orders": 2}]6    return {"title": heading, "yaml": yaml.safe_dump(rows)}7 8 9 10 11 12 13 14 
Python 3.15LSP
capitalize()method
casefold()method
center(width, fillchar)method
count(sub, start, end)method
encode(encoding, errors)method
endswith(suffix, start, end)method
format(*args, **kwargs)method
capitalize() → str

Return a capitalized version of the string: the first character upper case, the rest lower case.

method · str
Type a dot after a name and the list shows what that object has, with each entry’s kind.

The platform SDK is known too: import waiso (or from 'waiso') completes its functions, and calls that run another script or flow complete the project’s script paths and their parameters.

Complete, hover, jump

  1. Complete

    Start typing a name, or type a . after one. Pick with the arrow keys and Enter; Esc closes the list.

  2. Hover

    Rest the mouse on a function, variable or package to see one card with its signature, its kind and its documentation.

  3. Go to definition

    F12 or Ctrl/⌘+click moves to where a name is defined. When the definition is in another script of the project — a library you import — that script opens in the editor.

Error marks

Mistakes are underlined while you type — errors in red, warnings in amber — and hovering the mark shows the message. Every mark is also a row in the Problems tab under the code. A typo the server catches before you run:

invoice_total.py
def main(items: list[float] = [10.0, 2.5]):
    total = sum(items)
    return {"total": totl}  # marked: undefined name 'totl'
Expected outputSuccessThe Python variant’s row in the Problems tab: message, source, line and column
undefined name 'totl'   pyflakes 3:22

Imports while you type

For Python, TypeScript and JavaScript, each package import line wears a small pill at its end: installing, installed or failed. The editor installs the package into its own language-server session as you type — that is what makes the package’s types, completions and hover docs appear. Hover the pill to see the version it resolved; click it to open a version picker with the release history (filter with Filter versions…). waiso wears a pill that says it is built in — nothing to install.

Project imports are checked on the server

Imports of your own scripts are checked by the same resolver a run uses, and the editor gets your project’s scripts of the same language written into its session, so completion knows their functions. An import that would fail is underlined with the very words the run would fail with — import "utils.mony": no script at utils/mony in this project — and shows in Problems with the source imports.

The engine badge

At the foot of the code, the engine badge shows the runtime and the language server’s state. Hover it to read the state in words:

StateMeans
Connecting to language server…The session is starting; completions arrive in a moment
Language server connectedCompletions, hover and marks are live
Language server disconnectedYou can still edit, save and run — just without completions or marks
Language server not configuredThe installation has no language-server service

The same badge holds the runtime version selector — see Runtime versions.

Limits

  • The language server only reads your code; it never runs it. A clean editor does not guarantee a clean run — inputs, data and packages can still fail.
  • C and C++ have no package pills: they install nothing.
  • Messages come from each language’s own server and are in English.