Parser surface (in build)

in-cli/src/parser_registry.rs resolves which front runs before the hybrid SIL pipeline. All 37 tracked languages go through the same unified path: Tree-sitter grammar (or dedicated front) → UnifiedModulefamily_typecheck → Core IR → SIL → codegen.

Resolution order:

  1. --parser in / --parser icore → force that Core IR front
  2. Magic first line #!in parser=… on a regular file
  3. IN_PARSER=in or IN_PARSER=icore
  4. Extension map below (case-insensitive)
  5. Unknown extensions fail closed with an .icore hint

Magic line

Extension → front

FamilyExtensionsParserIdFront
inaugurationinindedicated (in_lang_parse)
Core IR JSONicoreicorededicated (compiler::icore)
SwiftswiftswiftTree-sitter
C / headersc, hcTree-sitter
C++cc, cpp, cxx, hpp, hxx, hh, h++, ippcppTree-sitter
Objective-CmobjcTree-sitter
Objective-C++mmobjc++Tree-sitter
JavajavajavaTree-sitter
Kotlinkt, ktskotlinTree-sitter
Scalascala, scscalaTree-sitter
C#cscsharpTree-sitter
F#fs, fsx, fsifsharpTree-sitter
VB.NETvbvbdedicated boundary
Pythonpy, pyi, pywpythonTree-sitter
Rubyrb, rake, gemspecrubyTree-sitter
PHPphp, phtmlphpTree-sitter
Perlpl, pmperlTree-sitter
JavaScriptjs, mjs, cjs, jsxjavascriptTree-sitter
TypeScriptts, tsx, mts, ctstypescriptTree-sitter
GogogoTree-sitter
Vvvdedicated (v_front)
Rustrsrustdedicated (rust_front)
ZigzigzigTree-sitter
DartdartdartTree-sitter
LualualuaTree-sitter
Clojureclj, cljs, cljcclojurededicated boundary
GroovygroovygroovyTree-sitter
Elixirex, exselixirTree-sitter
Erlangerl, hrlerlangTree-sitter
Haskellhs, lhshaskellTree-sitter
JuliajljuliaTree-sitter
RrrTree-sitter
Nimnimnimdedicated boundary
OCamlml, mliocamlTree-sitter
Odinodinodindedicated boundary
Harehaharededicated boundary
HolyChc, HCholyctree-sitter-holyc
Ddddedicated boundary
Crystalcrcrystaldedicated boundary

.h headers map to c; some Objective-C headers share .h — ambiguous paths stay c Tree-sitter.

Current compatibility ladder

All 37 languages run the same pipeline: grammar → UnifiedModulefamily_typecheck → Core IR → SIL → codegen. Difference is extraction depth:

LevelMeaningLanguages
5Dedicated front or dedicated boundary front with verified extractionin, icore, V, JavaScript, TypeScript, Odin
4Tree-sitter body extraction + family typecheck + SIL artifact emissionAll other 31 languages

Run in languages --json for the full machine-readable split.