text: /**
   * @author Toru Nagashima
   * @copyright 2017 Toru Nagashima. All rights reserved.
   * See LICENSE file in root directory for full license.
   */
  'use strict'
  
  // ------------------------------------------------------------------------------
  // Requirements
  // ------------------------------------------------------------------------------
  
  const utils = require('../utils')
  
  // ------------------------------------------------------------------------------
  // Rule Definition
  // ------------------------------------------------------------------------------
  
  module.exports = {
    meta: {
      type: 'problem',
      docs: {
        description: 'enforce valid `v-html` directives',
        categories: ['vue3-essential', 'essential'],
        url: 'https://eslint.vuejs.org/rules/valid-v-html.html'
      },
      fixable: null,
      schema: [],
      messages: {
        unexpectedArgument: "'v-html' directives require no argument.",
        unexpectedModifier: "'v-html' directives require no modifier.",
        expectedValue: "'v-html' directives require that attribute value."
      }
    },
    /** @param {RuleContext} context */
    create(context) {
      return utils.defineTemplateBodyVisitor(context, {
        /** @param {VDirective} node */
        "VAttribute[directive=true][key.name.name='html']"(node) {
          if (node.key.argument) {
            context.report({
              node: node.key.argument,
              messageId: 'unexpectedArgument'
            })
          }
          if (node.key.modifiers.length > 0) {
            context.report({
              node,
              loc: {
                start: node.key.modifiers[0].loc.start,
                end: node.key.modifiers[node.key.modifiers.length - 1].loc.end
              },
              messageId: 'unexpectedModifier'
            })
          }
          if (!node.value || utils.isEmptyValueDirective(node, context)) {
            context.report({
              node,
              messageId: 'expectedValue'
            })
          }
        }
      })
    }
  }
  