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 5575x 4565x 4565x 1x 1x 4565x 5574x 5575x 1841x 1841x 5574x 5575x 1326x 1326x 5574x 5575x 181x 181x 181x 167x 167x 167x 35x 35x 35x 35x 35x 27x 27x 27x 27x 35x 12x 3x 3x 12x 35x 167x 181x 5574x 5574x 5574x | /** @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(); } |