simplify code

pull/11754/head
Rich Harris 2 years ago
parent 8459098c05
commit e723c07116

@ -9,7 +9,6 @@ import {
extract_identifiers, extract_identifiers,
get_parent, get_parent,
is_expression_attribute, is_expression_attribute,
is_quoted_attribute,
is_text_attribute, is_text_attribute,
object, object,
unwrap_optional unwrap_optional
@ -34,6 +33,17 @@ import { Scope, get_rune } from '../scope.js';
import { merge } from '../visitors.js'; import { merge } from '../visitors.js';
import { a11y_validators } from './a11y.js'; import { a11y_validators } from './a11y.js';
/** @param {import('#compiler').Attribute} attribute */
function validate_attribute(attribute) {
if (attribute.value === true || attribute.value.length === 1) return;
const is_quoted = attribute.value.at(-1)?.end !== attribute.end;
if (!is_quoted) {
e.attribute_invalid_expression(attribute);
}
}
/** /**
* @param {import('#compiler').Component | import('#compiler').SvelteComponent | import('#compiler').SvelteSelf} node * @param {import('#compiler').Component | import('#compiler').SvelteComponent | import('#compiler').SvelteSelf} node
* @param {import('zimmerframe').Context<import('#compiler').SvelteNode, import('./types.js').AnalysisState>} context * @param {import('zimmerframe').Context<import('#compiler').SvelteNode, import('./types.js').AnalysisState>} context
@ -58,16 +68,10 @@ function validate_component(node, context) {
} }
if (attribute.type === 'Attribute') { if (attribute.type === 'Attribute') {
if ( if (context.state.analysis.runes) {
context.state.analysis.runes && validate_attribute(attribute);
!is_quoted_attribute(attribute) &&
Array.isArray(attribute.value) &&
attribute.value.length > 1
) {
e.attribute_invalid_expression(attribute);
}
if (context.state.analysis.runes && is_expression_attribute(attribute)) { if (is_expression_attribute(attribute)) {
const expression = attribute.value[0].expression; const expression = attribute.value[0].expression;
if (expression.type === 'SequenceExpression') { if (expression.type === 'SequenceExpression') {
let i = /** @type {number} */ (expression.start); let i = /** @type {number} */ (expression.start);
@ -78,6 +82,7 @@ function validate_component(node, context) {
} }
} }
} }
}
validate_attribute_name(attribute); validate_attribute_name(attribute);
@ -116,16 +121,10 @@ function validate_element(node, context) {
if (attribute.type === 'Attribute') { if (attribute.type === 'Attribute') {
const is_expression = is_expression_attribute(attribute); const is_expression = is_expression_attribute(attribute);
if ( if (context.state.analysis.runes) {
context.state.analysis.runes && validate_attribute(attribute);
!is_quoted_attribute(attribute) &&
Array.isArray(attribute.value) &&
attribute.value.length > 1
) {
e.attribute_invalid_expression(attribute);
}
if (context.state.analysis.runes && is_expression) { if (is_expression) {
const expression = attribute.value[0].expression; const expression = attribute.value[0].expression;
if (expression.type === 'SequenceExpression') { if (expression.type === 'SequenceExpression') {
let i = /** @type {number} */ (expression.start); let i = /** @type {number} */ (expression.start);
@ -136,6 +135,7 @@ function validate_element(node, context) {
} }
} }
} }
}
if (regex_illegal_attribute_character.test(attribute.name)) { if (regex_illegal_attribute_character.test(attribute.name)) {
e.attribute_invalid_name(attribute, attribute.name); e.attribute_invalid_name(attribute, attribute.name);

@ -44,16 +44,6 @@ export function is_expression_attribute(attribute) {
); );
} }
/**
* Returns true if the attribute is quoted.
* @param {import('#compiler').Attribute} attribute
* @returns {attribute is import('#compiler').Attribute & { value: [import('#compiler').ExpressionTag] }}
*/
export function is_quoted_attribute(attribute) {
if (attribute.value === true) return false;
return attribute.value.at(-1)?.end !== attribute.end;
}
/** /**
* Returns true if the attribute starts with `on` and contains a single expression node. * Returns true if the attribute starts with `on` and contains a single expression node.
* @param {import('#compiler').Attribute} attribute * @param {import('#compiler').Attribute} attribute

Loading…
Cancel
Save