UNPKG

@atlaskit/eslint-plugin-design-system

Version:

The essential plugin for use with the Atlassian Design System.

78 lines (77 loc) 2.47 kB
import renameMapping from '@atlaskit/tokens/rename-mapping'; import { getTokenId } from '@atlaskit/tokens/utils/get-token-id'; import { createLintRule } from '../utils/create-lint-rule'; var rule = createLintRule({ meta: { name: 'no-deprecated-design-token-usage', docs: { description: 'Disallow using deprecated design tokens.', recommended: true, severity: 'warn' }, hasSuggestions: true, type: 'problem', messages: { tokenDeprecated: 'The token "{{name}}" is deprecated, Please refer to the changelog for guidance on how to migrate. https://atlassian.design/components/tokens/changelog', tokenRenamed: 'The token "{{name}}" is deprecated in favour of "{{replacement}}".' } }, create: function create(context) { return { 'CallExpression[callee.name="token"]': function CallExpressionCalleeNameToken(node) { if (node.type !== 'CallExpression') { return; } if (node.arguments[0].type !== 'Literal') { return; } var tokenKey = node.arguments[0].value; if (!tokenKey) { return; } if (typeof tokenKey !== 'string') { return; } var migrationMeta = renameMapping.filter(function (t) { return t.state === 'deprecated'; }).find(function (t) { return getTokenId(t.path) === tokenKey; }); if (!migrationMeta) { return; } if (migrationMeta.replacement) { // Replacement specified, apply fixer var replacement = getTokenId(migrationMeta.replacement); context.report({ messageId: 'tokenRenamed', node: node, data: { name: tokenKey, replacement: replacement }, suggest: [{ desc: "Replace with '".concat(replacement, "'"), fix: function fix(fixer) { return fixer.replaceText(node.arguments[0], "'".concat(replacement, "'")); } }] }); return; } // No replacement specified if (migrationMeta.state === 'deprecated' && !migrationMeta.replacement) { context.report({ messageId: 'tokenDeprecated', node: node, data: { name: tokenKey } }); return; } } }; } }); export default rule;