From: "Eregon (Benoit Daloze) via ruby-core" Date: 2025-12-15T16:32:02+00:00 Subject: [ruby-core:124214] [Ruby Bug#21784] Proc#source_location start column seems strange for -> {} Issue #21784 has been updated by Eregon (Benoit Daloze). Interesting. The arguments (parameters) between `->` and `{` are AFAIK integral part of the stabby lambda syntax, so I think it should be either: * All cases start at the `{`: * consistent with non-stabby-lambda Procs * but does not include the arguments which is an critical part of the lambda declaration (and this is not an issue for non-stabby-lambda Procs as the arguments come after `{` like `{ |args|`) * All cases start at the `->` * covers the whole expression * intuitive, I think most users would expect this one * Also enables e.g. `eval()`'ing the source string (in the right context) * Consistent with `for` Starting at the arguments but skipping `->` and some spaces seems strange/inconsistent. ---------------------------------------- Bug #21784: Proc#source_location start column seems strange for -> {} https://bugs.ruby-lang.org/issues/21784#change-115697 * Author: Eregon (Benoit Daloze) * Status: Open * ruby -v: ruby 4.0.0dev (2025-12-14T07:11:02Z master 711d14992e) +PRISM [x86_64-linux] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- ``` $ ruby -e 'p -> { a }.source_location' ["-e", 1, 4, 1, 10] ``` So it considers the stabby lambda to be at: ```ruby p -> { a }.source_location ^^^^^^ ``` Note it starts at a whitespace after the `->`. I think it should just include the `->`, i.e. return `["-e", 1, 2, 1, 10]`. Or possibly start at the `{`, i.e. return `["-e", 1, 3, 1, 10]`. But starting on a whitespace like here seems really strange, it looks like a bug. It's the same result with `--parser=parse.y`, so I don't show it. --- For context: For Procs/block it looks like this: ``` $ ruby -e 'p proc { a }.source_location' ["-e", 1, 7, 1, 12] ``` ```ruby p proc { a }.source_location ^^^^^ ``` This looks fine. The block could of course be given to any other method so it won't always be `proc` in front. Maybe it could include the method too (so it would return start column 2 here), I think either is fine. For `for` blocks it looks like this: ``` $ ruby -e ' def self.each(&b); yield b; end; for b in self 42 end p b.source_location' ["-e", 3, 0, 5, 3] ``` That is, it covers the entire `for` expression from `for` until `end`. I think that's good and fine as-is. For `def` methods it covers everything from `def` to `end` (or end of line for `def m = 42`), as expected. -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/