Files
markitect-main/markitect/parser.py
tegwick ccbca967c8
Some checks failed
Test Suite / unit-tests (3.11) (push) Has been cancelled
Test Suite / unit-tests (3.12) (push) Has been cancelled
Test Suite / integration-tests (push) Has been cancelled
Test Suite / e2e-tests (push) Has been cancelled
Test Suite / performance-tests (push) Has been cancelled
Test Suite / code-quality (push) Has been cancelled
Test Suite / security-scan (push) Has been cancelled
Test Suite / test-summary (push) Has been cancelled
feat: Complete Issue #8 - Detailed Validation Error Reporting and CLI Enhancements
Major Features:
- Implement comprehensive validation error reporting system (Issue #8)
- Add direct CLI access with 'markitect' command
- Create extensive makefile targets for CLI usage
- Enhance schema validation with detailed error collection

Components Added:
- markitect/validation_error.py: ValidationError system with 8 error types
- Enhanced markitect/schema_validator.py: Detailed error reporting methods
- markitect/cli.py: Enhanced with --detailed-errors and --error-format options
- visualize_schema.py: Schema visualization with ASCII and colorful modes
- Comprehensive test suite for validation error reporting

CLI Enhancements:
- Direct 'markitect' command access for all operations
- Makefile targets for typical CLI usage (cli-help, cli-ingest, etc.)
- Support for text, JSON, and markdown error output formats
- Backward compatibility with existing validation functionality

Testing:
- 11 comprehensive tests for Issue #8 validation error reporting
- Tests for schema validation, visualization, and CLI integration
- 100% test coverage for validation error scenarios

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 21:21:21 +02:00

27 lines
1.1 KiB
Python

from markdown_it import MarkdownIt
def parse_markdown_to_ast(md_content: str):
# Enable table parsing and other common plugins
md = MarkdownIt("commonmark", {"tables": True}).enable(['table'])
tokens = md.parse(md_content)
# Convert to a JSON-serializable list of dicts (tokens are objects, so we dict-ify them recursively)
def token_to_dict(token):
d = {
'type': token.type,
'tag': token.tag,
'attrs': token.attrs,
'map': token.map,
'nesting': token.nesting,
'level': token.level,
'children': [token_to_dict(child) if child else None for child in token.children] if token.children else None,
'content': token.content,
'markup': token.markup,
'info': token.info,
'meta': token.meta,
'block': token.block,
'hidden': token.hidden
}
return {k: v for k, v in d.items() if v is not None} # Remove None values for cleanliness
return [token_to_dict(token) for token in tokens]