Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 5510x 4520x 4520x 1x 1x 4520x 5509x 5510x 1833x 1833x 5509x 5510x 1302x 1302x 5509x 5510x 181x 181x 181x 167x 167x 167x 35x 35x 35x 35x 35x 27x 27x 27x 27x 35x 12x 3x 3x 12x 35x 167x 181x 5509x 5509x 5509x | /** @import { MemberExpression, Node } from 'estree' */ /** @import { Context } from '../types' */ import * as e from '../../../errors.js'; import * as w from '../../../warnings.js'; import { object } from '../../../utils/ast.js'; import { is_pure, is_safe_identifier } from './shared/utils.js'; /** * @param {MemberExpression} node * @param {Context} context */ export function MemberExpression(node, context) { if (node.object.type === 'Identifier' && node.property.type === 'Identifier') { const binding = context.state.scope.get(node.object.name); if (binding?.kind === 'rest_prop' && node.property.name.startsWith('$$')) { e.props_illegal_name(node.property); } } if (context.state.expression && !is_pure(node, context)) { context.state.expression.has_state = true; } if (!is_safe_identifier(node, context.state.scope)) { context.state.analysis.needs_context = true; } if (context.state.reactive_statement) { const left = object(node); if (left !== null) { const binding = context.state.scope.get(left.name); if (binding && binding.kind === 'normal') { const parent = /** @type {Node} */ (context.path.at(-1)); if ( binding.scope === context.state.analysis.module.scope || binding.declaration_kind === 'import' || (binding.initial && binding.initial.type !== 'ArrayExpression' && binding.initial.type !== 'ObjectExpression' && binding.scope.function_depth <= 1) ) { if (parent.type !== 'MemberExpression' && parent.type !== 'CallExpression') { w.reactive_declaration_non_reactive_property(node); } } } } } context.next(); } |