chore: DRY out assignment validation (#15360)

pull/15380/head
Rich Harris 7 months ago committed by GitHub
parent 51337f22bd
commit 5f3b4d5421
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -5,7 +5,7 @@ import {
is_text_attribute, is_text_attribute,
object object
} from '../../../utils/ast.js'; } from '../../../utils/ast.js';
import { validate_no_const_assignment } from './shared/utils.js'; import { validate_assignment } from './shared/utils.js';
import * as e from '../../../errors.js'; import * as e from '../../../errors.js';
import * as w from '../../../warnings.js'; import * as w from '../../../warnings.js';
import { binding_properties } from '../../bindings.js'; import { binding_properties } from '../../bindings.js';
@ -158,7 +158,7 @@ export function BindDirective(node, context) {
return; return;
} }
validate_no_const_assignment(node, node.expression, context.state.scope, true); validate_assignment(node, node.expression, context.state);
const assignee = node.expression; const assignee = node.expression;
const left = object(assignee); const left = object(assignee);
@ -184,14 +184,6 @@ export function BindDirective(node, context) {
) { ) {
e.bind_invalid_value(node.expression); e.bind_invalid_value(node.expression);
} }
if (context.state.analysis.runes && binding?.kind === 'each') {
e.each_item_invalid_assignment(node);
}
if (binding?.kind === 'snippet') {
e.snippet_parameter_assignment(node);
}
} }
if (node.name === 'group') { if (node.name === 'group') {

@ -10,12 +10,12 @@ import * as b from '../../../../utils/builders.js';
import { get_rune } from '../../../scope.js'; import { get_rune } from '../../../scope.js';
/** /**
* @param {AssignmentExpression | UpdateExpression} node * @param {AssignmentExpression | UpdateExpression | AST.BindDirective} node
* @param {Pattern | Expression} argument * @param {Pattern | Expression} argument
* @param {AnalysisState} state * @param {AnalysisState} state
*/ */
export function validate_assignment(node, argument, state) { export function validate_assignment(node, argument, state) {
validate_no_const_assignment(node, argument, state.scope, false); validate_no_const_assignment(node, argument, state.scope, node.type === 'BindDirective');
if (argument.type === 'Identifier') { if (argument.type === 'Identifier') {
const binding = state.scope.get(argument.name); const binding = state.scope.get(argument.name);

Loading…
Cancel
Save