"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = warnRemovedSettings;

var _WarnSettings = _interopRequireDefault(require("./WarnSettings"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const warnSettings = (0, _WarnSettings.default)();
/**
 * @typedef {(
 *   | "require-jsdoc"
 *   | "require-returns"
 *   | "valid-types"
 *   | "require-example"
 *   | "check-examples"
 * )} RulesWithMovedSettings
 */

/**
 * @param {object} obj
 * @param {string} property
 * @returns {boolean}
 */

const has = (obj, property) => {
  return Object.prototype.hasOwnProperty.call(obj, property);
};
/**
 *
 * @param {RulesWithMovedSettings} ruleName
 * @returns {string[]}
 */


const getMovedSettings = ruleName => {
  switch (ruleName) {
    case 'require-jsdoc':
      return ['exemptEmptyFunctions'];

    case 'require-returns':
      return ['forceRequireReturn'];

    case 'valid-types':
      return ['allowEmptyNamepaths', 'checkSeesForNamepaths'];

    case 'require-example':
      return ['avoidExampleOnConstructors'];

    case 'check-examples':
      return ['captionRequired', 'exampleCodeRegex', 'rejectExampleCodeRegex', 'allowInlineConfig', 'noDefaultExampleRules', 'matchingFileName', 'configFile', // The old name for `checkEslintrc`
      'eslintrcForExamples', 'baseConfig', 'reportUnusedDisableDirectives'];
  }
  /* istanbul ignore next */


  return [];
};
/**
 * @param {object} context
 * @param {RulesWithMovedSettings} ruleName
 */


function warnRemovedSettings(context, ruleName) {
  const movedSettings = getMovedSettings(ruleName);

  if (!context.settings || !context.settings.jsdoc) {
    return;
  }

  var _iteratorNormalCompletion = true;
  var _didIteratorError = false;
  var _iteratorError = undefined;

  try {
    for (var _iterator = movedSettings[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
      const setting = _step.value;

      if (has(context.settings.jsdoc, setting) && !warnSettings.hasBeenWarned(context, setting)) {
        context.report({
          loc: {
            start: {
              column: 1,
              line: 1
            }
          },
          message: `\`settings.jsdoc.${setting}\` has been removed, ` + `use options in the rule \`${ruleName}\` instead.`
        });
        warnSettings.markSettingAsWarned(context, setting);
      }
    }
  } catch (err) {
    _didIteratorError = true;
    _iteratorError = err;
  } finally {
    try {
      if (!_iteratorNormalCompletion && _iterator.return != null) {
        _iterator.return();
      }
    } finally {
      if (_didIteratorError) {
        throw _iteratorError;
      }
    }
  }
}

module.exports = exports.default;
//# sourceMappingURL=warnRemovedSettings.js.map