998bbbe25dcd775b46e6758d83423121a3bc7b07e5845915bd45e2d36d1f36902706bdc6bf134f15ffa7103279bf1d2cebc4928a03f9b04ee5908c698a3d08 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /**
  2. * @fileoverview Enforces render function to always return value.
  3. * @author Armano
  4. */
  5. 'use strict'
  6. const utils = require('../utils')
  7. // ------------------------------------------------------------------------------
  8. // Rule Definition
  9. // ------------------------------------------------------------------------------
  10. module.exports = {
  11. meta: {
  12. type: 'problem',
  13. docs: {
  14. description: 'enforce render function to always return value',
  15. categories: ['vue3-essential', 'essential'],
  16. url: 'https://eslint.vuejs.org/rules/require-render-return.html'
  17. },
  18. fixable: null, // or "code" or "whitespace"
  19. schema: []
  20. },
  21. /** @param {RuleContext} context */
  22. create(context) {
  23. /** @type {Map<ESNode, Property['key']>} */
  24. const renderFunctions = new Map()
  25. // ----------------------------------------------------------------------
  26. // Public
  27. // ----------------------------------------------------------------------
  28. return utils.compositingVisitors(
  29. utils.defineVueVisitor(context, {
  30. onRenderFunctionEnter(node) {
  31. renderFunctions.set(node.parent.value, node.parent.key)
  32. }
  33. }),
  34. utils.executeOnFunctionsWithoutReturn(true, (node) => {
  35. const key = renderFunctions.get(node)
  36. if (key) {
  37. context.report({
  38. node: key,
  39. message: 'Expected to return a value in render function.'
  40. })
  41. }
  42. })
  43. )
  44. }
  45. }