Skip to content
Editor

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 import added 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, or strict.
  • 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, foreach and catch bindings, closure use captures, and superglobals, each with its type where one can be determined.
  • Auto use imports 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.