es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Saltar condicionalmente un campo en yasnippet

Estoy tratando de crear un yasnippet para una instrucción MOVE en COBOL. Escribir instrucciones MOVE es algo que hacemos MUCHO y quiero ser lo más rápido y eficiente posible con eso.

Usualmente es algo como esto:

MOVE variable-1 TO variable-2

pero a veces también utilizamos funciones:

MOVE FUNCTION LENGTH(variable-1) TO variable-2

Por lo tanto, lo que busco es un fragmento que omita el campo-2 si el campo-1 es “FUNCTION”.

Lo que tengo ahora es:

MOVE $1 ${2:$$(unless (or yas-modified-p yas-moving-away-p (equal (upcase (yas-field-value 1)) "FUNCTION")) (yas-skip-and-clear-field))} TO $0

Esto funciona muy bien para el caso “MOVE FUNCTION…”, pero en otros casos no funciona.
Cuando presiono TAB después de ingresar variable-1 en campo-1, obtengo (el cursor está |):

MOVE variable-1 #<marker at="" 2998="" in="" text.cbl="">| TO

Por lo tanto, parece que se imprime el valor de retorno de yas-skip-and-clear-field en lugar de saltar a $0.

¿Cómo podría resolver esto? ¿O hay alguna mejor manera de hacerlo?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puedes modificar el yasnippet para usar una declaración “if” para verificar si el valor en el campo-1 es igual a “FUNCTION” y omitir el campo-2 en consecuencia. Aquí tienes una versión actualizada del yasnippet:

    # -*- mode: snippet -*-
    # name: move
    # key: move
    # expand-env: ((yas-indent-line 'fixed))
    # --
    MOVER $1${2:$(if (string= (upcase yas-text) "FUNCTION") "" (concat " TO " yas-choose-value))} $0
    

    En este yasnippet, usamos una declaración “if” para verificar si el valor del campo-1 (representado por yas-text) es igual a “FUNCTION”. Si lo es, dejamos en blanco el campo-2 (usando una cadena vacía como valor para la declaración then). Si no lo es, usamos yas-choose-value para obtener el valor elegido del campo-2 (que será ” TO ” seguido del nombre de la variable elegida). De esta manera, si escribes “FUNCTION” en el campo-1, se omitirá el campo-2, y si escribes cualquier otra cosa, se te pedirá que elijas una variable para el campo-2 como de costumbre.

    ¡Espero que esto ayude! Avísame si tienes alguna pregunta adicional.

Comments are closed.