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 5787x 4762x 4762x 1x 1x 4762x 5786x 5787x 1882x 1882x 5786x 5787x 1347x 1347x 5786x 5787x 190x 190x 190x 176x 176x 176x 35x 35x 35x 35x 35x 27x 27x 27x 27x 35x 12x 3x 3x 12x 35x 176x 190x 5786x 5786x 5786x | /** @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(); } |