// VIM-STRYKE — ENGINEERING REPORT

Vim / Neovim support for stryke · standalone stryke grammar (generated; all 10,407 builtins) · *.stk + shebang filetype detection · ALE lint via stryke --lint · vim-lsp / coc via stryke --lsp

>_EXECUTIVE SUMMARY

vim-stryke is the Vim / Neovim editor support for stryke — a highly parallel Perl 5 interpreter written in Rust (a Perl 5 superset). It ships as a standard Vim runtime tree (ftdetect/, syntax/, indent/, ftplugin/, plugin/, doc/), so pathogen / vim-plug / native packages add it to runtimepath with no special handling.

Design principle: the syntax file is a standalone stryke grammar, not a reskin of Vim's perl syntax. It is generated (scripts/gen_syntax.sh) directly from the stryke binary's own reflection tables — the %k keyword table, the %b builtin table, and the $c{parallel} category — so it carries the complete language surface (all 10,407 builtins) and never drifts. Regenerate after a stryke upgrade.

10,407
Builtins
39
Parallel builtins
90
Keywords
12
Type names
6
Runtime files
3
Integrations (ALE / vim-lsp / coc)
2
Detection paths (ext + shebang)
0
Config required

~RUNTIME LAYOUT

Standard Vim runtime directories. Each file is loaded automatically when the plugin is on runtimepath; no entry point or sourcing call is required.

FileResponsibility
ftdetect/stryke.vimSets filetype=stryke for *.stk files and for any file whose first line is a stryke shebang (e.g. #!/usr/bin/env stryke).
syntax/stryke.vimStandalone stryke grammar (generated) — comments / POD, numbers, sigil variables, strings / here-docs / regex, all 10,407 builtins + keywords / types / operators, linked to standard highlight groups.
indent/stryke.vimStandalone indentexpr (GetStrykeIndent()) — indents after a line opening a block / paren / bracket, dedents lines starting with a closing delimiter.
ftplugin/stryke.vimBuffer-local options: commentstring=# %s, comments=:#, comment-continuation formatoptions, with a matching b:undo_ftplugin.
plugin/stryke.vimGlobal wiring: ALE linter definition, vim-lsp server registration, coc snippet (commented), and the g:vim_stryke_no_ale / g:vim_stryke_no_lsp opt-outs, behind a load guard.
doc/stryke.txtVim help (:help vim-stryke) with tagged sections for install, detection, syntax, linting, LSP, and options.

$SYNTAX COVERAGE

Token categories taken verbatim from the official stryke lexer category sets. Thread macros (~>, ~>> / ->>, |>, and the streaming ~s> / parallel ~p> / distributed ~d> variants) are first-class stryke operators and are highlighted.

GroupTokens (sample)Highlight link
Declarationsmy var val our local state const typed use package pub is asStorageClass
Function / type introducersfn sub method class trait struct enum impl extendsKeyword
Control flowif elsif else unless while until loop for match when try catch finally deferStatement
Phase / block hooksBEGIN END INIT CHECK UNITCHECK BUILD DESTROYPreProc
Word operatorsand or not xor cmp eq ne lt le gt ge xOperator
Parallel builtins (39)pmap pgrep pfor ploop pwhile pchannel preduce fan par_walkFunction
Builtins (10,407)p say print map grep reduce json_encode sha256 fetch ai a_law_decodeFunction
Type names (12)Int Str Float Bool Num Any Array Hash List Map Set VoidType
Literals & varssigils ($/@/%), $_ topic, special vars, strings, here-docs, m///s////tr////qr// regex, numbersString / Number / Identifier

#TOOLING INTEGRATION

All three integrations degrade gracefully: each is guarded so the plugin loads cleanly whether or not ALE / vim-lsp / coc is installed. CLI flags verified against stryke --help (v0.17.22).

IntegrationMechanism
ALERegisters a linter via ale#linter#Define running stryke --lint %t; the handler parses <message> at <file> line <n> into error items. Skipped if ALE is absent or g:vim_stryke_no_ale is set.
vim-lspRegisters a server (lsp#register_server) running stryke --lsp, allowlisted for the stryke and perl filetypes. Skipped if vim-lsp is absent or g:vim_stryke_no_lsp is set.
coc.nvimA ready-to-paste languageserver block for coc-settings.json using stryke --lsp, documented in the plugin source and README.

@COMPATIBILITY

TargetStatus
Vim 8+Filetype, syntax, indent, ftplugin, doc
NeovimSame runtime files (no Lua required)
pathogen / vim-plug / native packagesStandard runtime layout — no plugin-manager-specific handling
ALEstryke --lint linter
vim-lspstryke --lsp server
coc.nvimlanguageserver config provided