Comments (5)
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.
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.
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.
I'm ok with this change, we already require Zeitwerk to be used in the application in order to Packwerk to check.
from packwerk.
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 zeitwerk
s 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)
- [Packwerk 3.0] Ensure API boundaries are up-to-date HOT 1
- [Bug Report] Syntax error when rendering two partials HOT 1
- [Bug Report] Runtime Error after running packwerk check HOT 1
- Packwerk thinks that `app/helpers/foobar_fizz.rb` is in the package `app/helpers/foobar` and not `app/helpers`
- [Bug Report] Stale violations on deleted files HOT 1
- [Bug Report] - Packwerk::NodeHelpers::TypeError HOT 3
- [Bug Report] deprecated_references.yml files erroneously removed if running `packwerk update-deprecations` with the `--package` argument
- [Bug Report] Behaviour of enforce_dependencies: key missing HOT 1
- [Bug Report] Improve strict mode HOT 2
- [Bug Report] Insufficient release notes HOT 2
- [Bug Report] packwerk is disabling Sorbet runtime checks, globally on Spring
- [Bug Report] Disable sorbet when using spring
- [Feature Request] Detect stale todos HOT 1
- [Bug Report] Exception when loading signatures
- [Bug Report] Default require behaviour
- [Bug Report] Dependency violation not detected when using public folders or in non-public folder with dependencies specified HOT 1
- [Feature Request] Allow configuration of `package_todo.yml` violation destinations HOT 4
- [Feature Request] Separate run-time and test-time dependencies HOT 11
- [Bug Report] HOT 2
- [Bug Report] bundler: failed to load command: packwerk HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from packwerk.