diff --git a/lib/rules/define-macros-order.js b/lib/rules/define-macros-order.js index 9c8ea45e6..1db259fa1 100644 --- a/lib/rules/define-macros-order.js +++ b/lib/rules/define-macros-order.js @@ -19,6 +19,17 @@ const MACROS_PROPS = 'defineProps' const ORDER = [MACROS_EMITS, MACROS_PROPS] const DEFAULT_ORDER = [MACROS_PROPS, MACROS_EMITS] +/** + * @param {VElement} scriptSetup + * @param {ASTNode} node + */ +function inScriptSetup(scriptSetup, node) { + return ( + scriptSetup.range[0] <= node.range[0] && + node.range[1] <= scriptSetup.range[1] + ) +} + /** * @param {ASTNode} node */ @@ -33,9 +44,10 @@ function isUseStrictStatement(node) { /** * Get an index of the first statement after imports and interfaces in order * to place defineEmits and defineProps before this statement + * @param {VElement} scriptSetup * @param {Program} program */ -function getTargetStatementPosition(program) { +function getTargetStatementPosition(scriptSetup, program) { const skipStatements = new Set([ 'ImportDeclaration', 'TSInterfaceDeclaration', @@ -45,7 +57,11 @@ function getTargetStatementPosition(program) { ]) for (const [index, item] of program.body.entries()) { - if (!skipStatements.has(item.type) && !isUseStrictStatement(item)) { + if ( + inScriptSetup(scriptSetup, item) && + !skipStatements.has(item.type) && + !isUseStrictStatement(item) + ) { return index } } @@ -104,7 +120,10 @@ function create(context) { 'Program:exit'(program) { const shouldFirstNode = macrosNodes.get(order[0]) const shouldSecondNode = macrosNodes.get(order[1]) - const firstStatementIndex = getTargetStatementPosition(program) + const firstStatementIndex = getTargetStatementPosition( + scriptSetup, + program + ) const firstStatement = program.body[firstStatementIndex] // have both defineEmits and defineProps diff --git a/tests/lib/rules/define-macros-order.js b/tests/lib/rules/define-macros-order.js index ce5f30040..65a07887f 100644 --- a/tests/lib/rules/define-macros-order.js +++ b/tests/lib/rules/define-macros-order.js @@ -387,6 +387,42 @@ tester.run('define-macros-order', rule, { line: 3 } ] + }, + { + filename: 'test.vue', + code: ` + + + + `, + output: ` + + + + `, + errors: [ + { + message: message('defineProps'), + line: 11 + } + ] } ] })