MartinKolarik / dedent-js

Remove indentation from multiline strings
MIT License
55 stars 6 forks source link

dedents when it shouldn't #3

Open brandonkal opened 4 years ago

brandonkal commented 4 years ago
dedent`
one:
   two: 3
`

becomes

one:
two: 3
MartinKolarik commented 4 years ago

Looking at the code, I see that lines that have no indentation are ignored. It is not explicitly mentioned in the readme but I guess it makes sense, otherwise dedent would do nothing in those cases and there would be no point in using it.

brandonkal commented 4 years ago

I've created a fix and PR. I'm using this internal to a yaml template tag function. Naturally YAML is very indent focused but the function doesn't know ahead of time if a dedent needs to occur before parsing the string to a JavaScript object.

KernelDeimos commented 3 years ago

Looking at the code, I see that lines that have no indentation are ignored. It is not explicitly mentioned in the readme but I guess it makes sense, otherwise dedent would do nothing in those cases and there would be no point in using it.

Should dedent really be useful in this situation? I think consistent behaviour here has more advantages. Here are a few:

KernelDeimos commented 3 years ago

Also Github reports that there are over 18 thousand repositories using this package. It is irresponsible to leave this awful quirk in the code.

dvirtz commented 3 years ago

A possible workaround is to add a space at the begging of each line

dedent(text.replace(/(^[^\n]|\n)/g, '$1 '))
KevinGhadyani-minted commented 3 years ago

I think the issue here is you might be using dedent-js on something where you don't know the final tabbing. Because of that, it makes sense for dedent to do nothing. I'm also for this change.