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.
@@ -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.warn(UNKNOWN_EVENT_MODIFIER, { name, modifier, handler, event });
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.warn(INPUT_HANDLER_NOT_IMPLEMENTED, {
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.warn(INPUT_HANDLER_METHOD_NOT_IMPLEMENTED, {
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.warn(UNKNOWN_REQUEST_NAME, { name: val.name });
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.warn(UNKNOWN_COMPONENT_NAME, { name: val.name });
2235
+ lx.error(UNKNOWN_COMPONENT_NAME, { name: val.name });
2228
2236
  }
2229
2237
  } else if (valName === "NameVal") {
2230
- if (!isKnownHandlerName(val.name)) {
2231
- lx.warn(UNKNOWN_HANDLER_ARG_NAME, { name: val.name });
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.warn(ALT_HANDLER_NOT_DEFINED, { name: val.name });
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 || !f.supports.has(kind)) {
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);
@@ -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.warn(UNKNOWN_EVENT_MODIFIER, { name, modifier, handler, event });
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.warn(INPUT_HANDLER_NOT_IMPLEMENTED, {
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.warn(INPUT_HANDLER_METHOD_NOT_IMPLEMENTED, {
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.warn(UNKNOWN_REQUEST_NAME, { name: val.name });
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.warn(UNKNOWN_COMPONENT_NAME, { name: val.name });
1773
+ lx.error(UNKNOWN_COMPONENT_NAME, { name: val.name });
1758
1774
  }
1759
1775
  } else if (valName === "NameVal") {
1760
- if (!isKnownHandlerName(val.name)) {
1761
- lx.warn(UNKNOWN_HANDLER_ARG_NAME, { name: val.name });
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.warn(ALT_HANDLER_NOT_DEFINED, { name: val.name });
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,