'use strict';

module.exports = {
  meta: {
    schema: [
      {
        type: 'object',
        properties: {
          allowEmoji: {
            type: 'boolean',
          },
        },
        additionalProperties: false,
      },
    ],
  },
  create: onlyASCII,
};

function onlyASCII(context) {
  const regExp =
    context.options[0]?.allowEmoji === true
      ? /[^\p{ASCII}\p{Emoji}]+/gu
      : /\P{ASCII}+/gu;

  return {
    Program() {
      const sourceCode = context.getSourceCode();
      const text = sourceCode.getText();

      for (const match of text.matchAll(regExp)) {
        context.report({
          loc: sourceCode.getLocFromIndex(match.index),
          message: `Non-ASCII character "${match[0]}" found.`,
        });
      }
    },
  };
}