use(options) {
    // Check whether plugin with the same is already used.
    let pluginName = options.name;
    if (this._pluginAlreadyUsed(pluginName)) {
      if (this.verbose)
        console.warn(Errors.twoPluginsWithSameName(pluginName));
      return;
    }

    let plugin = new Plugin(options);

    plugin.syntax.forEach(function(s) {
      this.supportedSyntaxes.add(s);
    }, this);

    // Sort plugins.
    let pluginToRunBefore = plugin.runBefore;

    if (!pluginToRunBefore) {
      this.plugins.push(plugin);
    } else {
      if (this._pluginAlreadyUsed(pluginToRunBefore)) {
        let i = this._pluginIndex(pluginToRunBefore);
        this.plugins.splice(i, 0, plugin);
      } else {
        this.plugins.push(plugin);
        if (!this.pluginsDependencies[pluginToRunBefore])
          this.pluginsDependencies[pluginToRunBefore] = [];
        this.pluginsDependencies[pluginToRunBefore].push(pluginName);
      }
    }

    let dependents = this.pluginsDependencies[pluginName];
    if (!dependents) return this;

    for (let i = 0, l = dependents.length; i < l; i++) {
      let name = dependents[i];
      let x = this._pluginIndex(name);
      let plugin = this.plugins[x];
      this.plugins.splice(x, 1);
      this.plugins.splice(-1, 0, plugin);
    }

    // Chaining.
    return this;
  }
Add a plugin.
@param {Object} options
@return {Comb}