fix(linter/no-empty-function): allow functions callbacks with allow: functions#22764
Conversation
There was a problem hiding this comment.
Pull request overview
Aligns eslint/no-empty-function with upstream ESLint so that anonymous function expressions used as initializers, default parameter values, assignment RHS, or call arguments are allowed under allow: ["functions"], while method/getter/setter contexts continue to be handled separately.
Changes:
- Extract a shared
is_allowed_function_expressionhelper used by theFunction,VariableDeclarator, and object-property branches. - Extend the ancestor walk to permit anonymous function expressions when the immediate enclosing container is not a
MethodDefinitionor object method/accessor, via newis_plain_function_expression_containerhelper. - Add a regression test covering variable initializer, default parameter, assignment RHS, and call argument scenarios.
Merging this PR will not alter performance
Comparing Footnotes
|
allow: functions
Merge activity
|
… functions` (#22764) Fixes #22754. This aligns `eslint/no-empty-function` with upstream ESLint for `allow: ["functions"]`. Anonymous function expressions used as default parameters, assignment values, or call arguments should be treated the same way as other regular function expressions, so they are now allowed by that option. I added a regression case covering the reported examples and kept method handling separate so `allow: ["functions"]` does not accidentally allow empty methods. eslint playground: https://eslint.org/play/#eyJ0ZXh0IjoiY29uc3QgeCA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgZnVuY3Rpb24gZmV0Y2hEYXRhKGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge30pIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge30sIDEwMDApOyIsIm9wdGlvbnMiOnsicnVsZXMiOnsibm8tZW1wdHktZnVuY3Rpb24iOlsiZXJyb3IiLHsiYWxsb3ciOlsiZnVuY3Rpb25zIl19XX0sImxhbmd1YWdlT3B0aW9ucyI6eyJwYXJzZXJPcHRpb25zIjp7ImVjbWFGZWF0dXJlcyI6e319fX19
b7893fa to
d9cb6d8
Compare
# Oxlint ### 🚀 Features - e4b1f46 linter/typescript: Implement `method-signature-style` rule (#22679) (Mikhail Baev) - bc462ca linter/vue: Implement no-reserved-component-names rule (#22741) (bab) - ef9e751 linter/vue: Implement component-definition-name-casing rule (#22818) (bab) - d67f51a linter/vue: Implement require-prop-type-constructor rule (#22708) (bab) - 1444f82 linter/promise/spec-only: Add `Promise.try` to `Promise` static methods (#22812) (Ben Saufley) - 8422e8b linter/jsdoc: Implement `require-yields-description` rule (#22805) (Mikhail Baev) - fe93f97 linter/eslint: Implement `prefer-named-capture-group` rule (#22759) (Sebastian Poxhofer) - 1a7798b linter: Add suggestion for `unicorn/no-new-array` (#22682) (Sysix) ### 🐛 Bug Fixes - 760a9f9 linter: Report errors when writing to the filesystem (#22881) (camc314) - e5a2748 linter: Avoid no-unreachable false positive after conditional loop (#22869) (camc314) - 39d92d6 linter/arrow-body-style: Preserve comments within function (#22854) (Sysix) - 3d13e29 parser: Reject `declare` in an already-ambient context (TS1038) (#22850) (Boshen) - 5152854 parser: Reject statements in ambient contexts (TS1036) (#22849) (Boshen) - 2eafea6 parser: Reject function implementations in ambient contexts (TS1183) (#22845) (Boshen) - c645615 parser: Reject incompatible class member modifiers (#22843) (Boshen) - 4a1ca4a linter/export: Detect duplicate explicit exports (#22798) (camc314) - 0a9a735 linter/no-loop-func: Allow safe let closures (#22811) (camc314) - 1599f11 linter: Align lsp extends default plugins (#22788) (camc314) - db32ec9 linter/no-accumulating-spread: Use loop as primary span (#22800) (camc314) - 33ec6b4 linter/consistent-test-it: Avoid adjacent describe leakage (#22796) (camc314) - 2606069 linter/no-array-sort: Unwrap parenthesized sort args (#22794) (camc314) - 9f2f709 linter/no-array-sort: Skip non compare fn sort arguments (#22752) (Gaurav Dubey) - 27268a0 linter/no-else-return: Preserve statement boundary in fixer (#22687) (camc314) - d9cb6d8 linter/no-empty-function: Allow functions callbacks with `allow: functions` (#22764) (camc314) - a40a314 linter/no-shadow-restricted-names: Ignore enum members (#22762) (camc314) - 82366d9 linter/no-cond-assign: Align ternary handling (#22761) (camc314) ### 📚 Documentation - 5e113ba linter: Add license notices for ported ESLint plugins (#22768) (Boshen) # Oxfmt ### 🚀 Features - d75cbbf oxfmt: Format `parser:json` files by `oxc_formatter_json` (#22709) (leaysgur) - 49db054 formatter_json: Implement `oxc_formatter_json` (json variant only) (#22641) (leaysgur) - 9c71f2e ast, codegen, formatter: Add `WithClauseKeyword::as_str` helper and use it (#22791) (camc314) ### 🐛 Bug Fixes - d3cdd62 oxfmt: Skip formatting for whitespace-only file (#22780) (leaysgur) - 23f0cc8 formatter: Don't move comments inside variable declaration in for in loop (#22776) (leaysgur) - f200c40 formatter: Don't move comments inside variable declaration in for of loop (#22773) (Leonabcd123) ### 📚 Documentation - 845f393 oxfmt,formatter,formatter_json,formatter_core: Add/update AGENTS.md (#22873) (leaysgur)
Fixes #22754.
This aligns
eslint/no-empty-functionwith upstream ESLint forallow: ["functions"]. Anonymous function expressions used as default parameters, assignment values, or call arguments should be treated the same way as other regular function expressions, so they are now allowed by that option.I added a regression case covering the reported examples and kept method handling separate so
allow: ["functions"]does not accidentally allow empty methods.eslint playground: https://eslint.org/play/#eyJ0ZXh0IjoiY29uc3QgeCA9IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgZnVuY3Rpb24gZmV0Y2hEYXRhKGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge30pIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge30sIDEwMDApOyIsIm9wdGlvbnMiOnsicnVsZXMiOnsibm8tZW1wdHktZnVuY3Rpb24iOlsiZXJyb3IiLHsiYWxsb3ciOlsiZnVuY3Rpb25zIl19XX0sImxhbmd1YWdlT3B0aW9ucyI6eyJwYXJzZXJPcHRpb25zIjp7ImVjbWFGZWF0dXJlcyI6e319fX19