mirror of
https://github.com/luxexchange/eslint-config.git
synced 2026-10-30 18:13:47 +00:00
57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
function getMapKeys(node) {
|
|
return node.arguments[0]?.elements
|
|
?.map((element) => {
|
|
if (element?.type === 'ArrayExpression' && element?.elements?.length > 0) {
|
|
const keyElement = element?.elements?.[0]
|
|
if (keyElement.type === 'MemberExpression' && keyElement.property.type === 'Identifier') {
|
|
return keyElement.property.name
|
|
} else if (keyElement.type === 'Identifier') {
|
|
return keyElement.name
|
|
} else if (keyElement.type === 'Literal') {
|
|
return keyElement.value
|
|
}
|
|
}
|
|
return undefined
|
|
})
|
|
.filter((key) => key !== undefined)
|
|
}
|
|
|
|
function create(context) {
|
|
return {
|
|
NewExpression(node) {
|
|
if (node.callee.name !== 'Map') {
|
|
return
|
|
}
|
|
|
|
const keys = getMapKeys(node)
|
|
|
|
// Check if keys are iterable
|
|
if (!Array.isArray(keys)) {
|
|
return
|
|
}
|
|
|
|
const sortedKeys = [...keys].sort()
|
|
|
|
if (keys.join(',') !== sortedKeys.join(',')) {
|
|
context.report({
|
|
node,
|
|
message: `Map keys should be sorted alphabetically. Correct order: ${sortedKeys.join(', ')}`,
|
|
})
|
|
}
|
|
},
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
meta: {
|
|
type: 'suggestion',
|
|
docs: {
|
|
description: 'enforce alphabetical sorting of Map keys',
|
|
category: 'Stylistic Issues',
|
|
recommended: false,
|
|
},
|
|
schema: [], // no options
|
|
},
|
|
create,
|
|
}
|