Files
routie/frontend/node_modules/eslint-plugin-perfectionist/dist/utils/get-comments-before.js
T

38 lines
1.3 KiB
JavaScript

/**
* Returns a list of comments before a given node, excluding ones that are right
* after code. Includes comment blocks, ignore shebang comments.
*
* @param params - Parameters object.
* @param params.node - The node to get comments before.
* @param params.sourceCode - The source code object.
* @param [params.tokenValueToIgnoreBefore] - Allows the following token to
* directly precede the node.
* @returns An array of comments before the given node.
*/
function getCommentsBefore({ tokenValueToIgnoreBefore, sourceCode, node }) {
let commentsBefore = getRelevantCommentsBeforeNodeOrToken(sourceCode, node)
let tokenBeforeNode = sourceCode.getTokenBefore(node)
if (
commentsBefore.length > 0 ||
!tokenValueToIgnoreBefore ||
tokenBeforeNode?.value !== tokenValueToIgnoreBefore
) {
return commentsBefore
}
return getRelevantCommentsBeforeNodeOrToken(sourceCode, tokenBeforeNode)
}
function getRelevantCommentsBeforeNodeOrToken(source, node) {
return source
.getCommentsBefore(node)
.filter(comment => !isShebangComment(comment))
.filter(comment => {
return (
source.getTokenBefore(comment)?.loc.end.line !== comment.loc.end.line
)
})
}
function isShebangComment(comment) {
return comment.type === 'Shebang' || comment.type === 'Hashbang'
}
export { getCommentsBefore }