UNPKG

chrome-devtools-frontend

Version:
61 lines (54 loc) 1.96 kB
// Copyright 2024 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import {createRule} from './utils/ruleCreator.ts'; /** * @fileoverview Disallow usage of `assert.deepStrictEqual`. * * In chai, `deepStrictEqual` is an alias for `deepEqual`, and we want to * consistently use the latter to not leave developers wondering what's * the difference between these two. Also the `strict` part in the name might * lead to the wrong conclusion that this is about strict equality. */ // ------------------------------------------------------------------------------ // Rule Definition // ------------------------------------------------------------------------------ export default createRule({ name: 'no-assert-deep-strict-equal', meta: { type: 'suggestion', docs: { description: 'Disallow usage of `assert.deepStrictEqual` in favor of `assert.deepEqual`.', category: 'Best Practices', }, messages: { unexpectedAssertDeepStrictEqual: 'Unexpected assert.deepStrictEqual. Use assert.deepEqual instead.', }, fixable: 'code', schema: [], // no options }, defaultOptions: [], create(context) { function isAssertDeepStrictEqual(calleeNode): boolean { return calleeNode.type === 'MemberExpression' && calleeNode.object.type === 'Identifier' && calleeNode.object.name === 'assert' && calleeNode.property.type === 'Identifier' && calleeNode.property.name === 'deepStrictEqual'; } function reportError(node) { context.report({ node, messageId: 'unexpectedAssertDeepStrictEqual', fix(fixer) { return fixer.replaceText(node.callee.property, 'deepEqual'); } }); } return { CallExpression(node) { if (isAssertDeepStrictEqual(node.callee)) { reportError(node); } } }; }, });