Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

90 linhas
2.6 KiB

  1. 'use strict';
  2. var _jsxAstUtils = require('jsx-ast-utils');
  3. var _arrayIncludes = require('array-includes');
  4. var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes);
  5. var _has = require('has');
  6. var _has2 = _interopRequireDefault(_has);
  7. var _getExplicitRole = require('../util/getExplicitRole');
  8. var _getExplicitRole2 = _interopRequireDefault(_getExplicitRole);
  9. var _getImplicitRole = require('../util/getImplicitRole');
  10. var _getImplicitRole2 = _interopRequireDefault(_getImplicitRole);
  11. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  12. var errorMessage = function errorMessage(element, implicitRole) {
  13. return 'The element ' + element + ' has an implicit role of ' + implicitRole + '. Defining this explicitly is redundant and should be avoided.';
  14. }; /**
  15. * @fileoverview Enforce explicit role property is not the
  16. * same as implicit/default role property on element.
  17. * @author Ethan Cohen <@evcohen>
  18. *
  19. */
  20. // ----------------------------------------------------------------------------
  21. // Rule Definition
  22. // ----------------------------------------------------------------------------
  23. var DEFAULT_ROLE_EXCEPTIONS = { nav: ['navigation'] };
  24. module.exports = {
  25. meta: {
  26. docs: {
  27. url: 'https://github.com/evcohen/eslint-plugin-jsx-a11y/tree/master/docs/rules/no-redundant-roles.md'
  28. },
  29. schema: [{
  30. type: 'object',
  31. additionalProperties: {
  32. type: 'array',
  33. items: {
  34. type: 'string'
  35. },
  36. uniqueItems: true
  37. }
  38. }]
  39. },
  40. create: function create(context) {
  41. var options = context.options;
  42. return {
  43. JSXOpeningElement: function JSXOpeningElement(node) {
  44. var type = (0, _jsxAstUtils.elementType)(node);
  45. var implicitRole = (0, _getImplicitRole2.default)(type, node.attributes);
  46. var explicitRole = (0, _getExplicitRole2.default)(type, node.attributes);
  47. if (!implicitRole || !explicitRole) {
  48. return;
  49. }
  50. if (implicitRole === explicitRole) {
  51. var allowedRedundantRoles = options[0] || {};
  52. var redundantRolesForElement = void 0;
  53. if ((0, _has2.default)(allowedRedundantRoles, type)) {
  54. redundantRolesForElement = allowedRedundantRoles[type];
  55. } else {
  56. redundantRolesForElement = DEFAULT_ROLE_EXCEPTIONS[type] || [];
  57. }
  58. if ((0, _arrayIncludes2.default)(redundantRolesForElement, implicitRole)) {
  59. return;
  60. }
  61. context.report({
  62. node: node,
  63. message: errorMessage(type, implicitRole.toLowerCase())
  64. });
  65. }
  66. }
  67. };
  68. }
  69. };