[ruby-core:117794] [Ruby master Bug#20474] Heredoc common leading whitespace calculation question

Issue #20474 has been reported by kddnewton (Kevin Newton). ---------------------------------------- Bug #20474: Heredoc common leading whitespace calculation question https://bugs.ruby-lang.org/issues/20474 * Author: kddnewton (Kevin Newton) * Status: Open * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- I think I understand that <<~ will strip common leading whitespace from all lines. However, I am confused by the following example: ```ruby eval("<<~H\n \nh\n \nH\n") ``` In this example, the heredoc has 3 lines: " \n", "h\n", and " \n". The common leading whitespace is definitely 0, because of the 2nd line. However, the string is equal to `"\nh\n\n"`. In fact, no matter how many spaces you put _before_ the `h`, it will always be equal to `"\nh\n\n"`. I'm not sure if this is a bug, or even what is happening here. Could someone explain? -- https://bugs.ruby-lang.org/

Issue #20474 has been updated by nobu (Nobuyoshi Nakada). It looks like a bug. ---------------------------------------- Bug #20474: Heredoc common leading whitespace calculation question https://bugs.ruby-lang.org/issues/20474#change-108209 * Author: kddnewton (Kevin Newton) * Status: Open * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- I think I understand that <<~ will strip common leading whitespace from all lines. However, I am confused by the following example: ```ruby eval("<<~H\n \nh\n \nH\n") ``` In this example, the heredoc has 3 lines: " \n", "h\n", and " \n". The common leading whitespace is definitely 0, because of the 2nd line. However, the string is equal to `"\nh\n\n"`. In fact, no matter how many spaces you put _before_ the `h`, it will always be equal to `"\nh\n\n"`. I'm not sure if this is a bug, or even what is happening here. Could someone explain? -- https://bugs.ruby-lang.org/

Issue #20474 has been updated by kddnewton (Kevin Newton). Thank you! ---------------------------------------- Bug #20474: Heredoc common leading whitespace calculation question https://bugs.ruby-lang.org/issues/20474#change-108218 * Author: kddnewton (Kevin Newton) * Status: Closed * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- I think I understand that <<~ will strip common leading whitespace from all lines. However, I am confused by the following example: ```ruby eval("<<~H\n \nh\n \nH\n") ``` In this example, the heredoc has 3 lines: " \n", "h\n", and " \n". The common leading whitespace is definitely 0, because of the 2nd line. However, the string is equal to `"\nh\n\n"`. In fact, no matter how many spaces you put _before_ the `h`, it will always be equal to `"\nh\n\n"`. I'm not sure if this is a bug, or even what is happening here. Could someone explain? -- https://bugs.ruby-lang.org/

Issue #20474 has been updated by Dan0042 (Daniel DeLorme).
However, the string is equal to `"\nh\n\n"`.
I would have expected it to be ``` " \nh\n \n" ``` but ignoring all whitespace from blank lines seems like a convenient feature to me.
In fact, no matter how many spaces you put _before_ the `h`, it will always be equal to `"\nh\n\n"`.
I'm pretty sure that's normal; many/most editors will strip the indentation of blank lines, so we want common leading whitespace to be computed only for lines that have some non-whitespace character. ---------------------------------------- Bug #20474: Heredoc common leading whitespace calculation question https://bugs.ruby-lang.org/issues/20474#change-108219 * Author: kddnewton (Kevin Newton) * Status: Closed * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- I think I understand that <<~ will strip common leading whitespace from all lines. However, I am confused by the following example: ```ruby eval("<<~H\n \nh\n \nH\n") ``` In this example, the heredoc has 3 lines: " \n", "h\n", and " \n". The common leading whitespace is definitely 0, because of the 2nd line. However, the string is equal to `"\nh\n\n"`. In fact, no matter how many spaces you put _before_ the `h`, it will always be equal to `"\nh\n\n"`. I'm not sure if this is a bug, or even what is happening here. Could someone explain? -- https://bugs.ruby-lang.org/
participants (3)
-
Dan0042 (Daniel DeLorme)
-
kddnewton (Kevin Newton)
-
nobu (Nobuyoshi Nakada)