routie dev init since i didn't adhere to any proper guidance up until now

This commit is contained in:
2026-04-29 22:27:29 -06:00
commit e1dabb71e2
15301 changed files with 3562618 additions and 0 deletions
@@ -0,0 +1,109 @@
import { getNodeRange } from './get-node-range.js'
/**
* Generates fixes for reordering nodes to their sorted positions.
*
* Creates text replacement fixes that swap node positions to achieve the
* desired sort order. The function handles several important edge cases:
*
* - Preserves leading comments and documentation
* - Maintains file-level block comments for the first node
* - Adds safety semicolons when needed to prevent ASI issues
* - Respects partition boundaries defined by comments.
*
* The function iterates through each node position and replaces the original
* node text with the text from the node that should be in that position
* according to the sorted order.
*
* @example
*
* ```ts
* // Original order:
* const b = 2
* const a = 1
*
* // After applying order fixes:
* const a = 1
* const b = 2
* ```
*
* @example
*
* ```ts
* // Safety semicolon example
* // Original:
* const b = 2
* const a = 1 // 'a' will move to first position
*
* // After fix (semicolon added to prevent ASI issues):
* const a = 1
* const b = 2
* ```
*
* @param params - Parameters for generating order fixes.
* @returns Array of ESLint fix operations to reorder nodes.
*/
function makeOrderFixes({
ignoreFirstNodeHighestBlockComment,
sortedNodes,
sourceCode,
options,
fixer,
nodes,
}) {
let fixes = []
for (let max = nodes.length, i = 0; i < max; i++) {
let sortingNode = nodes.at(i)
let sortedSortingNode = sortedNodes.at(i)
let { node } = sortingNode
let { addSafetySemicolonWhenInline, node: sortedNode } = sortedSortingNode
let isNodeFirstNode = node === nodes.at(0).node
let isSortedNodeFirstNode = sortedNode === nodes.at(0).node
if (node === sortedNode) {
continue
}
let sortedNodeCode = sourceCode.text.slice(
...getNodeRange({
ignoreHighestBlockComment:
ignoreFirstNodeHighestBlockComment && isSortedNodeFirstNode,
node: sortedNode,
sourceCode,
options,
}),
)
let sortedNodeText = sourceCode.getText(sortedNode)
let nextToken = sourceCode
.getTokensAfter(node, {
includeComments: false,
count: 1,
})
.at(0)
let sortedNextNodeEndsWithSafeCharacter =
sortedNodeText.endsWith(';') || sortedNodeText.endsWith(',')
let isNextTokenOnSameLineAsNode =
nextToken?.loc.start.line === node.loc.end.line
let isNextTokenSafeCharacter =
nextToken?.value === ';' || nextToken?.value === ','
if (
addSafetySemicolonWhenInline &&
isNextTokenOnSameLineAsNode &&
!sortedNextNodeEndsWithSafeCharacter &&
!isNextTokenSafeCharacter
) {
sortedNodeCode += ';'
}
fixes.push(
fixer.replaceTextRange(
getNodeRange({
ignoreHighestBlockComment:
ignoreFirstNodeHighestBlockComment && isNodeFirstNode,
sourceCode,
options,
node,
}),
sortedNodeCode,
),
)
}
return fixes
}
export { makeOrderFixes }