-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
fix(eslint-plugin): [init-declarations] refine report locations #8893
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(eslint-plugin): [init-declarations] refine report locations #8893
Conversation
Thanks for the PR, @kirkwaiblinger! typescript-eslint is a 100% community driven project, and we are incredibly grateful that you are contributing to that community. The core maintainers work on this in their personal time, so please understand that it may not be possible for them to review your work immediately. Thanks again! 🙏 Please, if you or your company is finding typescript-eslint valuable, help us sustain the project by sponsoring it transparently on https://opencollective.com/typescript-eslint. |
✅ Deploy Preview for typescript-eslint ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
6b5d7c2
to
06bfce3
Compare
06bfce3
to
7ff131d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
? reportOverride | ||
: Reflect.get(context, prop, receiver), | ||
}); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
😬 It's a little awkward having to Proxy
the base rule. Is there an issue that was ever filed on ESLint about better handling of report locations in this case? I couldn't find one. But even if it's declined as out-of-scope, it'd be good for reference.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure... I basically copied this pattern from
typescript-eslint/packages/eslint-plugin/src/rules/lines-around-comment.ts
Lines 417 to 430 in 21375f6
// we can't directly proxy `context` because its `report` property is non-configurable | |
// and non-writable. So we proxy `customContext` and redirect all | |
// property access to the original context except for `report` | |
const proxiedContext = new Proxy<typeof context>( | |
customContext as typeof context, | |
{ | |
get(target, path, receiver): unknown { | |
if (path !== 'report') { | |
return Reflect.get(context, path, receiver); | |
} | |
return Reflect.get(target, path, receiver); | |
}, | |
}, | |
); |
and
typescript-eslint/packages/eslint-plugin/src/rules/prefer-destructuring.ts
Lines 196 to 206 in 3c6379b
// we can't directly proxy `context` because its `report` property is non-configurable | |
// and non-writable. So we proxy `customContext` and redirect all | |
// property access to the original context except for `report` | |
return new Proxy<Context>(customContext as typeof context, { | |
get(target, path, receiver): unknown { | |
if (path !== 'report') { | |
return Reflect.get(context, path, receiver); | |
} | |
return Reflect.get(target, path, receiver); | |
}, | |
}); |
And modified it with stylistic preferences.
Following the trail through the git history, it doesn't look like any investigation into alternatives or issues with eslint were documented in those.
(breadcrumbs)
- feat(eslint-plugin): [lines-around-comment] add extension rule #5327: first appearance of proxy pattern, not remarked upon.
- feat(eslint-plugin): add new extended rule
prefer-destructuring
#7117: pattern copied, remark in feat(eslint-plugin): add new extended ruleprefer-destructuring
#7117 (comment) addresses caching of the proxy, but not the proxy itself.
Will plan to check for eslint issues on the topic before this PR gets merged
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
before this PR gets merged
Oh @kirkwaiblinger I was going to merge today for the Monday release and consider this a followup. But in that case I'll just let you merge whenever you want.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Followup makes sense to me too! 👍
Happy for us to merge for the release
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Opened eslint/eslint#18557
PR Checklist
Overview
Note that the following example is unchanged