uqbar-project / wollok-ts-cli

Wollok Command Line Interface
GNU General Public License v3.0
9 stars 6 forks source link

opción "name" del cli no debería dejar usar caracteres especiales #188

Open asanzo opened 2 weeks ago

asanzo commented 2 weeks ago

Luego de hacer

wollok init -g -n 2024-o-tpiJuego

Me encuentro con código que no anda:

image

Debería:

nmigueles commented 1 week ago

Creo que el problema no es el caracter especial - si no que arranca con un numero.

Probe esto y funciono

wollok init Juego2024-TP-1 -g -n Juego2024-TP-1
image
nmigueles commented 1 week ago

No estoy seguro, pero parece un problema del parser a la hora de interpretar el import

asanzo commented 1 week ago

Buen dato!!

De todas formas, el name termina estando en nombres de archivos y en imports:

wollok init -g -n falopa

tira:

2024-09-29_21-34

Entonces,

Cada una de esas cosas tiene requisitos distintos.

Por ejemplo, un filename válido puede empezar con número, o tener un punto, pero como vos decís un módulo no.

Y no sé si un módulo admite caracteres como / , ? y otros, que podrían valer para un módulo, pero seguro no valen para un filename.

Entonces, no tengo que poder crear un proyecto con un name que no respete ambas restricciones (y no sé cuáles más)

Acá: https://github.com/uqbar-project/wollok-ts-cli/blob/5cf8ac4d5f7cb6feb80b3561212c55a92cfdba52/src/commands/init.ts#L36

Me imagino algo así como:

const exampleName = sanitize(name ?? 'example')

/** Sanitizes project name to allow it to be used as a filename and as a module name.
* If it doesn't start with a lowercase letter or a '_', it adds '_' at the beggining.
* Replaces every symbol not allowed with a '_'.
*/
const sanitize = name => name[0].replace(/([^a-z_])/g,'_$1') + name.slice(1).replace(/[^a-zA-z1-9_-]/g, '_')
nmigueles commented 1 week ago

Sii, tuve en cuenta eso en la implementación del pr que subi hace un rato. Lo único que no sanitiza, solo hace un camel case, no estaría mal agregar una sanitización como la que propones para dejarlo mas robusto

nmigueles commented 1 week ago

@asanzo Cuando tengas un ratito fijate que te parece la implementación https://github.com/uqbar-project/wollok-ts-cli/pull/193 que le agregue algo muy parecido a lo que proponias como fn de sanitización

asanzo commented 1 week ago

Jajajaja essssaa!!!! ¿Falra chequear longitud mínima quizás? De 1 caracter.... No?

Del resto, me gustaría chusmearlo mejor en la pc