Home / Function/ validate_assignment() — svelte Function Reference

validate_assignment() — svelte Function Reference

Architecture documentation for the validate_assignment() function in utils.js from the svelte codebase.

Function javascript Compiler Transformer calls 8 called by 3

Entity Profile

Dependency Diagram

graph TD
  5ebdf508_43c0_4c5b_b633_950058ffd709["validate_assignment()"]
  bf0d8f1b_17da_970d_bf44_fbcf099d5371["utils.js"]
  5ebdf508_43c0_4c5b_b633_950058ffd709 -->|defined in| bf0d8f1b_17da_970d_bf44_fbcf099d5371
  d33c6b94_58e2_ebb4_1c33_58fa9af1535d["AssignmentExpression()"]
  d33c6b94_58e2_ebb4_1c33_58fa9af1535d -->|calls| 5ebdf508_43c0_4c5b_b633_950058ffd709
  4931635c_2415_3c69_a7a7_e98ad2cfd475["BindDirective()"]
  4931635c_2415_3c69_a7a7_e98ad2cfd475 -->|calls| 5ebdf508_43c0_4c5b_b633_950058ffd709
  05215418_7b1e_a936_d190_16d901793aae["UpdateExpression()"]
  05215418_7b1e_a936_d190_16d901793aae -->|calls| 5ebdf508_43c0_4c5b_b633_950058ffd709
  a93500a7_4609_a283_d8fe_612114377af8["validate_no_const_assignment()"]
  5ebdf508_43c0_4c5b_b633_950058ffd709 -->|calls| a93500a7_4609_a283_d8fe_612114377af8
  627dc2f8_4dbc_5bb1_8f54_cee503e17098["get()"]
  5ebdf508_43c0_4c5b_b633_950058ffd709 -->|calls| 627dc2f8_4dbc_5bb1_8f54_cee503e17098
  345acf51_e996_4e59_42d0_7caedaba075b["constant_assignment()"]
  5ebdf508_43c0_4c5b_b633_950058ffd709 -->|calls| 345acf51_e996_4e59_42d0_7caedaba075b
  a16aad7d_1e1a_25a8_d5ad_29a0b4a22169["each_item_invalid_assignment()"]
  5ebdf508_43c0_4c5b_b633_950058ffd709 -->|calls| a16aad7d_1e1a_25a8_d5ad_29a0b4a22169
  fae91c6d_fb50_6e89_055e_66efcf5b92d0["snippet_parameter_assignment()"]
  5ebdf508_43c0_4c5b_b633_950058ffd709 -->|calls| fae91c6d_fb50_6e89_055e_66efcf5b92d0
  d69a156c_617a_9397_4c8b_e94508c59e30["get_name()"]
  5ebdf508_43c0_4c5b_b633_950058ffd709 -->|calls| d69a156c_617a_9397_4c8b_e94508c59e30
  68a38b3b_6f0f_ed43_404f_3d00302677a2["get_parent()"]
  5ebdf508_43c0_4c5b_b633_950058ffd709 -->|calls| 68a38b3b_6f0f_ed43_404f_3d00302677a2
  3a4c2825_00d6_8b8f_cee5_7f100dcb4fb7["state_field_invalid_assignment()"]
  5ebdf508_43c0_4c5b_b633_950058ffd709 -->|calls| 3a4c2825_00d6_8b8f_cee5_7f100dcb4fb7
  style 5ebdf508_43c0_4c5b_b633_950058ffd709 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/compiler/phases/2-analyze/visitors/shared/utils.js lines 18–76

export function validate_assignment(node, argument, context) {
	validate_no_const_assignment(node, argument, context.state.scope, node.type === 'BindDirective');

	if (argument.type === 'Identifier') {
		const binding = context.state.scope.get(argument.name);

		if (context.state.analysis.runes) {
			if (
				context.state.analysis.props_id != null &&
				binding?.node === context.state.analysis.props_id
			) {
				e.constant_assignment(node, '$props.id()');
			}

			if (binding?.kind === 'each') {
				e.each_item_invalid_assignment(node);
			}
		}

		if (binding?.kind === 'snippet') {
			e.snippet_parameter_assignment(node);
		}
	}

	if (argument.type === 'MemberExpression' && argument.object.type === 'ThisExpression') {
		const name =
			argument.computed && argument.property.type !== 'Literal'
				? null
				: get_name(argument.property);

		const field = name !== null && context.state.state_fields?.get(name);

		// check we're not assigning to a state field before its declaration in the constructor
		if (field && field.node.type === 'AssignmentExpression' && node !== field.node) {
			let i = context.path.length;
			while (i--) {
				const parent = context.path[i];

				if (
					parent.type === 'FunctionDeclaration' ||
					parent.type === 'FunctionExpression' ||
					parent.type === 'ArrowFunctionExpression'
				) {
					const grandparent = get_parent(context.path, i - 1);

					if (
						grandparent.type === 'MethodDefinition' &&
						grandparent.kind === 'constructor' &&
						/** @type {number} */ (node.start) < /** @type {number} */ (field.node.start)
					) {
						e.state_field_invalid_assignment(node);
					}

					break;
				}
			}
		}
	}
}

Domain

Subdomains

Frequently Asked Questions

What does validate_assignment() do?
validate_assignment() is a function in the svelte codebase, defined in packages/svelte/src/compiler/phases/2-analyze/visitors/shared/utils.js.
Where is validate_assignment() defined?
validate_assignment() is defined in packages/svelte/src/compiler/phases/2-analyze/visitors/shared/utils.js at line 18.
What does validate_assignment() call?
validate_assignment() calls 8 function(s): constant_assignment, each_item_invalid_assignment, get, get_name, get_parent, snippet_parameter_assignment, state_field_invalid_assignment, validate_no_const_assignment.
What calls validate_assignment()?
validate_assignment() is called by 3 function(s): AssignmentExpression, BindDirective, UpdateExpression.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free