Skip to content

Parser: implement default, clear, name, use, and indirect meta-types #42

@unclesp1d3r

Description

@unclesp1d3r

Summary

Implement the meta-type specifiers that control rule evaluation flow: default, clear, name, use, and indirect.

Context

These are not data types but control directives within magic files:

  • default - Provides fallback text when no other rule at this level matches
  • clear - Clears the match state for the current level
  • name - Defines a named subroutine of magic rules
  • use - Calls a named subroutine (like a function call)
  • indirect - Recursively apply magic rules at the given offset (enables format-within-format detection)

Current state: None of these are recognized by the parser.

Acceptance Criteria

  • Parser recognizes default, clear, name, use, indirect as special types
  • default provides fallback description text
  • name/use enable rule subroutines (define and invoke)
  • indirect triggers recursive evaluation at the specified offset
  • clear resets match state for current rule level
  • Unit tests for each meta-type
  • Integration test demonstrating name/use for rule reuse

Impact

MEDIUM-HIGH - name/use are used extensively in system magic files for rule deduplication. default is common for providing "unknown subtype" descriptions. indirect enables ZIP content inspection and similar nested format detection.

Files to Modify

  • src/parser/ast.rs - Extend TypeKind or add separate enum for directives
  • src/parser/grammar.rs - Parse meta-type specifiers
  • src/evaluator/mod.rs - Implement evaluation logic for each

References

Metadata

Metadata

Assignees

Labels

compatibilitylibmagic compatibility and migrationenhancementNew feature or requestevaluatorRule evaluation engine and logicparserMagic file parsing components and grammarpriority:normalStandard work item
No fields configured for Feature.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions