const onlyAsciiRule = {
  'only-ascii': {
    meta: {
      schema: [
        {
          type: 'object',
          properties: {
            allowEmoji: {
              type: 'boolean',
            },
          },
          additionalProperties: false,
        },
      ],
    },
    create: onlyASCII,
  },
};

export { onlyAsciiRule };

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.`,
        });
      }
    },
  };
}