mirror of
https://github.com/renovatebot/renovate.git
synced 2026-10-31 09:41:46 +00:00
97327c3d28
* refactor(linters): add prefer-coerce-array rule Refs #45217 `x ?? []` and `coerceArray(x)` say the same thing, but only the second one is searchable and consistent. The rule flags a `??` whose default is a bare `[]` literal; a non-empty default or an asserted `([] as Foo[])` still passes. Applying it across `lib/` surfaced three spots the helper cannot cover, which keep `?? []` with a disable comment or a narrower fix: - `package-files.ts` destructures a tuple, which `coerceArray()` widens - `generate.spec.ts` defaults `matchAll()`, an iterator rather than an array - `mise/upgradeable-tooling.ts` declares a `Record` return, so its `?? []` fallback was wrong to begin with and becomes `coerceObject()` * refactor(platform/github): hoist the GHE version header lookup `Object.entries(...).find()` returns a tuple, and defaulting it with `?? []` only to destructure the second element reads as an array default when it is not one. Name the found entry instead, which drops the `?? []` rather than routing a tuple through `coerceArray()`.
33 lines
832 B
TypeScript
33 lines
832 B
TypeScript
import { defineRule } from '@oxlint/plugins';
|
|
|
|
/**
|
|
* Flags `x ?? []` in favour of `coerceArray(x)` from `lib/util/array.ts`.
|
|
*
|
|
* Only a bare `[]` literal counts: `x ?? [1]` keeps a meaningful default, and
|
|
* `x ?? ([] as Foo[])` carries an assertion the helper cannot express.
|
|
*/
|
|
export default defineRule({
|
|
meta: {
|
|
type: 'suggestion',
|
|
messages: {
|
|
preferCoerceArray:
|
|
'Use `coerceArray()` from `lib/util/array.ts` instead of `?? []`.',
|
|
},
|
|
},
|
|
createOnce(context) {
|
|
return {
|
|
LogicalExpression(node) {
|
|
if (node.operator !== '??') {
|
|
return;
|
|
}
|
|
if (
|
|
node.right.type === 'ArrayExpression' &&
|
|
node.right.elements.length === 0
|
|
) {
|
|
context.report({ node, messageId: 'preferCoerceArray' });
|
|
}
|
|
},
|
|
};
|
|
},
|
|
});
|