Outils

Outils de développement et utilitaires pour Catnip.

Liste des outils

Linter

Analyse statique du code Catnip : syntaxe, style et sémantique.

Commandes principales :

  • catnip lint script.cat - Analyse complète
  • catnip lint -l syntax script.cat - Syntaxe seulement
  • catnip check script.cat - Alias pour vérification syntaxe
  • catnip lint -l style script.cat - Style seulement
  • catnip lint -l semantic script.cat - Sémantique seulement

Diagnostics détectés :

  • Erreurs de syntaxe (E1xx)
  • Problèmes de style/formatage (W2xx)
  • Variables non définies (E3xx)
  • Variables non utilisées (W3xx)

Formatteur de code

Formatage automatique du code Catnip avec style opinionated (inspiré de Black).

Commandes principales :

  • catnip format script.cat - Formater un fichier
  • catnip format -- - Formater depuis stdin

Caractéristiques :

  • Préserve les commentaires et la structure
  • Indentation 4 espaces
  • Espaces autour des opérateurs binaires
  • Approche token-based (pas de reconstruction AST)

Extract Grammar

Extraction programmatique de la grammaire Catnip pour génération d'outils tiers.

Commandes principales :

  • python -m catnip.tools.extract_grammar - Affichage résumé
  • python -m catnip.tools.extract_grammar --json grammar.json - Export JSON
  • python -m catnip.tools.extract_grammar --update-lexer - Mise à jour lexer Pygments

Caractéristiques :

  • Extraction keywords, operators, terminals, rules
  • Export JSON structuré
  • Génération automatique de lexer Pygments
  • API programmatique

Lexer Pygments

Coloration syntaxique du code Catnip pour Sphinx, MkDocs, pygmentize et tous les outils compatibles Pygments.

Utilisation :

  • pygmentize -l catnip script.cat - Coloration terminal
  • Code blocks Sphinx/MkDocs avec .. code-block:: catnip
  • API programmatique avec CatnipLexer

Caractéristiques :

  • Auto-généré depuis grammar.lark (ne pas éditer manuellement)
  • Support complet des tokens Catnip (keywords, operators, strings, numbers, broadcasting)
  • États lexer pour gérer broadcasting et nested structures
  • Enregistré automatiquement via entry_points

Workflows courants

Linter le projet avant commit

# Vérification rapide (syntaxe)
catnip lint -l syntax **/*.cat

# Analyse complète
catnip lint **/*.cat

# Ignorer les warnings, échouer seulement sur erreurs
catnip lint **/*.cat 2>/dev/null || exit 1

Formater tout le code du projet

find . -name "*.cat" -type f -exec sh -c 'catnip format "$1" > "$1.tmp" && mv "$1.tmp" "$1"' _ {} \;

Générer lexer après modification grammaire

# 1. Modifier grammar.lark
# 2. Régénérer le lexer
python -m catnip.tools.extract_grammar --update-lexer

Export grammaire pour éditeur tiers

# Export JSON
python -m catnip.tools.extract_grammar --json catnip_grammar.json

# Utiliser dans VSCode, Vim, etc.

Coloration syntaxique dans la documentation

# Sphinx : utiliser code-block catnip
# Dans docs/conf.py
# pygments_style = 'monokai'

# MkDocs : activer pygments dans mkdocs.yml
# markdown_extensions:
#   - pymdownx.highlight:
#       use_pygments: true

# Export HTML standalone
pygmentize -l catnip -f html -O full,style=monokai script.cat > output.html