code: function mergeConfigs(
    a /*: stylelint$config*/,
    b /*: stylelint$config*/
  ) /*: stylelint$config*/ {
    const pluginMerger = {};
  
    if (a.plugins || b.plugins) {
      pluginMerger.plugins = [];
  
      if (a.plugins) {
        pluginMerger.plugins = pluginMerger.plugins.concat(a.plugins);
      }
  
      if (b.plugins) {
        pluginMerger.plugins = _.uniq(pluginMerger.plugins.concat(b.plugins));
      }
    }
  
    const processorMerger = {};
  
    if (a.processors || b.processors) {
      processorMerger.processors = [];
  
      if (a.processors) {
        processorMerger.processors = processorMerger.processors.concat(
          a.processors
        );
      }
  
      if (b.processors) {
        processorMerger.processors = _.uniq(
          processorMerger.processors.concat(b.processors)
        );
      }
    }
  
    const rulesMerger = {};
  
    if (a.rules || b.rules) {
      rulesMerger.rules = Object.assign({}, a.rules, b.rules);
    }
  
    const result = Object.assign(
      {},
      a,
      b,
      processorMerger,
      pluginMerger,
      rulesMerger
    );
  
    return result;
  }
docs: When merging configs (via extends) - plugin and processor arrays are joined - rules are merged via Object.assign, so there is no attempt made to merge any given rule's settings. If b contains the same rule as a, b's rule settings will override a's rule settings entirely. - Everything else is merged via Object.assign