plopjs / plop

Consistency Made Simple
http://plopjs.com
MIT License
7.12k stars 277 forks source link

addMany has strange behavior for files with only one extension #370

Open SupernaviX opened 1 year ago

SupernaviX commented 1 year ago

Hi!

I was trying to use plop to scaffold a new server, and I saw that addMany had some strange behavior on dockerfiles. When my template directory contained a Dockerfile.hbs and Dockerfile.test.hbs, the target directory contains Dockerfile.hbs and Dockerfile.test. Plop strips the extension from the test file, but not the main one.

I think the reason is that the main file only has the .hbs extension. Looking at the implementation, it looks like extension stripping only works if there's still an extension left after the .hbs is removed.

Is this a bug? Or is it a feature? And either way, would you accept a pull request to change that behavior?

amwmedia commented 1 year ago

I looked at the implementation and I agree that it doesn't seem right. I'm not sure why we have it check to be sure there's an extension after the strip happens. Maybe there was an assumption that a no-extension file is not a valid state?

SupernaviX commented 1 year ago

Yeah, looking at the original issue and original PR it looks like the behavior was intentional. The author called it out in their examples and tests.

I think that making it so that stripExtensions: ['hbs'] turns 'Dockerfile.hbs' -> 'Dockerfile' is a straightforward improvement. But this would definitely be a breaking change for stripExtensions: true (I'm not totally sure why you'd ever have so many template extensions you couldn't just list them, but someone thought it was worth it to build that option).

I think I'll raise a PR to update the behavior when stripExtensions is an array, but preserve existing behavior if it's a boolean.