Language support, and its edges.
Shikigami ships code intelligence for Python, PHP, and TypeScript/JavaScript. Nothing to install, no language server to configure. I built each one differently, and each one stops in a different place. This page says exactly where, gaps included.
What each language gets
I wired every feature per language, so a gap in one column is a real gap, not something I forgot to fill in.
| Feature | Python | PHP | TS / JS |
|---|---|---|---|
| Diagnostics | full types Type errors, four strictness levels | syntax only No undefined-symbol checks | full types Real tsserver, not the in-browser one |
| Completion | yes | yes Built-ins, project, and Composer vendor | yes |
| Auto-import on accept | yes | yes Classes, interfaces, enums | yes |
| Hover | yes | not yet | yes |
| Signature help | yes | not yet | yes |
| Outline / go-to-symbol | yes | yes | yes |
| Go to definition | yes |
yes
Cross-file and into vendor/
|
yes |
| Find references | yes |
project only
Never reports vendor/ call sites
|
yes |
| Document highlights | yes | yes | yes |
| Semantic highlighting | no | yes The only language with it | no |
| Turned on by default | opt in | opt in | always on |
|
supported
partial
not yet
|
|||
Python
Bundled server · basedpyright · .py .pyi
Python intelligence comes from basedpyright, bundled with the app and run as its own process.
There's nothing to pip install and no server path to configure. I ship the
analyzer with Shikigami, and it's used no matter which interpreter your project runs on.
What you get
- Type diagnostics as you edit, at whichever strictness you pick.
- Completion on member access, with the matching
importadded when you accept a symbol. - Hover and signature help while you type a call.
- Outline, go to definition, find references, and document highlights.
Settings
- Type checking:
off,basic,standard, orstrict. - Diagnostic scope: report problems for open files only (the default) or the whole workspace.
- Interpreter: set one explicitly, or let Shikigami find it.
Finding your interpreter
Shikigami checks, in order: an interpreter you set yourself, then .venv, then
venv, then python3 on PATH. The pane always shows which one
it landed on and how it got there.
I deliberately ignore $VIRTUAL_ENV. It reflects the shell that happened to launch
the app (one answer for every window), and the interpreter is a per-project question,
not a per-shell one.
If your project already configures pyright itself, through pyrightconfig.json or a
[tool.pyright] / [tool.basedpyright] section, Shikigami sends no settings
of its own and tells you so. Your configuration wins.
Known limits
- No semantic highlighting. Python colours come from the syntax grammar.
- Servers stay running while the workspace is open. Each holds roughly 176 MB, so up to eight run at once and further workspaces go without.
- No whole-project inspection command yet; whole-workspace reporting is a setting, not an action.
PHP
Built-in engine · php-parser · PHP 8.1–8.5 · .php
PHP is the one language Shikigami analyzes itself, with no external language server involved. That makes it the deepest tier in some directions and the shallowest in others: navigation and completion go further here than anywhere else, while hover and signature help don't exist yet.
What you get
- Semantic highlighting: classes, functions, properties, parameters, enum members, and attributes coloured from real parse results. PHP is the only language with this.
- Completion across three sources: PHP built-ins, your own project, and Composer packages. Built-ins are filtered to your PHP version, so a class added in 8.4 will not be offered on an 8.1 project.
- Member completion for
Class::,$this->,self::,static::,parent::, and chains like$obj->getUser()->, followed across files, through inheritance, and into vendor types. - Variable completion at
$, covering parameters, locals,foreachandcatchbindings, closureusecaptures, and superglobals, each with its type where one can be determined. - Auto
useimports when you accept a class, interface, or enum. - Go to definition and find references across the project, for classes, functions, constants, methods, properties, class constants, and enum cases, including nullsafe
?->access. - Syntax diagnostics and same-file document highlights.
Version target
Shikigami reads your PHP version from composer.json and falls back to 8.1. You can pin
a different one from the status bar. The target drives which built-in symbols exist and which
signatures show up.
Indexing
Enabling PHP builds a project index, then a second pass over vendor/ if Composer
packages are present. Progress shows in the status bar; the result is cached, so later starts
load instead of re-crawling. I measured first vendor crawls at about 5 seconds for a Laravel
skeleton and 8.6 seconds for a Symfony project. Not instant, but you only pay it once.
If Composer lives in a subdirectory, point Source root at it and version detection, indexing, and vendor scanning all follow.
Known limits
- No hover and no signature help. These are the clearest gaps against the other two languages, and I'd rather say so than let you find out mid-review.
- References are project-only. Vendor code is indexed for jumping to and completing from, but I don't search its call sites, so “find usages” won't show you uses inside
vendor/. - No undefined-symbol diagnostics; only syntax errors get reported.
- Runtime magic stays invisible: container bindings, facades,
__call, and dynamically built class names can't be resolved by reading source alone. - Ambiguous receivers get no suggestion rather than a guessed one. An empty result can mean “none” or “couldn't resolve”. I'd rather stay quiet than guess wrong.
- References reflect saved files, so results can lag an unsaved edit.
TypeScript & JavaScript
Bundled server · typescript-language-server · TypeScript compiler · .ts .tsx .mts .cts .js .jsx .mjs .cjs
TypeScript and JavaScript work the moment you open a file. No switch, no setup: Shikigami bundles both the language server and the TypeScript compiler, and I pin the server to the bundled compiler so it never picks up a different one from your machine.
What you get
- Type diagnostics from the real TypeScript server, honouring your
tsconfig.json. - Completion with auto-import, hover, and signature help.
- Outline, go to definition, find references, and document highlights.
Known limits
- No semantic highlighting; colours come from the syntax grammar.
- A very large project pays a cold-start cost on first open while the server loads it.
- Like Python, servers stay running for the life of the workspace.
Everything on this page describes shipped behaviour, including the gaps. I'm not going to pretend the limits aren't there. They're tracked, and support gets deeper release by release.
Read your agents’ code with a real IDE.
Language intelligence ships inside Shikigami. Free, no account, macOS and Linux.