How it works
Each language's intelligence comes from its standard language server, the same kind of tool other editors use. Piye downloads a language's tools the first time you open one of its files, pinned to known versions and checked before use. Nothing to install by hand.
What works, by language
| Language | Server | Errors, completion, definitions, rename | Format | Debugger | Tests |
|---|---|---|---|---|---|
| TypeScript, JavaScript | typescript-language-server | Yes | Prettier | JavaScript debugger | Jest, Vitest |
| Python | Pyright | Yes | Ruff | debugpy | pytest, unittest |
| Go | gopls | Yes | gofmt | Delve | Yes |
| Rust | rust-analyzer | Yes | rustfmt | lldb-dap | Yes |
| C, C++, Objective-C, CUDA | clangd | Yes | clang-format | lldb-dap (one file, or a Makefile project) | make test |
| Java | jdtls | Yes | Yes | java-debug | Gradle or Maven |
| Kotlin | Kotlin language server (JetBrains) | Yes | Yes | Yes | Gradle |
| C# | Roslyn | Yes | Yes | netcoredbg | dotnet test |
| Swift | sourcekit-lsp | Yes | Yes | lldb-dap | swift test |
| PHP | phpactor | Yes | PHP CS Fixer | Not yet | PHPUnit |
| Dart | Dart analysis server | Yes | dart format | Yes | dart test |
| Shell | bash-language-server | Yes (with ShellCheck) | shfmt | ||
| SQL | sqls | Completion of keywords | sql-formatter | ||
| HTML, CSS, SCSS, Less, JSON | VS Code's HTML, CSS and JSON servers | Errors and completion | Prettier, or the server | ||
| YAML | yaml-language-server | Yes | Yes | ||
| TOML | Taplo | Errors and completion | Taplo | ||
| Markdown | Marksman | Broken links, link completion, rename a heading | Prettier | ||
| Dockerfile | docker-langserver | Yes | Yes | ||
| Tailwind CSS | Tailwind CSS language server | Class name completion |
Tests run from the Testing view and the Test buttons; see Tasks and testing.
Notes on some languages
- Markdown: links between files, link warnings and completion need the folder to be a Git repository or to have a
.marksman.toml. - Kotlin: JetBrains publishes its Kotlin server as builds that each work for a few weeks. When a newer one is available, Piye offers it (it's large, so Piye asks first).
- C and C++: debugging works for a single file and for Makefile projects.
- SQL: on Linux for ARM computers, the SQL server has no build, and Piye says so.
Settings per language
Settings, Languages has a page for each language: turn its server on or off, set its own options (like tab size or formatter), and read its log. Settings, Code Intelligence has what applies across languages: inline problems, ESLint, Python type checking, auto imports, inline hints, CodeLens, semantic colours, and what happens on save. See Settings reference.
When something's off
- Open the language's log from Settings, Languages or the Output panel.
- Change Language Mode (CmdKthenM) if a file opened as the wrong language.
- A folder from outside Piye runs its own TypeScript only after you trust it.