He pasado muchas, muchas horas tratando de hacer que funcione cualquier tipo de regla / gramática / cosa de sangría SMIE.
¿Hay algún ejemplo de un modo pequeño, de juguete o esqueleto basado en SMIE con documentación sobre cómo funciona realmente, o alguna discusión sobre cómo usarlo? Algo que, por ejemplo, define una expresión como una cadena de tokens que termina en punto y coma y un bloque como algunas expresiones entre paréntesis y nada más. ¿Realmente, realmente simple?
Preguntas específicas: cuando uso smie-config-show-indent el 90% de las veces obtengo la respuesta ': list-intro "" -> nil'. ¿En qué se basa la introducción de la lista en su definición de una expresión o una lista de expresiones? ¿Por qué dice nil y aún sangra las siguientes líneas? ¿Cómo lo cambio?
En segundo lugar: ¿hay alguna relación entre mi gramática y mis reglas smie? Supongo que sí porque ambos se pasan a la configuración smie, pero no puedo encontrar ninguna forma de decir "cuando veas un 'bloque', sangra el contenido", por ejemplo, en base a una gramática que identifica un bloque .
En tercer lugar, SMIE parece tener muchas reglas "integradas". Simplemente comenzarlo da un manejo general de corchetes, llaves y paréntesis, por ejemplo. ¿Hay alguna forma de ver estas reglas o modificarlas? ¿O es que la tabla de sintaxis está haciendo todo esto y SMIE literalmente no está haciendo nada en absoluto (lo que estoy empezando a sospechar).
Finalmente, cuando intento depurar SMIE trato de hacer un "editar, evaluar el búfer de modo, ir al código de ejemplo en otro búfer, MX <mi modo>, probar" ciclo, pero parece que cada vuelta no borra las reglas de El ciclo anterior. ¿Cómo puedo estar seguro de que el modo definido derivado comienza desde una hoja limpia? Tengo (kill-all-local-variables) allí, pero no parece ser suficiente y termino teniendo que cerrar emacs.
No estoy publicando ningún ejemplo de lo que tengo porque no tengo nada que funcione vagamente, aparte de resaltar (usar font-lock-defaults, por lo que no es SMIE, supongo). Necesito algunos pasos de bebé reales.
fuente
lisp/progmodes/sh-script.el
parece que se usasmie.el
bastante. También parecen documentar su uso, por lo que quizás sea un mejor ejemplo.Respuestas:
Un modo que utiliza mucho SMIE es https://github.com/elixir-lang/emacs-elixir. Sin embargo, no estoy seguro de si realmente funciona: consulte la lista de errores relacionados con sangría.
fuente
Podrías comenzar con algo como
fuente