Existe-t-il une documentation SMIE claire?


18

J'ai passé de très nombreuses heures à essayer de faire fonctionner n'importe quelle règle / grammaire / chose d'indentation SMIE.

Y a-t-il des exemples d'un petit mode SMIE basé sur un jouet ou un squelette avec une documentation sur la façon dont il fonctionne réellement, ou une discussion sur la façon de l'utiliser? Quelque chose qui, par exemple, définit une expression comme une chaîne de jetons se terminant par un point-virgule et un bloc comme des expressions entre crochets et rien d'autre. Vraiment, vraiment simple?

Questions spécifiques: lorsque j'utilise smie-config-show-indent 90% du temps, j'obtiens la réponse ': list-intro "" -> nil'. Sur quoi la list-intro fonde-t-elle sa définition d'une expression ou d'une liste d'expressions? Pourquoi dit-il zéro et indente-t-il toujours les lignes suivantes? Comment puis-je le changer?

Deuxièmement: y a-t-il une relation entre ma grammaire et mes règles smie? Je suppose qu'il y en a parce qu'ils sont tous les deux passés dans smie-setup, mais je ne trouve aucun moyen de dire, "quand vous voyez un 'bloc', indenter le contenu", par exemple, basé sur une grammaire qui identifie un bloc .

Troisièmement, SMIE semble avoir beaucoup de règles "intégrées". Le simple fait de le lancer donne une gestion générale des crochets, des accolades et des parenthèses par exemple. Existe-t-il un moyen de voir ces règles ou de les modifier? Ou est-ce que la table de syntaxe fait tout cela et SMIE ne fait littéralement rien du tout (ce que je commence à soupçonner).

Enfin, lorsque j'essaie de déboguer SMIE, j'essaie de faire un "éditer, tampon en mode eval, aller à l'exemple de code dans un autre tampon, MX <mon mode>, tester" cycle mais il semble que chaque voyage n'efface pas les règles de le cycle précédent. Comment puis-je être sûr que le mode dérivé défini commence à partir d'une feuille blanche? J'ai (kill-all-local-variables) mais cela ne semble pas être suffisant et je finis par devoir fermer emacs.

Je ne publie aucun exemple de ce que j'ai parce que je n'ai rien qui fonctionne même vaguement, à part la mise en évidence (en utilisant font-lock-defaults, donc ce n'est même pas vraiment SMIE je suppose). J'ai besoin de vrais petits pas.


1
Essayez de demander de la documentation à l'auteur SMIE?
Drew

4
@drew Il a déclaré publiquement qu'il n'était pas un bon documentariste (et après avoir lu sa documentation, je ne peux pas argumenter), cela semble donc inutile.
Nagora

1
Oui je sais. Il a même dit que le code devrait suffire en tant que doc. Oh, ai-je oublié de mettre un " ;-) " après ma suggestion? ;-)
Drew

1
J'ai jeté un coup d'œil à cela il y a un certain temps et j'ai remarqué que cela lisp/progmodes/sh-script.elsemble être smie.elassez utilisé . Ils semblent également documenter leur utilisation, alors peut-être que cela pourrait être un meilleur exemple?
Xaldew

2
Le mode SML et le mode Modula2 utilisent tous deux SMIE. IIRC SMIE a été extrait du mode SML à l'origine. Je dois admettre que j'ai également trouvé cela particulièrement difficile.
ocodo

Réponses:



1

Vous pourriez commencer avec quelque chose comme

(defconst foo-smie-grammar
    (smie-prec2->grammar
     (smie-bnf->prec2
      '((exp ("begin" insts "end"))
        (insts (exp) (insts ";" insts))))))

  ...
  (smie-setup foo-smie-grammar #'ignore)
  ...
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.