GithubHelp home page GithubHelp logo

Comments (5)

exterm avatar exterm commented on July 28, 2024 1

is there any reason we don't just ask zeitwerk itself for where a constant lives?

We investigated that in the beginning, but for zeitwerk determining the location of a constant involves loading constants. IIRC, to resolve Sales::Order, zeitwerk would first load Sales, then register an autoload on it for Order on it, then execute that.

My memory is a little fuzzy but the takeaway is that for zeitwerk, resolving constants involves loading constants, and we deemed that to be too slow, especially seeing as loading one constant can create a whole cascade of other constants to load.

from packwerk.

mclark avatar mclark commented on July 28, 2024

Just to be clear, if there is no opposition to this change (which shouldn't affect anyone except those using the esoteric Zeitwerk::Loader#push_dir method), then I'm happy to start work on a branch to add this support.

from packwerk.

exterm avatar exterm commented on July 28, 2024

I think this generally makes sense. I'm curious to see what the implementation would look like, but I don't expect any blockers there.

It looks like the bulk of the implementation for this would live in constant_resolver, so as a next step I'd be interested in seeing a test case that shows the new behavior on that level.

I'd also be curious to hear what @rafaelfranca and @alexevanczuk think about this change, in case I'm missing something. My impression is that this adds a small amount of complexity, in a pretty contained fashion--I don't expect many additions to packwerk itself--for the benefit of being more compatible with Rails.

from packwerk.

rafaelfranca avatar rafaelfranca commented on July 28, 2024

I'm ok with this change, we already require Zeitwerk to be used in the application in order to Packwerk to check.

from packwerk.

alexevanczuk avatar alexevanczuk commented on July 28, 2024

Agreed – my understanding is this is all about making sure that we can properly identify the file path where a constant is defined, and part of doing so is making sure that constant_resolver understands all of zeitwerks features.

Quick question... is there any reason we don't just ask zeitwerk itself for where a constant lives? Now that rails is loaded in the environment while parsing files, I wonder if we can just ask zeitwerk directly. I'm not sure that makes sense, but it might allow us to resolve all issues where constant_resolver doesn't implement a zeitwerk feature in one fell swoop. I'm not sure this API is even available in zeitwerk, or if it is, if it's reliable without eager loading the application. Just a thought!

from packwerk.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.