code: function findVariablesInScope(scope) {
              scope.references.forEach(reference => {
                  const variable = reference.resolved;
  
                  /*
                   * Skips when the reference is:
                   * - initialization's.
                   * - referring to an undefined variable.
                   * - referring to a global environment variable (there're no identifiers).
                   * - located preceded by the variable (except in initializers).
                   * - allowed by options.
                   */
                  if (reference.init ||
                      !variable ||
                      variable.identifiers.length === 0 ||
                      (variable.identifiers[0].range[1] < reference.identifier.range[1] && !isInInitializer(variable, reference)) ||
                      !isForbidden(variable, reference)
                  ) {
                      return;
                  }
  
                  // Reports.
                  context.report({
                      node: reference.identifier,
                      message: "'{{name}}' was used before it was defined.",
                      data: reference.identifier
                  });
              });
  
              scope.childScopes.forEach(findVariablesInScope);
          }
docs: Finds and validates all variables in a given scope.
  @param {Scope} scope The scope object.
  @returns {void}
  @private