Indexion Kgf

by trkbt107ad5ad35a668No license2 starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 2 weeks ago

Debug and inspect KGF specs — view tokenization results, parse trees, and extracted edges from source files. Use when adding/fixing language support or when indexion's analysis output looks wrong.

Instructions onlySoftware Development
AI-generated overview

Inspect and debug KGF language specs by viewing tokens, parse events, and extracted dependency edges.

What it does
Wraps the indexion kgf command line to list, update, and install KGF language specs, and to inspect a source file's tokenization, parse events, and extracted dependency edges. It also documents common KGF spec authoring pitfalls such as PEG item ordering, newline handling between doc comments and keywords, bottom-up event ordering, and token priority conflicts. Output is diagnostic text shown in the terminal.
When to use it
Use it when adding or fixing language support in indexion, when a file's analysis output looks wrong, or when a grep pattern fails to match and you need to see the actual token kinds.
Requirements
Requires the indexion CLI with the kgf subcommand installed and available on PATH. The update and add subcommands download specs from GitHub, so network access is needed for those. No scripts ship with the skill; it is instructions only.

indexion kgf

Inspect and debug KGF language specs by viewing tokens, parse events, and extracted edges.

When to Use

  • User wants to debug how indexion processes a specific file
  • User is developing or modifying a KGF spec
  • User asks "how does indexion parse this file?"
  • Verifying that tokenization/parsing works correctly for a language
  • Debugging grep patterns: when a grep pattern doesn't match, use kgf tokens to see the actual token kinds

Subcommands

indexion kgf list — List Installed Specs

bash
indexion kgf list

indexion kgf update — Update All Specs

Download the latest specs from GitHub.

bash
indexion kgf update

indexion kgf add — Install a Single Spec

bash
indexion kgf add <spec-name>

indexion kgf inspect — Full Inspection

Show tokens, events, and edges all at once.

bash
indexion kgf inspect <file>indexion kgf inspect --spec=typescript src/app.ts

indexion kgf tokens — Tokenization Only

Show how a file is tokenized.

bash
indexion kgf tokens <file>indexion kgf tokens --spec=go-mod go.mod

indexion kgf events — Parse Events Only

Show parse events generated from tokens.

bash
indexion kgf events <file>

indexion kgf edges — Extracted Edges Only

Show the dependency edges extracted from a file.

bash
indexion kgf edges <file>indexion kgf edges fixtures/project/npm/package.json

Options

OptionDefaultDescription
--spec=NAMEauto-detectKGF spec name to use
--kgf-dir=PATHkgfsKGF specs directory

Relationship to grep

indexion grep uses KGF tokenization under the hood. Pattern aliases (pub → KW_pub) are derived from the === lex section of KGF specs.

When a grep pattern doesn't match as expected:

bash
# 1. See the actual tokens for a fileindexion kgf tokens src/config/paths.mbt
# 2. Check which token kinds existindexion kgf tokens src/config/paths.mbt | head -20
# 3. Then adjust your grep pattern to match the actual token kindsindexion grep "KW_pub KW_fn Ident" src/config/paths.mbt

Common token kinds (MoonBit):

  • KW_pub, KW_fn, KW_struct, KW_enum, KW_type, KW_trait, KW_let, KW_for
  • Ident (lowercase identifiers), TypeIdent (PascalCase type names)
  • LPAREN, RPAREN, LBRACE, RBRACE, LBRACKET, RBRACKET
  • NL (newline), SKIP (whitespace — filtered from grep patterns)
  • DocComment, DocLine, DocSection, LineComment, BlockComment
  • String, Number, Char

Workflow

  1. Run indexion kgf inspect <file> to see the full processing pipeline
  2. If something looks wrong, drill down with tokens, events, or edges
  3. Compare with the KGF spec file (kgfs/<lang>.kgf) to diagnose issues

KGF Development Pitfalls

Common bugs found when writing or modifying KGF specs:

PEG Item Ordering (first-match-wins)

KGF uses PEG parsing. In Item -> A / B / C, if A matches, B and C are never tried. DocComment as a standalone alternative before declaration rules will consume doc comments that should be attached to declarations.

# BAD: DocComment before FuncDecl — doc is consumed as standalone itemItem -> NL / DocComment / FuncDecl / Other
# GOOD: DocComment after declarations — FuncDecl's doc:DocComment? gets itItem -> NL / FuncDecl / DocComment / Other

NL Between Doc and Keyword

Source code has newlines between doc comments and declarations. Without NL? or NL*, the optional doc capture fails silently:

# BAD: DocComment immediately followed by keyword — NL breaks the matchFuncDecl -> doc:DocComment? KW_fn id:Ident ...
# GOOD: NL? allows the typical newline between doc and keywordFuncDecl -> doc:DocComment? NL? KW_fn id:Ident ...

Bottom-Up Event Order (bind/scope)

Events fire bottom-up: child rules before parent rules. If ExportDecl wraps FunctionDecl, FunctionDecl fires first. Use bind/$scope to pass data from child to parent:

on FunctionDecl {  bind ns "value" name "child_decl_id" to $id  edge declares from $file to sym_id attrs obj(...)}on ExportDecl when $doc {  let id = $scope("value", "child_decl_id")  edge declares from $file to sym_id attrs obj("doc", $doc, ...)}

Token Priority Conflicts

Tokens defined earlier take priority. A generic Operator /[=+\-*]+/ before EQ /=/ will consume = as Operator. Define specific tokens first:

# BAD: Operator matches = before EQ canTOKEN Operator /[!$%&*+\-.\/:<=>?@^|~]+/TOKEN EQ       /=/
# GOOD: EQ defined first, takes priorityTOKEN EQ       /=/TOKEN Operator /[!$%&*+\-.\/:<=>?@^|~]+/

Verifying Doc Extraction

After modifying a KGF, always verify doc appears in declares edges:

bash
# Must show doc="..." in the declares edgeindexion kgf edges test_file.ts --spec=typescript | grep declares
# If doc is missing, check events to see where the DocComment wentindexion kgf events test_file.ts --spec=typescript | grep DocComment

Source and attribution

Source:trkbt10/indexion-skillsinskills/indexion-kgfat commit7ad5ad3

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal