UNPKG

eslint-plugin-sonarjs

Version:
74 lines (73 loc) 2.53 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.isAssertion = isAssertion; exports.isTSAssertion = isTSAssertion; exports.chainStartsWithCy = chainStartsWithCy; const ast_js_1 = require("./ast.js"); const typescript_1 = __importDefault(require("typescript")); const ASSERTION_METHODS = ['should', 'and']; /** * Detects Cypress assertion calls on the global `cy` chain, e.g.: * cy.get('selector').should('be.visible') * cy.contains('text').and('have.attr', 'href') * cy.intercept(...).as(...); cy.wait('@alias').its('foo').should(...) */ function isAssertion(node) { if (node.type !== 'CallExpression') { return false; } if (node.callee.type !== 'MemberExpression' || node.callee.computed) { return false; } if (!(0, ast_js_1.isIdentifier)(node.callee.property, ...ASSERTION_METHODS)) { return false; } return chainStartsWithCy(node.callee.object); } function isTSAssertion(node) { if (node.kind !== typescript_1.default.SyntaxKind.CallExpression) { return false; } const call = node; if (call.expression.kind !== typescript_1.default.SyntaxKind.PropertyAccessExpression) { return false; } const member = call.expression; if (!ASSERTION_METHODS.includes(member.name.text)) { return false; } return tsChainStartsWithCy(member.expression); } function chainStartsWithCy(node) { if ((0, ast_js_1.isIdentifier)(node, 'cy')) { return true; } if (node.type === 'MemberExpression') { return chainStartsWithCy(node.object); } if (node.type === 'CallExpression') { return chainStartsWithCy(node.callee); } if (node.type === 'ChainExpression') { return chainStartsWithCy(node.expression); } return false; } function tsChainStartsWithCy(node) { if (node.kind === typescript_1.default.SyntaxKind.Identifier) { return node.text === 'cy'; } if (node.kind === typescript_1.default.SyntaxKind.PropertyAccessExpression) { return tsChainStartsWithCy(node.expression); } if (node.kind === typescript_1.default.SyntaxKind.CallExpression) { return tsChainStartsWithCy(node.expression); } if (node.kind === typescript_1.default.SyntaxKind.NonNullExpression) { return tsChainStartsWithCy(node.expression); } return false; }