From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-2.6 required=3.0 tests=AWL,BAYES_00, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY shortcircuit=no autolearn=no autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id D84081F9FC for ; Sun, 28 Mar 2021 06:05:53 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id A1583120B2A; Sun, 28 Mar 2021 15:04:51 +0900 (JST) Received: from xtrwkhkc.outbound-mail.sendgrid.net (xtrwkhkc.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 047F2120B22 for ; Sun, 28 Mar 2021 15:04:48 +0900 (JST) Received: by filterdrecv-p3mdw1-85cc49d4fc-495tw with SMTP id filterdrecv-p3mdw1-85cc49d4fc-495tw-20-60601CB9-38 2021-03-28 06:05:45.246144733 +0000 UTC m=+387169.786260085 Received: from herokuapp.com (unknown) by geopod-ismtpd-4-0 (SG) with ESMTP id hXMMicJbRiuzPbhOQqdEnQ for ; Sun, 28 Mar 2021 06:05:45.204 +0000 (UTC) Date: Sun, 28 Mar 2021 06:05:45 +0000 (UTC) From: sawadatsuyoshi@gmail.com Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 79104 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 17753 X-Redmine-Issue-Author: tenderlovemaking X-Redmine-Sender: sawa X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: =?us-ascii?Q?jFXA8Rt481sXUUIO9tYW1AJlMOZdNdlSw=2F5TfLCefGu5qTeDDkP2tlbAJdPAM9?= =?us-ascii?Q?QkUifepcGQi0t1O0I6bYSflGA0r978sITnEca0n?= =?us-ascii?Q?NOdyawY8ZYzBDohvkyrRmzOft7u8UcagNYIEI0q?= =?us-ascii?Q?pAhNXsUov9Jeobjf3m1o0bF6nO6wT489YaTj4HK?= =?us-ascii?Q?oBbvoS7eUqsnZo8N5dvDtIlqCII3aiWw1XBBahI?= =?us-ascii?Q?488HH7=2FyfRu4rnalg=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 103069 Subject: [ruby-core:103069] [Ruby master Feature#17753] Add Module#outer_scope X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" Issue #17753 has been updated by sawa (Tsuyoshi Sawada). This feature is reminiscent of `Module.nesting`. The difference is that the former has dynamic scope and the latter lexical scope. Besides that, I do not see any reason to make them different in any way. What about returning an array of the nested modules (perhaps including the current one) rather than just the direct parent? ```ruby module A; module B; class C; Module.nesting end end end # => [A::B::C, A::B, A] A::B::C.outer_scope # => [A::B::C, A::B, A] ``` ---------------------------------------- Feature #17753: Add Module#outer_scope https://bugs.ruby-lang.org/issues/17753#change-91132 * Author: tenderlovemaking (Aaron Patterson) * Status: Open * Priority: Normal ---------------------------------------- Given code like this: ```ruby module A module B class C; end class D; end end end ``` We can get from `C` to `B` like `C.outer_scope`, or to `A` like `C.outer_scope.outer_scope`. I want to use this in cases where I don't know the outer scope, but I want to find constants that are "siblings" of a constant. For example, I can do `A::B::C.outer_scope.constants` to find the list of "sibling" constants to `C`. I want to use this feature when walking objects and introspecting. For example: ```ruby ObjectSpace.each_object(Class) do |k| p siblings: k.outer_scope.constants end ``` I've attached a patch that implements this feature, and there is a pull request on GitHub [here](https://github.com/ruby/ruby/pull/4326). ---Files-------------------------------- 0001-Add-Module-outer_scope.patch (5.93 KB) 0001-Add-Module-namespace.patch (5.89 KB) -- https://bugs.ruby-lang.org/