tutuca 0.9.24 → 0.9.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tutuca-cli.js +36 -28
- package/dist/tutuca-dev.js +40 -21
- package/dist/tutuca-dev.min.js +2 -2
- package/dist/tutuca-extra.js +2 -2
- package/dist/tutuca-extra.min.js +1 -1
- package/dist/tutuca.js +2 -2
- package/dist/tutuca.min.js +1 -1
- package/package.json +3 -3
package/dist/tutuca-cli.js
CHANGED
|
@@ -91,14 +91,7 @@ class LintReport {
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
class RenderedExample {
|
|
94
|
-
constructor({
|
|
95
|
-
title,
|
|
96
|
-
description = null,
|
|
97
|
-
componentName,
|
|
98
|
-
view,
|
|
99
|
-
html,
|
|
100
|
-
error = null
|
|
101
|
-
}) {
|
|
94
|
+
constructor({ title, description = null, componentName, view, html, error = null }) {
|
|
102
95
|
this.title = title;
|
|
103
96
|
this.description = description;
|
|
104
97
|
this.componentName = componentName;
|
|
@@ -1458,7 +1451,7 @@ class ParseContext {
|
|
|
1458
1451
|
getNodeForId(id) {
|
|
1459
1452
|
return this.nodes[id] ?? null;
|
|
1460
1453
|
}
|
|
1461
|
-
onAttributes(_attrs, _wrapperAttrs, _textChild) {}
|
|
1454
|
+
onAttributes(_attrs, _wrapperAttrs, _textChild, _isMacroCall) {}
|
|
1462
1455
|
}
|
|
1463
1456
|
function condenseChildsWhites(childs) {
|
|
1464
1457
|
let end = childs.length;
|
|
@@ -1676,7 +1669,7 @@ var init_anode = __esm(() => {
|
|
|
1676
1669
|
return px.frame.macroSlots[slotName] ?? maybeFragment(childs);
|
|
1677
1670
|
}
|
|
1678
1671
|
const [nAttrs, wrappers] = Attributes.parse(attrs, px, true);
|
|
1679
|
-
px.onAttributes(nAttrs, wrappers, null);
|
|
1672
|
+
px.onAttributes(nAttrs, wrappers, null, true);
|
|
1680
1673
|
return wrap(px.newMacroNode(macroName, nAttrs.toMacroVars(), childs), px, wrappers);
|
|
1681
1674
|
} else if (VALID_NODE_RE.test(tag)) {
|
|
1682
1675
|
const [nAttrs, wrappers, textChild] = Attributes.parse(attrs, px);
|
|
@@ -2082,6 +2075,21 @@ function checkView(lx, view, Comp, referencedAlters, referencedComputed) {
|
|
|
2082
2075
|
checkRenderItInLoop(lx, view);
|
|
2083
2076
|
checkEventModifiers(lx, view);
|
|
2084
2077
|
checkKnownHandlerNames(lx, view, Comp, referencedAlters, referencedComputed);
|
|
2078
|
+
checkMacroCallArgs(lx, view, Comp);
|
|
2079
|
+
}
|
|
2080
|
+
function checkMacroCallArgs(lx, view, Comp) {
|
|
2081
|
+
const { scope } = Comp;
|
|
2082
|
+
for (const macroNode of view.ctx.macroNodes) {
|
|
2083
|
+
const macro = scope.lookupMacro(macroNode.name);
|
|
2084
|
+
if (macro === null)
|
|
2085
|
+
continue;
|
|
2086
|
+
const { defaults } = macro;
|
|
2087
|
+
for (const argName in macroNode.attrs) {
|
|
2088
|
+
if (!(argName in defaults)) {
|
|
2089
|
+
lx.error(UNKNOWN_MACRO_ARG, { name: argName, macroName: macroNode.name });
|
|
2090
|
+
}
|
|
2091
|
+
}
|
|
2092
|
+
}
|
|
2085
2093
|
}
|
|
2086
2094
|
function checkRenderItInLoop(lx, view) {
|
|
2087
2095
|
let hasRenderIt = false;
|
|
@@ -2131,7 +2139,7 @@ function checkEventModifiers(lx, view) {
|
|
|
2131
2139
|
const modWrappers = MOD_WRAPPERS_BY_EVENT[name] ?? NO_WRAPPERS;
|
|
2132
2140
|
for (const modifier of modifiers) {
|
|
2133
2141
|
if (modWrappers[modifier] === undefined) {
|
|
2134
|
-
lx.
|
|
2142
|
+
lx.error(UNKNOWN_EVENT_MODIFIER, { name, modifier, handler, event });
|
|
2135
2143
|
}
|
|
2136
2144
|
}
|
|
2137
2145
|
}
|
|
@@ -2167,7 +2175,7 @@ function checkEventHandlersHaveImpls(lx, Comp, referencedInputs) {
|
|
|
2167
2175
|
if (hvName === "InputHandlerNameVal") {
|
|
2168
2176
|
referencedInputs?.add(handlerVal.name);
|
|
2169
2177
|
if (input[handlerVal.name] === undefined) {
|
|
2170
|
-
lx.
|
|
2178
|
+
lx.error(INPUT_HANDLER_NOT_IMPLEMENTED, {
|
|
2171
2179
|
name: handlerVal.name,
|
|
2172
2180
|
handler,
|
|
2173
2181
|
event
|
|
@@ -2183,7 +2191,7 @@ function checkEventHandlersHaveImpls(lx, Comp, referencedInputs) {
|
|
|
2183
2191
|
} else if (hvName === "RawFieldVal") {
|
|
2184
2192
|
referencedInputs?.add(handlerVal.name);
|
|
2185
2193
|
if (proto[handlerVal.name] === undefined) {
|
|
2186
|
-
lx.
|
|
2194
|
+
lx.error(INPUT_HANDLER_METHOD_NOT_IMPLEMENTED, {
|
|
2187
2195
|
name: handlerVal.name,
|
|
2188
2196
|
handler,
|
|
2189
2197
|
event
|
|
@@ -2202,7 +2210,7 @@ function checkEventHandlersHaveImpls(lx, Comp, referencedInputs) {
|
|
|
2202
2210
|
});
|
|
2203
2211
|
}
|
|
2204
2212
|
}
|
|
2205
|
-
function checkConsistentAttrVal(lx, val, fields, proto, computed, scope, alter, referencedAlters, referencedComputed) {
|
|
2213
|
+
function checkConsistentAttrVal(lx, val, fields, proto, computed, scope, alter, referencedAlters, referencedComputed, skipNameVal = false) {
|
|
2206
2214
|
const valName = val?.constructor.name;
|
|
2207
2215
|
if (valName === "FieldVal" || valName === "RawFieldVal") {
|
|
2208
2216
|
const { name } = val;
|
|
@@ -2216,28 +2224,28 @@ function checkConsistentAttrVal(lx, val, fields, proto, computed, scope, alter,
|
|
|
2216
2224
|
lx.error(COMPUTED_VAL_NOT_DEFINED, { val, name });
|
|
2217
2225
|
}
|
|
2218
2226
|
} else if (valName === "SeqAccessVal") {
|
|
2219
|
-
checkConsistentAttrVal(lx, val.seqVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed);
|
|
2220
|
-
checkConsistentAttrVal(lx, val.keyVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed);
|
|
2227
|
+
checkConsistentAttrVal(lx, val.seqVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed, skipNameVal);
|
|
2228
|
+
checkConsistentAttrVal(lx, val.keyVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed, skipNameVal);
|
|
2221
2229
|
} else if (valName === "RequestVal") {
|
|
2222
2230
|
if (scope.lookupRequest(val.name) === null) {
|
|
2223
|
-
lx.
|
|
2231
|
+
lx.error(UNKNOWN_REQUEST_NAME, { name: val.name });
|
|
2224
2232
|
}
|
|
2225
2233
|
} else if (valName === "TypeVal") {
|
|
2226
2234
|
if (scope.lookupComponent(val.name) === null) {
|
|
2227
|
-
lx.
|
|
2235
|
+
lx.error(UNKNOWN_COMPONENT_NAME, { name: val.name });
|
|
2228
2236
|
}
|
|
2229
2237
|
} else if (valName === "NameVal") {
|
|
2230
|
-
if (!isKnownHandlerName(val.name)) {
|
|
2231
|
-
lx.
|
|
2238
|
+
if (!skipNameVal && !isKnownHandlerName(val.name)) {
|
|
2239
|
+
lx.error(UNKNOWN_HANDLER_ARG_NAME, { name: val.name });
|
|
2232
2240
|
}
|
|
2233
2241
|
} else if (valName === "StrTplVal") {
|
|
2234
2242
|
for (const subVal of val.vals) {
|
|
2235
|
-
checkConsistentAttrVal(lx, subVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed);
|
|
2243
|
+
checkConsistentAttrVal(lx, subVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed, skipNameVal);
|
|
2236
2244
|
}
|
|
2237
2245
|
} else if (valName === "AlterHandlerNameVal") {
|
|
2238
2246
|
referencedAlters?.add(val.name);
|
|
2239
2247
|
if (alter[val.name] === undefined) {
|
|
2240
|
-
lx.
|
|
2248
|
+
lx.error(ALT_HANDLER_NOT_DEFINED, { name: val.name });
|
|
2241
2249
|
}
|
|
2242
2250
|
} else if (valName !== "ConstVal" && valName !== "BindVal") {
|
|
2243
2251
|
console.log(val);
|
|
@@ -2251,11 +2259,11 @@ function checkConsistentAttrs(lx, Comp, referencedAlters, referencedComputed) {
|
|
|
2251
2259
|
lx.push({ viewName }, () => {
|
|
2252
2260
|
const view = views[viewName];
|
|
2253
2261
|
for (const attr of view.ctx.attrs) {
|
|
2254
|
-
const { attrs, wrapperAttrs, textChild } = attr;
|
|
2262
|
+
const { attrs, wrapperAttrs, textChild, isMacroCall } = attr;
|
|
2255
2263
|
if (attrs?.constructor.name === "DynAttrs") {
|
|
2256
2264
|
for (const attr2 of attrs.items) {
|
|
2257
2265
|
if (attr2?.constructor.name === "Attr") {
|
|
2258
|
-
checkConsistentAttrVal(lx, attr2.val, fields, proto, computed, scope, alter, referencedAlters, referencedComputed);
|
|
2266
|
+
checkConsistentAttrVal(lx, attr2.val, fields, proto, computed, scope, alter, referencedAlters, referencedComputed, isMacroCall);
|
|
2259
2267
|
}
|
|
2260
2268
|
}
|
|
2261
2269
|
}
|
|
@@ -2341,7 +2349,7 @@ class LintContext {
|
|
|
2341
2349
|
this.reports.push({ id, info, level, context: { ...this.frame } });
|
|
2342
2350
|
}
|
|
2343
2351
|
}
|
|
2344
|
-
var ALT_HANDLER_NOT_DEFINED = "ALT_HANDLER_NOT_DEFINED", ALT_HANDLER_NOT_REFERENCED = "ALT_HANDLER_NOT_REFERENCED", RENDER_IT_OUTSIDE_OF_LOOP = "RENDER_IT_OUTSIDE_OF_LOOP", UNKNOWN_EVENT_MODIFIER = "UNKNOWN_EVENT_MODIFIER", UNKNOWN_HANDLER_ARG_NAME = "UNKNOWN_HANDLER_ARG_NAME", INPUT_HANDLER_NOT_IMPLEMENTED = "INPUT_HANDLER_NOT_IMPLEMENTED", INPUT_HANDLER_NOT_REFERENCED = "INPUT_HANDLER_NOT_REFERENCED", INPUT_HANDLER_METHOD_NOT_IMPLEMENTED = "INPUT_HANDLER_METHOD_NOT_IMPLEMENTED", INPUT_HANDLER_FOR_INPUT_HANDLER_METHOD = "INPUT_HANDLER_FOR_INPUT_HANDLER_METHOD", INPUT_HANDLER_METHOD_FOR_INPUT_HANDLER = "INPUT_HANDLER_METHOD_FOR_INPUT_HANDLER", FIELD_VAL_NOT_DEFINED = "FIELD_VAL_NOT_DEFINED", COMPUTED_VAL_NOT_DEFINED = "COMPUTED_VAL_NOT_DEFINED", COMPUTED_NOT_REFERENCED = "COMPUTED_NOT_REFERENCED", UNKNOWN_REQUEST_NAME = "UNKNOWN_REQUEST_NAME", UNKNOWN_COMPONENT_NAME = "UNKNOWN_COMPONENT_NAME", LEVEL_WARN = "warn", LEVEL_ERROR = "error", LEVEL_HINT = "hint", NO_WRAPPERS, KNOWN_HANDLER_NAMES, LintParseContext;
|
|
2352
|
+
var ALT_HANDLER_NOT_DEFINED = "ALT_HANDLER_NOT_DEFINED", ALT_HANDLER_NOT_REFERENCED = "ALT_HANDLER_NOT_REFERENCED", RENDER_IT_OUTSIDE_OF_LOOP = "RENDER_IT_OUTSIDE_OF_LOOP", UNKNOWN_EVENT_MODIFIER = "UNKNOWN_EVENT_MODIFIER", UNKNOWN_HANDLER_ARG_NAME = "UNKNOWN_HANDLER_ARG_NAME", INPUT_HANDLER_NOT_IMPLEMENTED = "INPUT_HANDLER_NOT_IMPLEMENTED", INPUT_HANDLER_NOT_REFERENCED = "INPUT_HANDLER_NOT_REFERENCED", INPUT_HANDLER_METHOD_NOT_IMPLEMENTED = "INPUT_HANDLER_METHOD_NOT_IMPLEMENTED", INPUT_HANDLER_FOR_INPUT_HANDLER_METHOD = "INPUT_HANDLER_FOR_INPUT_HANDLER_METHOD", INPUT_HANDLER_METHOD_FOR_INPUT_HANDLER = "INPUT_HANDLER_METHOD_FOR_INPUT_HANDLER", FIELD_VAL_NOT_DEFINED = "FIELD_VAL_NOT_DEFINED", COMPUTED_VAL_NOT_DEFINED = "COMPUTED_VAL_NOT_DEFINED", COMPUTED_NOT_REFERENCED = "COMPUTED_NOT_REFERENCED", UNKNOWN_REQUEST_NAME = "UNKNOWN_REQUEST_NAME", UNKNOWN_COMPONENT_NAME = "UNKNOWN_COMPONENT_NAME", UNKNOWN_MACRO_ARG = "UNKNOWN_MACRO_ARG", LEVEL_WARN = "warn", LEVEL_ERROR = "error", LEVEL_HINT = "hint", NO_WRAPPERS, KNOWN_HANDLER_NAMES, LintParseContext;
|
|
2345
2353
|
var init_lint_check = __esm(() => {
|
|
2346
2354
|
init_anode();
|
|
2347
2355
|
NO_WRAPPERS = {};
|
|
@@ -2370,8 +2378,8 @@ var init_lint_check = __esm(() => {
|
|
|
2370
2378
|
super(DOMParser, Text, Comment);
|
|
2371
2379
|
this.attrs = [];
|
|
2372
2380
|
}
|
|
2373
|
-
onAttributes(attrs, wrapperAttrs, textChild) {
|
|
2374
|
-
this.attrs.push({ attrs, wrapperAttrs, textChild });
|
|
2381
|
+
onAttributes(attrs, wrapperAttrs, textChild, isMacroCall = false) {
|
|
2382
|
+
this.attrs.push({ attrs, wrapperAttrs, textChild, isMacroCall });
|
|
2375
2383
|
}
|
|
2376
2384
|
};
|
|
2377
2385
|
});
|
|
@@ -8589,7 +8597,7 @@ function pickFormatter(name) {
|
|
|
8589
8597
|
async function formatResult(formatName, result, options = {}) {
|
|
8590
8598
|
const f = pickFormatter(formatName);
|
|
8591
8599
|
const kind = result.constructor.name;
|
|
8592
|
-
if (!f.supports
|
|
8600
|
+
if (!f.supports?.has(kind)) {
|
|
8593
8601
|
throw new Error(`Formatter "${formatName}" does not support ${kind}`);
|
|
8594
8602
|
}
|
|
8595
8603
|
return await f.format(result, options);
|
package/dist/tutuca-dev.js
CHANGED
|
@@ -1053,7 +1053,7 @@ class ANode extends BaseNode {
|
|
|
1053
1053
|
return px.frame.macroSlots[slotName] ?? maybeFragment(childs);
|
|
1054
1054
|
}
|
|
1055
1055
|
const [nAttrs, wrappers] = Attributes.parse(attrs, px, true);
|
|
1056
|
-
px.onAttributes(nAttrs, wrappers, null);
|
|
1056
|
+
px.onAttributes(nAttrs, wrappers, null, true);
|
|
1057
1057
|
return wrap(px.newMacroNode(macroName, nAttrs.toMacroVars(), childs), px, wrappers);
|
|
1058
1058
|
} else if (VALID_NODE_RE.test(tag)) {
|
|
1059
1059
|
const [nAttrs, wrappers, textChild] = Attributes.parse(attrs, px);
|
|
@@ -1375,7 +1375,7 @@ class ParseContext {
|
|
|
1375
1375
|
getNodeForId(id) {
|
|
1376
1376
|
return this.nodes[id] ?? null;
|
|
1377
1377
|
}
|
|
1378
|
-
onAttributes(_attrs, _wrapperAttrs, _textChild) {}
|
|
1378
|
+
onAttributes(_attrs, _wrapperAttrs, _textChild, _isMacroCall) {}
|
|
1379
1379
|
}
|
|
1380
1380
|
var isTextNodeAllBlanks = (n) => n instanceof TextNode && n.isWhiteSpace();
|
|
1381
1381
|
var isFirstDomNode = (n) => n instanceof DomNode || n instanceof FragmentNode && n.childs[0] instanceof DomNode;
|
|
@@ -1568,6 +1568,7 @@ var COMPUTED_VAL_NOT_DEFINED = "COMPUTED_VAL_NOT_DEFINED";
|
|
|
1568
1568
|
var COMPUTED_NOT_REFERENCED = "COMPUTED_NOT_REFERENCED";
|
|
1569
1569
|
var UNKNOWN_REQUEST_NAME = "UNKNOWN_REQUEST_NAME";
|
|
1570
1570
|
var UNKNOWN_COMPONENT_NAME = "UNKNOWN_COMPONENT_NAME";
|
|
1571
|
+
var UNKNOWN_MACRO_ARG = "UNKNOWN_MACRO_ARG";
|
|
1571
1572
|
var LEVEL_WARN = "warn";
|
|
1572
1573
|
var LEVEL_ERROR = "error";
|
|
1573
1574
|
var LEVEL_HINT = "hint";
|
|
@@ -1591,6 +1592,21 @@ function checkView(lx, view, Comp, referencedAlters, referencedComputed) {
|
|
|
1591
1592
|
checkRenderItInLoop(lx, view);
|
|
1592
1593
|
checkEventModifiers(lx, view);
|
|
1593
1594
|
checkKnownHandlerNames(lx, view, Comp, referencedAlters, referencedComputed);
|
|
1595
|
+
checkMacroCallArgs(lx, view, Comp);
|
|
1596
|
+
}
|
|
1597
|
+
function checkMacroCallArgs(lx, view, Comp) {
|
|
1598
|
+
const { scope } = Comp;
|
|
1599
|
+
for (const macroNode of view.ctx.macroNodes) {
|
|
1600
|
+
const macro = scope.lookupMacro(macroNode.name);
|
|
1601
|
+
if (macro === null)
|
|
1602
|
+
continue;
|
|
1603
|
+
const { defaults } = macro;
|
|
1604
|
+
for (const argName in macroNode.attrs) {
|
|
1605
|
+
if (!(argName in defaults)) {
|
|
1606
|
+
lx.error(UNKNOWN_MACRO_ARG, { name: argName, macroName: macroNode.name });
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1609
|
+
}
|
|
1594
1610
|
}
|
|
1595
1611
|
function checkRenderItInLoop(lx, view) {
|
|
1596
1612
|
let hasRenderIt = false;
|
|
@@ -1641,7 +1657,7 @@ function checkEventModifiers(lx, view) {
|
|
|
1641
1657
|
const modWrappers = MOD_WRAPPERS_BY_EVENT[name] ?? NO_WRAPPERS;
|
|
1642
1658
|
for (const modifier of modifiers) {
|
|
1643
1659
|
if (modWrappers[modifier] === undefined) {
|
|
1644
|
-
lx.
|
|
1660
|
+
lx.error(UNKNOWN_EVENT_MODIFIER, { name, modifier, handler, event });
|
|
1645
1661
|
}
|
|
1646
1662
|
}
|
|
1647
1663
|
}
|
|
@@ -1697,7 +1713,7 @@ function checkEventHandlersHaveImpls(lx, Comp, referencedInputs) {
|
|
|
1697
1713
|
if (hvName === "InputHandlerNameVal") {
|
|
1698
1714
|
referencedInputs?.add(handlerVal.name);
|
|
1699
1715
|
if (input[handlerVal.name] === undefined) {
|
|
1700
|
-
lx.
|
|
1716
|
+
lx.error(INPUT_HANDLER_NOT_IMPLEMENTED, {
|
|
1701
1717
|
name: handlerVal.name,
|
|
1702
1718
|
handler,
|
|
1703
1719
|
event
|
|
@@ -1713,7 +1729,7 @@ function checkEventHandlersHaveImpls(lx, Comp, referencedInputs) {
|
|
|
1713
1729
|
} else if (hvName === "RawFieldVal") {
|
|
1714
1730
|
referencedInputs?.add(handlerVal.name);
|
|
1715
1731
|
if (proto[handlerVal.name] === undefined) {
|
|
1716
|
-
lx.
|
|
1732
|
+
lx.error(INPUT_HANDLER_METHOD_NOT_IMPLEMENTED, {
|
|
1717
1733
|
name: handlerVal.name,
|
|
1718
1734
|
handler,
|
|
1719
1735
|
event
|
|
@@ -1732,7 +1748,7 @@ function checkEventHandlersHaveImpls(lx, Comp, referencedInputs) {
|
|
|
1732
1748
|
});
|
|
1733
1749
|
}
|
|
1734
1750
|
}
|
|
1735
|
-
function checkConsistentAttrVal(lx, val, fields, proto, computed, scope, alter, referencedAlters, referencedComputed) {
|
|
1751
|
+
function checkConsistentAttrVal(lx, val, fields, proto, computed, scope, alter, referencedAlters, referencedComputed, skipNameVal = false) {
|
|
1736
1752
|
const valName = val?.constructor.name;
|
|
1737
1753
|
if (valName === "FieldVal" || valName === "RawFieldVal") {
|
|
1738
1754
|
const { name } = val;
|
|
@@ -1746,28 +1762,28 @@ function checkConsistentAttrVal(lx, val, fields, proto, computed, scope, alter,
|
|
|
1746
1762
|
lx.error(COMPUTED_VAL_NOT_DEFINED, { val, name });
|
|
1747
1763
|
}
|
|
1748
1764
|
} else if (valName === "SeqAccessVal") {
|
|
1749
|
-
checkConsistentAttrVal(lx, val.seqVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed);
|
|
1750
|
-
checkConsistentAttrVal(lx, val.keyVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed);
|
|
1765
|
+
checkConsistentAttrVal(lx, val.seqVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed, skipNameVal);
|
|
1766
|
+
checkConsistentAttrVal(lx, val.keyVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed, skipNameVal);
|
|
1751
1767
|
} else if (valName === "RequestVal") {
|
|
1752
1768
|
if (scope.lookupRequest(val.name) === null) {
|
|
1753
|
-
lx.
|
|
1769
|
+
lx.error(UNKNOWN_REQUEST_NAME, { name: val.name });
|
|
1754
1770
|
}
|
|
1755
1771
|
} else if (valName === "TypeVal") {
|
|
1756
1772
|
if (scope.lookupComponent(val.name) === null) {
|
|
1757
|
-
lx.
|
|
1773
|
+
lx.error(UNKNOWN_COMPONENT_NAME, { name: val.name });
|
|
1758
1774
|
}
|
|
1759
1775
|
} else if (valName === "NameVal") {
|
|
1760
|
-
if (!isKnownHandlerName(val.name)) {
|
|
1761
|
-
lx.
|
|
1776
|
+
if (!skipNameVal && !isKnownHandlerName(val.name)) {
|
|
1777
|
+
lx.error(UNKNOWN_HANDLER_ARG_NAME, { name: val.name });
|
|
1762
1778
|
}
|
|
1763
1779
|
} else if (valName === "StrTplVal") {
|
|
1764
1780
|
for (const subVal of val.vals) {
|
|
1765
|
-
checkConsistentAttrVal(lx, subVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed);
|
|
1781
|
+
checkConsistentAttrVal(lx, subVal, fields, proto, computed, scope, alter, referencedAlters, referencedComputed, skipNameVal);
|
|
1766
1782
|
}
|
|
1767
1783
|
} else if (valName === "AlterHandlerNameVal") {
|
|
1768
1784
|
referencedAlters?.add(val.name);
|
|
1769
1785
|
if (alter[val.name] === undefined) {
|
|
1770
|
-
lx.
|
|
1786
|
+
lx.error(ALT_HANDLER_NOT_DEFINED, { name: val.name });
|
|
1771
1787
|
}
|
|
1772
1788
|
} else if (valName !== "ConstVal" && valName !== "BindVal") {
|
|
1773
1789
|
console.log(val);
|
|
@@ -1781,11 +1797,11 @@ function checkConsistentAttrs(lx, Comp, referencedAlters, referencedComputed) {
|
|
|
1781
1797
|
lx.push({ viewName }, () => {
|
|
1782
1798
|
const view = views[viewName];
|
|
1783
1799
|
for (const attr of view.ctx.attrs) {
|
|
1784
|
-
const { attrs, wrapperAttrs, textChild } = attr;
|
|
1800
|
+
const { attrs, wrapperAttrs, textChild, isMacroCall } = attr;
|
|
1785
1801
|
if (attrs?.constructor.name === "DynAttrs") {
|
|
1786
1802
|
for (const attr2 of attrs.items) {
|
|
1787
1803
|
if (attr2?.constructor.name === "Attr") {
|
|
1788
|
-
checkConsistentAttrVal(lx, attr2.val, fields, proto, computed, scope, alter, referencedAlters, referencedComputed);
|
|
1804
|
+
checkConsistentAttrVal(lx, attr2.val, fields, proto, computed, scope, alter, referencedAlters, referencedComputed, isMacroCall);
|
|
1789
1805
|
}
|
|
1790
1806
|
}
|
|
1791
1807
|
}
|
|
@@ -1877,8 +1893,8 @@ class LintParseContext extends ParseContext {
|
|
|
1877
1893
|
super(DOMParser, Text, Comment);
|
|
1878
1894
|
this.attrs = [];
|
|
1879
1895
|
}
|
|
1880
|
-
onAttributes(attrs, wrapperAttrs, textChild) {
|
|
1881
|
-
this.attrs.push({ attrs, wrapperAttrs, textChild });
|
|
1896
|
+
onAttributes(attrs, wrapperAttrs, textChild, isMacroCall = false) {
|
|
1897
|
+
this.attrs.push({ attrs, wrapperAttrs, textChild, isMacroCall });
|
|
1882
1898
|
}
|
|
1883
1899
|
}
|
|
1884
1900
|
|
|
@@ -1915,6 +1931,8 @@ function lintIdToMessage(id, info) {
|
|
|
1915
1931
|
return `Alter handler '${info.name}' is not defined`;
|
|
1916
1932
|
case "ALT_HANDLER_NOT_REFERENCED":
|
|
1917
1933
|
return `Alter handler '${info.name}' is defined but not referenced`;
|
|
1934
|
+
case "UNKNOWN_MACRO_ARG":
|
|
1935
|
+
return `Argument '${info.name}' is not declared in macro '${info.macroName}'`;
|
|
1918
1936
|
case "LINT_ERROR":
|
|
1919
1937
|
return info.message;
|
|
1920
1938
|
default:
|
|
@@ -8547,9 +8565,9 @@ class LintClassCollectorCtx extends ParseCtxClassSetCollector {
|
|
|
8547
8565
|
v.attrs = this.attrs;
|
|
8548
8566
|
return v;
|
|
8549
8567
|
}
|
|
8550
|
-
onAttributes(attrs, wrapperAttrs, textChild) {
|
|
8551
|
-
super.onAttributes(attrs, wrapperAttrs, textChild);
|
|
8552
|
-
this.attrs.push({ attrs, wrapperAttrs, textChild });
|
|
8568
|
+
onAttributes(attrs, wrapperAttrs, textChild, isMacroCall = false) {
|
|
8569
|
+
super.onAttributes(attrs, wrapperAttrs, textChild, isMacroCall);
|
|
8570
|
+
this.attrs.push({ attrs, wrapperAttrs, textChild, isMacroCall });
|
|
8553
8571
|
}
|
|
8554
8572
|
}
|
|
8555
8573
|
export {
|
|
@@ -8605,6 +8623,7 @@ export {
|
|
|
8605
8623
|
checkComponent,
|
|
8606
8624
|
check,
|
|
8607
8625
|
UNKNOWN_REQUEST_NAME,
|
|
8626
|
+
UNKNOWN_MACRO_ARG,
|
|
8608
8627
|
UNKNOWN_HANDLER_ARG_NAME,
|
|
8609
8628
|
UNKNOWN_EVENT_MODIFIER,
|
|
8610
8629
|
UNKNOWN_COMPONENT_NAME,
|